Skip to main content

Overview

Conversations represent the communication threads between your team and contacts. Each conversation belongs to an inbox and can contain multiple messages.

List Conversations

Retrieve a list of conversations with filtering options.
GET /api/v1/accounts/{account_id}/conversations

Path Parameters

account_id
integer
required
The ID of the account

Query Parameters

inbox_id
integer
Filter by inbox ID
status
string
Filter by status: open, pending, resolved, snoozed
assignee_type
string
Filter by assignee: me, unassigned, all
page
integer
default:"1"
Page number for pagination

Response

id
integer
Conversation ID
display_id
integer
Display ID shown in UI
inbox_id
integer
Associated inbox ID
status
string
Conversation status: open, pending, resolved, snoozed
priority
string
Priority level: low, medium, high, urgent, or null
assignee
object
Assigned agent information
contact
object
Contact information
unread_count
integer
Number of unread messages
last_activity_at
integer
Unix timestamp of last activity

Example Request

curl -X GET "https://app.chatwoot.com/api/v1/accounts/1/conversations?status=open&page=1" \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

Example Response

{
  "data": {
    "payload": [
      {
        "id": 1,
        "display_id": 1,
        "inbox_id": 1,
        "status": "open",
        "priority": "high",
        "muted": false,
        "assignee": {
          "id": 1,
          "name": "John Doe",
          "email": "[email protected]"
        },
        "contact": {
          "id": 1,
          "name": "Customer Name",
          "email": "[email protected]"
        },
        "unread_count": 3,
        "last_activity_at": 1704067200,
        "created_at": 1704060000
      }
    ],
    "meta": {
      "count": 25,
      "current_page": 1
    }
  }
}

Get Conversation

Retrieve details of a specific conversation.
GET /api/v1/accounts/{account_id}/conversations/{id}

Path Parameters

account_id
integer
required
The ID of the account
id
integer
required
The display ID of the conversation

Example Request

curl -X GET https://app.chatwoot.com/api/v1/accounts/1/conversations/1 \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

Create Conversation

Create a new conversation with a contact.
POST /api/v1/accounts/{account_id}/conversations

Path Parameters

account_id
integer
required
The ID of the account

Request Body

contact_id
integer
required
Contact ID
inbox_id
integer
required
Inbox ID
source_id
string
External source identifier
status
string
default:"open"
Initial status: open, pending, resolved
assignee_id
integer
Agent ID to assign the conversation to
message
object
Initial message object
message.content
string
Message content
message.message_type
string
Message type: incoming or outgoing

Example Request

curl -X POST https://app.chatwoot.com/api/v1/accounts/1/conversations \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": 1,
    "inbox_id": 1,
    "status": "open",
    "assignee_id": 1,
    "message": {
      "content": "Hello, I need help with my order",
      "message_type": "incoming"
    }
  }'

Example Response

{
  "id": 1,
  "display_id": 1,
  "inbox_id": 1,
  "status": "open",
  "priority": null,
  "assignee": {
    "id": 1,
    "name": "John Doe"
  },
  "contact": {
    "id": 1,
    "name": "Customer Name"
  },
  "created_at": 1704067200
}

Update Conversation

Update conversation properties.
PATCH /api/v1/accounts/{account_id}/conversations/{id}

Path Parameters

account_id
integer
required
The ID of the account
id
integer
required
The display ID of the conversation

Request Body

priority
string
Priority: low, medium, high, urgent, or null

Example Request

curl -X PATCH https://app.chatwoot.com/api/v1/accounts/1/conversations/1 \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "priority": "high"
  }'

Delete Conversation

Delete a conversation permanently.
DELETE /api/v1/accounts/{account_id}/conversations/{id}

Path Parameters

account_id
integer
required
The ID of the account
id
integer
required
The display ID of the conversation

Example Request

curl -X DELETE https://app.chatwoot.com/api/v1/accounts/1/conversations/1 \
  -H "api_access_token: YOUR_ACCESS_TOKEN"
Deleting a conversation is permanent and cannot be undone. All messages and metadata will be removed.

Toggle Status

Change the conversation status.
POST /api/v1/accounts/{account_id}/conversations/{id}/toggle_status

Path Parameters

account_id
integer
required
The ID of the account
id
integer
required
The display ID of the conversation

Request Body

status
string
required
New status: open, pending, resolved, snoozed
snoozed_until
string
ISO 8601 timestamp when to unsnooze (required if status is snoozed)

