Toggle Status
Toggle the status of a conversation. Pass status to explicitly set the
conversation state. Use snoozed along with snoozed_until to snooze a
conversation until a specific time. If snoozed_until is omitted, the
conversation is snoozed until the next reply from the contact. Regardless
of the value provided, snoozed conversations always reopen on the next
reply from the contact.
curl --request POST \
--url https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "open",
"snoozed_until": 1757506877
}
'import requests
url = "https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status"
payload = {
"status": "open",
"snoozed_until": 1757506877
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({status: 'open', snoozed_until: 1757506877})
};
fetch('https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'status' => 'open',
'snoozed_until' => 1757506877
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status"
payload := strings.NewReader("{\n \"status\": \"open\",\n \"snoozed_until\": 1757506877\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"open\",\n \"snoozed_until\": 1757506877\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"open\",\n \"snoozed_until\": 1757506877\n}"
response = http.request(request)
puts response.read_body{
"meta": {},
"payload": {
"success": true,
"current_status": "open",
"conversation_id": 123
}
}{
"description": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"code": "<string>"
}
]
}{
"description": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"code": "<string>"
}
]
}Authorizations
Authenticate with Authorization: Bearer <token> using a user API token from Profile Settings. Available in Chatwoot v4.19.0 and later.
Path Parameters
The numeric ID of the account
The numeric ID of the conversation
Body
The status of the conversation
open, resolved, pending, snoozed "open"
When status is snoozed, schedule the reopen time as a Unix timestamp in seconds. If not provided, the conversation is snoozed until the next customer reply. The conversation always reopens when the customer replies.
1757506877
curl --request POST \
--url https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"status": "open",
"snoozed_until": 1757506877
}
'import requests
url = "https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status"
payload = {
"status": "open",
"snoozed_until": 1757506877
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({status: 'open', snoozed_until: 1757506877})
};
fetch('https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'status' => 'open',
'snoozed_until' => 1757506877
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status"
payload := strings.NewReader("{\n \"status\": \"open\",\n \"snoozed_until\": 1757506877\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"status\": \"open\",\n \"snoozed_until\": 1757506877\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.chatwoot.com/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"status\": \"open\",\n \"snoozed_until\": 1757506877\n}"
response = http.request(request)
puts response.read_body{
"meta": {},
"payload": {
"success": true,
"current_status": "open",
"conversation_id": 123
}
}{
"description": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"code": "<string>"
}
]
}{
"description": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>",
"code": "<string>"
}
]
}
