Chatwoot Application Labels API
List the account's labels and read or set the labels applied to individual conversations and contacts for organization and reporting.
List the account's labels and read or set the labels applied to individual conversations and contacts for organization and reporting.
openapi: 3.0.1
info:
title: Chatwoot API
description: >-
Chatwoot is an open-source customer engagement suite with a shared inbox
across email, live-chat, social, and messaging channels. This specification
covers the three Chatwoot API surfaces: the Application API
(/api/v1/accounts/{account_id}/...) for account-scoped agent, contact, and
conversation management; the Client API (/public/api/v1/inboxes/...) for
building custom end-user chat widgets; and the Platform API
(/platform/api/v1/...) for super-admin control of a Chatwoot installation.
Application and Platform requests authenticate with an `api_access_token`
HTTP header; Client requests are scoped by an inbox identifier and a
contact source/pubsub identifier.
termsOfService: https://www.chatwoot.com/terms-of-service/
contact:
name: Chatwoot Developers
url: https://developers.chatwoot.com
license:
name: MIT (core) with additional Chatwoot license terms for some features
url: https://github.com/chatwoot/chatwoot/blob/develop/LICENSE
version: '1.0'
servers:
- url: https://app.chatwoot.com
description: Chatwoot Cloud. For self-hosted installations, substitute your own host.
tags:
- name: Agents
description: Application API - manage account agents.
- name: Teams
description: Application API - manage teams and membership.
- name: Inboxes
description: Application API - manage channels/inboxes.
- name: Contacts
description: Application API - manage contacts.
- name: Conversations
description: Application API - manage conversations.
- name: Messages
description: Application API - manage conversation messages.
- name: Labels
description: Application API - manage labels.
- name: Custom Attributes
description: Application API - manage custom attribute definitions.
- name: Canned Responses
description: Application API - manage saved reply templates.
- name: Automation Rules
description: Application API - manage automation rules.
- name: Reports
description: Application API - retrieve analytics and reports.
- name: Client Contacts
description: Client API - end-user contact management.
- name: Client Conversations
description: Client API - end-user conversation management.
- name: Client Messages
description: Client API - end-user message management.
- name: Platform Users
description: Platform API - super-admin user management.
- name: Platform Accounts
description: Platform API - super-admin account management.
- name: Platform Agent Bots
description: Platform API - super-admin agent bot management.
security:
- userApiKey: []
paths:
# ---------------------------------------------------------------------------
# APPLICATION API
# ---------------------------------------------------------------------------
/api/v1/accounts/{account_id}/agents:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listAgents
tags: [Agents]
summary: List agents in an account.
responses:
'200':
description: Array of agents.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Agent'
post:
operationId: addAgent
tags: [Agents]
summary: Add a new agent to the account.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AgentCreate'
responses:
'200':
description: The created agent.
content:
application/json:
schema:
$ref: '#/components/schemas/Agent'
/api/v1/accounts/{account_id}/agents/{id}:
parameters:
- $ref: '#/components/parameters/AccountId'
- name: id
in: path
required: true
schema:
type: integer
patch:
operationId: updateAgent
tags: [Agents]
summary: Update an agent's role or availability.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AgentUpdate'
responses:
'200':
description: The updated agent.
content:
application/json:
schema:
$ref: '#/components/schemas/Agent'
delete:
operationId: deleteAgent
tags: [Agents]
summary: Remove an agent from the account.
responses:
'200':
description: Agent removed.
/api/v1/accounts/{account_id}/teams:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listTeams
tags: [Teams]
summary: List teams in an account.
responses:
'200':
description: Array of teams.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Team'
post:
operationId: createTeam
tags: [Teams]
summary: Create a team.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TeamCreate'
responses:
'200':
description: The created team.
content:
application/json:
schema:
$ref: '#/components/schemas/Team'
/api/v1/accounts/{account_id}/teams/{team_id}:
parameters:
- $ref: '#/components/parameters/AccountId'
- name: team_id
in: path
required: true
schema:
type: integer
get:
operationId: getTeam
tags: [Teams]
summary: Get a team by id.
responses:
'200':
description: The team.
content:
application/json:
schema:
$ref: '#/components/schemas/Team'
patch:
operationId: updateTeam
tags: [Teams]
summary: Update a team.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TeamCreate'
responses:
'200':
description: The updated team.
content:
application/json:
schema:
$ref: '#/components/schemas/Team'
delete:
operationId: deleteTeam
tags: [Teams]
summary: Delete a team.
responses:
'200':
description: Team deleted.
/api/v1/accounts/{account_id}/inboxes:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listInboxes
tags: [Inboxes]
summary: List inboxes in an account.
responses:
'200':
description: Object containing an array of inboxes.
content:
application/json:
schema:
type: object
properties:
payload:
type: array
items:
$ref: '#/components/schemas/Inbox'
/api/v1/accounts/{account_id}/inboxes/{id}:
parameters:
- $ref: '#/components/parameters/AccountId'
- name: id
in: path
required: true
schema:
type: integer
get:
operationId: getInbox
tags: [Inboxes]
summary: Get an inbox by id.
responses:
'200':
description: The inbox.
content:
application/json:
schema:
$ref: '#/components/schemas/Inbox'
patch:
operationId: updateInbox
tags: [Inboxes]
summary: Update an inbox.
responses:
'200':
description: The updated inbox.
delete:
operationId: deleteInbox
tags: [Inboxes]
summary: Delete an inbox.
responses:
'200':
description: Inbox deleted.
/api/v1/accounts/{account_id}/contacts:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listContacts
tags: [Contacts]
summary: List contacts (paginated, sortable).
parameters:
- name: sort
in: query
schema:
type: string
enum: [name, email, phone_number, last_activity_at, -name, -email, -phone_number, -last_activity_at]
- name: page
in: query
schema:
type: integer
responses:
'200':
description: Contacts payload with meta.
content:
application/json:
schema:
$ref: '#/components/schemas/ContactList'
post:
operationId: createContact
tags: [Contacts]
summary: Create a contact.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContactCreate'
responses:
'200':
description: The created contact.
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
/api/v1/accounts/{account_id}/contacts/search:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: searchContacts
tags: [Contacts]
summary: Search contacts by name, email, phone, or identifier.
parameters:
- name: q
in: query
required: true
schema:
type: string
responses:
'200':
description: Matching contacts.
content:
application/json:
schema:
$ref: '#/components/schemas/ContactList'
/api/v1/accounts/{account_id}/contacts/filter:
parameters:
- $ref: '#/components/parameters/AccountId'
post:
operationId: filterContacts
tags: [Contacts]
summary: Filter contacts with a set of query conditions.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FilterPayload'
responses:
'200':
description: Matching contacts.
content:
application/json:
schema:
$ref: '#/components/schemas/ContactList'
/api/v1/accounts/{account_id}/contacts/{id}:
parameters:
- $ref: '#/components/parameters/AccountId'
- name: id
in: path
required: true
schema:
type: integer
get:
operationId: getContact
tags: [Contacts]
summary: Get a contact by id.
responses:
'200':
description: The contact.
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
put:
operationId: updateContact
tags: [Contacts]
summary: Update a contact.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContactCreate'
responses:
'200':
description: The updated contact.
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
delete:
operationId: deleteContact
tags: [Contacts]
summary: Delete a contact.
responses:
'200':
description: Contact deleted.
/api/v1/accounts/{account_id}/contacts/{id}/conversations:
parameters:
- $ref: '#/components/parameters/AccountId'
- name: id
in: path
required: true
schema:
type: integer
get:
operationId: listContactConversations
tags: [Contacts]
summary: List all conversations for a contact.
responses:
'200':
description: Array of conversations for the contact.
/api/v1/accounts/{account_id}/conversations:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listConversations
tags: [Conversations]
summary: List conversations with optional status, assignee, and inbox filters.
parameters:
- name: status
in: query
schema:
type: string
enum: [open, resolved, pending, snoozed, all]
- name: assignee_type
in: query
schema:
type: string
enum: [me, unassigned, all, assigned]
- name: inbox_id
in: query
schema:
type: integer
- name: page
in: query
schema:
type: integer
responses:
'200':
description: Conversations payload with meta.
content:
application/json:
schema:
$ref: '#/components/schemas/ConversationList'
post:
operationId: createConversation
tags: [Conversations]
summary: Create a new conversation.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ConversationCreate'
responses:
'200':
description: The created conversation.
content:
application/json:
schema:
$ref: '#/components/schemas/Conversation'
/api/v1/accounts/{account_id}/conversations/{conversation_id}:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/ConversationId'
get:
operationId: getConversation
tags: [Conversations]
summary: Get a conversation by id.
responses:
'200':
description: The conversation.
content:
application/json:
schema:
$ref: '#/components/schemas/Conversation'
/api/v1/accounts/{account_id}/conversations/{conversation_id}/toggle_status:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/ConversationId'
post:
operationId: toggleConversationStatus
tags: [Conversations]
summary: Toggle the status of a conversation (open, resolved, pending, snoozed).
requestBody:
content:
application/json:
schema:
type: object
properties:
status:
type: string
enum: [open, resolved, pending, snoozed]
responses:
'200':
description: The updated conversation.
/api/v1/accounts/{account_id}/conversations/{conversation_id}/assignments:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/ConversationId'
post:
operationId: assignConversation
tags: [Conversations]
summary: Assign a conversation to an agent or a team.
requestBody:
content:
application/json:
schema:
type: object
properties:
assignee_id:
type: integer
team_id:
type: integer
responses:
'200':
description: The assignment result.
/api/v1/accounts/{account_id}/conversations/{conversation_id}/labels:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/ConversationId'
get:
operationId: getConversationLabels
tags: [Labels]
summary: List labels applied to a conversation.
responses:
'200':
description: Object with a payload array of label names.
post:
operationId: setConversationLabels
tags: [Labels]
summary: Set the labels applied to a conversation.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
labels:
type: array
items:
type: string
responses:
'200':
description: The updated label list.
/api/v1/accounts/{account_id}/conversations/{conversation_id}/messages:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/ConversationId'
get:
operationId: listMessages
tags: [Messages]
summary: List messages in a conversation.
responses:
'200':
description: Object with a payload array of messages.
content:
application/json:
schema:
type: object
properties:
payload:
type: array
items:
$ref: '#/components/schemas/Message'
post:
operationId: createMessage
tags: [Messages]
summary: Create a message in a conversation.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/MessageCreate'
responses:
'200':
description: The created message.
content:
application/json:
schema:
$ref: '#/components/schemas/Message'
/api/v1/accounts/{account_id}/conversations/{conversation_id}/messages/{message_id}:
parameters:
- $ref: '#/components/parameters/AccountId'
- $ref: '#/components/parameters/ConversationId'
- name: message_id
in: path
required: true
schema:
type: integer
delete:
operationId: deleteMessage
tags: [Messages]
summary: Delete a message from a conversation.
responses:
'200':
description: Message deleted.
/api/v1/accounts/{account_id}/labels:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listLabels
tags: [Labels]
summary: List all labels in the account.
responses:
'200':
description: Object with a payload array of labels.
content:
application/json:
schema:
type: object
properties:
payload:
type: array
items:
$ref: '#/components/schemas/Label'
/api/v1/accounts/{account_id}/custom_attribute_definitions:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listCustomAttributeDefinitions
tags: [Custom Attributes]
summary: List custom attribute definitions.
responses:
'200':
description: Array of custom attribute definitions.
post:
operationId: createCustomAttributeDefinition
tags: [Custom Attributes]
summary: Create a custom attribute definition.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomAttributeDefinition'
responses:
'200':
description: The created custom attribute definition.
/api/v1/accounts/{account_id}/custom_attribute_definitions/{id}:
parameters:
- $ref: '#/components/parameters/AccountId'
- name: id
in: path
required: true
schema:
type: integer
patch:
operationId: updateCustomAttributeDefinition
tags: [Custom Attributes]
summary: Update a custom attribute definition.
responses:
'200':
description: The updated custom attribute definition.
delete:
operationId: deleteCustomAttributeDefinition
tags: [Custom Attributes]
summary: Delete a custom attribute definition.
responses:
'200':
description: Deleted.
/api/v1/accounts/{account_id}/canned_responses:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listCannedResponses
tags: [Canned Responses]
summary: List canned responses.
responses:
'200':
description: Array of canned responses.
post:
operationId: createCannedResponse
tags: [Canned Responses]
summary: Create a canned response.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CannedResponse'
responses:
'200':
description: The created canned response.
/api/v1/accounts/{account_id}/canned_responses/{id}:
parameters:
- $ref: '#/components/parameters/AccountId'
- name: id
in: path
required: true
schema:
type: integer
patch:
operationId: updateCannedResponse
tags: [Canned Responses]
summary: Update a canned response.
responses:
'200':
description: The updated canned response.
delete:
operationId: deleteCannedResponse
tags: [Canned Responses]
summary: Delete a canned response.
responses:
'200':
description: Deleted.
/api/v1/accounts/{account_id}/automation_rules:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listAutomationRules
tags: [Automation Rules]
summary: List automation rules.
responses:
'200':
description: Payload of automation rules.
post:
operationId: createAutomationRule
tags: [Automation Rules]
summary: Create an automation rule.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AutomationRule'
responses:
'200':
description: The created automation rule.
/api/v1/accounts/{account_id}/automation_rules/{id}:
parameters:
- $ref: '#/components/parameters/AccountId'
- name: id
in: path
required: true
schema:
type: integer
get:
operationId: getAutomationRule
tags: [Automation Rules]
summary: Get an automation rule by id.
responses:
'200':
description: The automation rule.
patch:
operationId: updateAutomationRule
tags: [Automation Rules]
summary: Update an automation rule.
responses:
'200':
description: The updated automation rule.
delete:
operationId: deleteAutomationRule
tags: [Automation Rules]
summary: Delete an automation rule.
responses:
'200':
description: Deleted.
/api/v1/accounts/{account_id}/reports:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: getReport
tags: [Reports]
summary: Get a metric report over a time range.
parameters:
- name: metric
in: query
required: true
schema:
type: string
enum:
- conversations_count
- incoming_messages_count
- outgoing_messages_count
- avg_first_response_time
- avg_resolution_time
- resolutions_count
- name: type
in: query
required: true
schema:
type: string
enum: [account, agent, inbox, label, team]
- name: since
in: query
schema:
type: string
description: Unix epoch seconds for the start of the range.
- name: until
in: query
schema:
type: string
description: Unix epoch seconds for the end of the range.
responses:
'200':
description: Time-series data points for the requested metric.
/api/v1/accounts/{account_id}/conversations/meta:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: getConversationReportsSummary
tags: [Reports]
summary: Get a summary count of conversations by status (open, unassigned, etc.).
responses:
'200':
description: Conversation count summary.
# ---------------------------------------------------------------------------
# CLIENT API (public, end-user facing)
# ---------------------------------------------------------------------------
/public/api/v1/inboxes/{inbox_identifier}/contacts:
parameters:
- $ref: '#/components/parameters/InboxIdentifier'
post:
operationId: createClientContact
tags: [Client Contacts]
security: []
summary: Create an end-user contact for a public inbox.
requestBody:
content:
application/json:
schema:
type: object
properties:
identifier:
type: string
identifier_hash:
type: string
email:
type: string
name:
type: string
phone_number:
type: string
responses:
'200':
description: The created contact including source_id and pubsub_token.
/public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}:
parameters:
- $ref: '#/components/parameters/InboxIdentifier'
- $ref: '#/components/parameters/ContactIdentifier'
get:
operationId: getClientContact
tags: [Client Contacts]
security: []
summary: Get the end-user contact.
responses:
'200':
description: The contact.
patch:
operationId: updateClientContact
tags: [Client Contacts]
security: []
summary: Update the end-user contact.
responses:
'200':
description: The updated contact.
/public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}/conversations:
parameters:
- $ref: '#/components/parameters/InboxIdentifier'
- $ref: '#/components/parameters/ContactIdentifier'
get:
operationId: listClientConversations
tags: [Client Conversations]
security: []
summary: List the contact's conversations.
responses:
'200':
description: Array of conversations.
post:
operationId: createClientConversation
tags: [Client Conversations]
security: []
summary: Create a conversation for the contact.
responses:
'200':
description: The created conversation.
/public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}/conversations/{conversation_id}/toggle_status:
parameters:
- $ref: '#/components/parameters/InboxIdentifier'
- $ref: '#/components/parameters/ContactIdentifier'
- $ref: '#/components/parameters/ConversationId'
post:
operationId: toggleClientConversationStatus
tags: [Client Conversations]
security: []
summary: Toggle the status of the contact's conversation.
responses:
'200':
description: Status toggled.
/public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}/conversations/{conversation_id}/toggle_typing:
parameters:
- $ref: '#/components/parameters/InboxIdentifier'
- $ref: '#/components/parameters/ContactIdentifier'
- $ref: '#/components/parameters/ConversationId'
post:
operationId: toggleClientTyping
tags: [Client Conversations]
security: []
summary: Signal typing on/off in the conversation.
responses:
'200':
description: Typing signal recorded.
/public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}/conversations/{conversation_id}/update_last_seen:
parameters:
- $ref: '#/components/parameters/InboxIdentifier'
- $ref: '#/components/parameters/ContactIdentifier'
- $ref: '#/components/parameters/ConversationId'
post:
operationId: updateClientLastSeen
tags: [Client Conversations]
security: []
summary: Update the contact's last-seen timestamp for the conversation.
responses:
'200':
description: Last-seen updated.
/public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}/conversations/{conversation_id}/messages:
parameters:
- $ref: '#/components/parameters/InboxIdentifier'
- $ref: '#/components/parameters/ContactIdentifier'
- $ref: '#/components/parameters/ConversationId'
get:
operationId: listClientMessages
tags: [Client Messages]
security: []
summary: List messages in the contact's conversation.
responses:
'200':
description: Array of messages.
post:
operationId: createClientMessage
tags: [Client Messages]
security: []
summary: Create a message in the contact's conversation.
requestBody:
content:
application/json:
schema:
type: object
properties:
content:
type: string
echo_id:
type: string
responses:
'200':
description: The created message.
# ---------------------------------------------------------------------------
# PLATFORM API (super-admin)
# ---------------------------------------------------------------------------
/platform/api/v1/users:
post:
operationId: createPlatformUser
tags: [Platform Users]
security:
- platformAppApiKey: []
summary: Create a user on the installation.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PlatformUserCreate'
responses:
'200':
description: The created user.
/platform/api/v1/users/{id}:
parameters:
- name: id
in: path
required: true
schema:
type: integer
get:
operationId: getPlatformUser
tags: [Platform Users]
security:
- platformAppApiKey: []
summary: Get a user by id.
responses:
'200':
description: The user.
patch:
operationId: updatePlatformUser
tags: [Platform Users]
security:
- platformAppApiKey: []
summary: Update a user.
responses:
'200':
description: The updated user.
delete:
operationId: deletePlatformUser
tags: [Platform Users]
security:
- platformAppApiKey: []
summary: Delete a user.
responses:
'200':
description: Deleted.
/platform/api/v1/users/{id}/login:
parameters:
- name: id
in: path
required: true
schema:
type: integer
get:
operationId: getPlatformUserLoginLink
tags: [Platform Users]
security:
- platformAppApiKey: []
summary: Get a single-sign-on login link for the user.
responses:
'200':
description: An SSO login URL.
/platform/api/v1/accounts:
post:
operationId: createPlatformAccount
tags: [Platform Accounts]
security:
- platformAppApiKey: []
summary: Create an account on the installation.
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
responses:
'200':
description: The created account.
/platform/api/v1/accounts/{account_id}:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: getPlatformAccount
tags: [Platform Accounts]
security:
- platformAppApiKey: []
summary: Get an account by id.
responses:
'200':
description: The account.
patch:
operationId: updatePlatformAccount
tags: [Platform Accounts]
security:
- platformAppApiKey: []
summary: Update an account.
responses:
'200':
description: The updated account.
delete:
operationId: deletePlatformAccount
tags: [Platform Accounts]
security:
- platformAppApiKey: []
summary: Delete an account.
responses:
'200':
description: Deleted.
/platform/api/v1/accounts/{account_id}/account_users:
parameters:
- $ref: '#/components/parameters/AccountId'
get:
operationId: listPlatformAccountUsers
tags: [Platform Accounts]
security:
- platfor
# --- truncated at 32 KB (43 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/chatwoot-com/refs/heads/main/openapi/chatwoot-com-openapi.yml