Example Request

curl -X POST https://app.chatwoot.com/api/v1/accounts/1/conversations/1/toggle_status \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "resolved"
  }'

Toggle Priority

Change the conversation priority.
POST /api/v1/accounts/{account_id}/conversations/{id}/toggle_priority

Path Parameters

account_id
integer
required
The ID of the account
id
integer
required
The display ID of the conversation

Request Body

priority
string
required
Priority: low, medium, high, urgent, or null

Example Request

curl -X POST https://app.chatwoot.com/api/v1/accounts/1/conversations/1/toggle_priority \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "priority": "urgent"
  }'

Mute Conversation

Mute notifications for a conversation.
POST /api/v1/accounts/{account_id}/conversations/{id}/mute

Example Request

curl -X POST https://app.chatwoot.com/api/v1/accounts/1/conversations/1/mute \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

Unmute Conversation

Unmute notifications for a conversation.
POST /api/v1/accounts/{account_id}/conversations/{id}/unmute

Example Request

curl -X POST https://app.chatwoot.com/api/v1/accounts/1/conversations/1/unmute \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

Mark as Unread

Mark conversation as unread.
POST /api/v1/accounts/{account_id}/conversations/{id}/unread

Example Request

curl -X POST https://app.chatwoot.com/api/v1/accounts/1/conversations/1/unread \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

Update Last Seen

Update agent’s last seen timestamp.
POST /api/v1/accounts/{account_id}/conversations/{id}/update_last_seen

Example Request

curl -X POST https://app.chatwoot.com/api/v1/accounts/1/conversations/1/update_last_seen \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

Update Custom Attributes

Update conversation custom attributes.
POST /api/v1/accounts/{account_id}/conversations/{id}/custom_attributes

Request Body

custom_attributes
object
required
Custom attributes as key-value pairs

Example Request

curl -X POST https://app.chatwoot.com/api/v1/accounts/1/conversations/1/custom_attributes \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "custom_attributes": {
      "order_id": "ORD-12345",
      "product_type": "subscription"
    }
  }'

Get Conversation Transcript

Send conversation transcript via email.
POST /api/v1/accounts/{account_id}/conversations/{id}/transcript

Request Body

email
string
required
Email address to send transcript to

Example Request

curl -X POST https://app.chatwoot.com/api/v1/accounts/1/conversations/1/transcript \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]"
  }'
Email transcripts may be rate-limited based on your account plan.

Get Attachments

Retrieve all attachments in a conversation.
GET /api/v1/accounts/{account_id}/conversations/{id}/attachments

Query Parameters

page
integer
default:"1"
Page number (100 attachments per page)

Example Request

curl -X GET https://app.chatwoot.com/api/v1/accounts/1/conversations/1/attachments \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

Search Conversations

Search conversations by content.
GET /api/v1/accounts/{account_id}/conversations/search

Query Parameters

q
string
required
Search query
page
integer
default:"1"
Page number

Example Request

curl -X GET "https://app.chatwoot.com/api/v1/accounts/1/conversations/search?q=order" \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

Filter Conversations

Filter conversations using advanced filters.
POST /api/v1/accounts/{account_id}/conversations/filter

Request Body

payload
array
required
Array of filter conditions

Example Request

curl -X POST https://app.chatwoot.com/api/v1/accounts/1/conversations/filter \
  -H "api_access_token: YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "payload": [
      {
        "attribute_key": "status",
        "filter_operator": "equal_to",
        "values": ["open"]
      },
      {
        "attribute_key": "priority",
        "filter_operator": "equal_to",
        "values": ["high"]
      }
    ]
  }'

Get Conversation Meta

Get conversation count metadata without fetching conversations.
GET /api/v1/accounts/{account_id}/conversations/meta

Example Request

curl -X GET https://app.chatwoot.com/api/v1/accounts/1/conversations/meta \
  -H "api_access_token: YOUR_ACCESS_TOKEN"

Conversation Status Types

Open

Active conversations requiring attention.

Pending

Conversations waiting for customer response.

Resolved

Closed conversations that are resolved.

Snoozed

Conversations temporarily hidden until a specific time.

Priority Levels

  • Low: Non-urgent matters
  • Medium: Standard priority
  • High: Important issues
  • Urgent: Critical issues requiring immediate attention
  • null: No priority set

Build docs developers (and LLMs) love