Chatwoot Conversations API API

Public conversation APIs

OpenAPI Specification

chatwoot-conversations-api-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Chatwoot Account AgentBots Conversations API API
  description: This is the API documentation for Chatwoot server.
  version: 1.1.0
  termsOfService: https://www.chatwoot.com/terms-of-service/
  contact:
    email: hello@chatwoot.com
  license:
    name: MIT License
    url: https://opensource.org/licenses/MIT
servers:
- url: https://app.chatwoot.com/
tags:
- name: Conversations API
  description: Public conversation APIs
paths:
  /public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}/conversations:
    parameters:
    - $ref: '#/components/parameters/public_inbox_identifier'
    - $ref: '#/components/parameters/public_contact_identifier'
    post:
      tags:
      - Conversations API
      operationId: create-a-conversation
      summary: Create a conversation
      description: Create a conversation
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/public_conversation_create_payload'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/public_conversation'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
    get:
      tags:
      - Conversations API
      operationId: list-all-contact-conversations
      summary: List all conversations
      description: List all conversations for the contact
      security: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: array
                description: Array of conversations
                items:
                  $ref: '#/components/schemas/public_conversation'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
  /public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}/conversations/{conversation_id}:
    parameters:
    - $ref: '#/components/parameters/public_inbox_identifier'
    - $ref: '#/components/parameters/public_contact_identifier'
    - $ref: '#/components/parameters/conversation_id'
    get:
      tags:
      - Conversations API
      operationId: get-single-conversation
      summary: Get a single conversation
      description: Retrieves the details of a specific conversation
      security: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/public_conversation'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
        '404':
          description: Conversation not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
  /public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}/conversations/{conversation_id}/toggle_status:
    parameters:
    - $ref: '#/components/parameters/public_inbox_identifier'
    - $ref: '#/components/parameters/public_contact_identifier'
    - $ref: '#/components/parameters/conversation_id'
    post:
      tags:
      - Conversations API
      operationId: resolve-conversation
      summary: Resolve a conversation
      description: Marks a conversation as resolved
      security: []
      responses:
        '200':
          description: Conversation resolved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/public_conversation'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
        '404':
          description: Conversation not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
  /public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}/conversations/{conversation_id}/toggle_typing:
    parameters:
    - $ref: '#/components/parameters/public_inbox_identifier'
    - $ref: '#/components/parameters/public_contact_identifier'
    - $ref: '#/components/parameters/conversation_id'
    post:
      tags:
      - Conversations API
      operationId: toggle-typing-status
      summary: Toggle typing status
      description: Toggles the typing status in a conversation
      security: []
      parameters:
      - name: typing_status
        in: query
        required: true
        schema:
          type: string
        description: Typing status, either 'on' or 'off'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                typing_status:
                  type: string
                  enum:
                  - 'on'
                  - 'off'
                  description: The typing status to set
                  example: 'on'
      responses:
        '200':
          description: Typing status toggled successfully
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
        '404':
          description: Conversation not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
  /public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}/conversations/{conversation_id}/update_last_seen:
    parameters:
    - $ref: '#/components/parameters/public_inbox_identifier'
    - $ref: '#/components/parameters/public_contact_identifier'
    - $ref: '#/components/parameters/conversation_id'
    post:
      tags:
      - Conversations API
      operationId: update-last-seen
      summary: Update last seen
      description: Updates the last seen time of the contact in a conversation
      security: []
      responses:
        '200':
          description: Last seen updated successfully
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
        '404':
          description: Conversation not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
components:
  schemas:
    public_contact_record:
      type: object
      additionalProperties: true
      description: Full serialized contact record returned when the public API renders a Contact model directly.
      properties:
        id:
          type: integer
          description: Id of the contact
        name:
          nullable: true
          type: string
          description: Name of the contact when available
        email:
          nullable: true
          type: string
          description: Email of the contact
        phone_number:
          nullable: true
          type: string
          description: Phone number of the contact
        identifier:
          nullable: true
          type: string
          description: Identifier of the contact
        blocked:
          type: boolean
          description: Whether the contact is blocked
        additional_attributes:
          nullable: true
          type: object
          description: Additional attributes of the contact when present
        custom_attributes:
          nullable: true
          type: object
          description: Custom attributes of the contact when present
        contact_type:
          nullable: true
          type: string
          description: Contact type of the contact when available
        country_code:
          nullable: true
          type: string
          description: Country code of the contact
        last_activity_at:
          nullable: true
          type: string
          description: Last activity timestamp of the contact in ISO 8601 format
        created_at:
          nullable: true
          type: string
          description: Created timestamp of the contact in ISO 8601 format
        updated_at:
          nullable: true
          type: string
          description: Updated timestamp of the contact in ISO 8601 format
        last_name:
          nullable: true
          type: string
          description: Last name of the contact
        middle_name:
          nullable: true
          type: string
          description: Middle name of the contact
        location:
          nullable: true
          type: string
          description: Location of the contact
        account_id:
          type: integer
          description: Account id of the contact
        company_id:
          nullable: true
          type: integer
          description: Company id of the contact
        label_list:
          type: array
          description: Labels applied to the contact
          items:
            type: string
    bad_request_error:
      title: data
      type: object
      properties:
        description:
          type: string
        errors:
          type: array
          items:
            $ref: '#/components/schemas/request_error'
    request_error:
      type: object
      properties:
        field:
          type: string
        message:
          type: string
        code:
          type: string
    public_message_attachment:
      type: object
      additionalProperties: true
      description: Attachment payload. Available fields vary by attachment file_type.
      properties:
        id:
          type: integer
          description: Id of the attachment
        message_id:
          type: integer
          description: Id of the parent message
        file_type:
          type: string
          enum:
          - image
          - audio
          - video
          - file
          - location
          - fallback
          - share
          - story_mention
          - contact
          - ig_reel
          - ig_post
          - ig_story
          - embed
          description: Type of the attached file
        account_id:
          type: integer
          description: Id of the account
        extension:
          nullable: true
          type: string
          description: File extension
        data_url:
          nullable: true
          type: string
          description: URL of the file. Can be null when an attachment variant has no external URL.
        thumb_url:
          type: string
          description: URL of the file thumbnail
        file_size:
          type: integer
          description: File size in bytes
        width:
          nullable: true
          type: integer
          description: Width of the attachment when available
        height:
          nullable: true
          type: integer
          description: Height of the attachment when available
        coordinates_lat:
          type: number
          description: Latitude for location attachments
        coordinates_long:
          type: number
          description: Longitude for location attachments
        fallback_title:
          nullable: true
          type: string
          description: Fallback title for location, fallback, and contact attachments when available
        meta:
          type: object
          description: Metadata for contact attachments
        transcribed_text:
          type: string
          description: Transcribed text for audio attachments
    public_conversation_create_payload:
      type: object
      properties:
        custom_attributes:
          type: object
          description: Custom attributes of the conversation
          example: {}
    public_conversation:
      type: object
      properties:
        id:
          type: integer
          description: Id of the conversation
        uuid:
          type: string
          description: UUID of the conversation
        inbox_id:
          type: integer
          description: The inbox id of the conversation
        contact_last_seen_at:
          type: integer
          description: Timestamp of when the contact last seen the conversation (Unix timestamp)
        status:
          type: string
          enum:
          - open
          - resolved
          - pending
          - snoozed
          description: The status of the conversation
        agent_last_seen_at:
          type: integer
          description: Timestamp of when the agent last seen the conversation (Unix timestamp)
        messages:
          type: array
          items:
            $ref: '#/components/schemas/public_message'
          description: Messages in the conversation
        contact:
          $ref: '#/components/schemas/public_contact_record'
    public_message:
      type: object
      properties:
        id:
          type: integer
          description: Id of the message
        content:
          nullable: true
          type: string
          description: Text content of the message. Can be null for attachment-only messages.
        message_type:
          type: integer
          description: 'Denotes the message type. Possible values: 0 (incoming), 1 (outgoing), 2 (activity), 3 (template)'
        content_type:
          type: string
          description: Content type of the message
        content_attributes:
          type: object
          description: Additional content attributes of the message
        created_at:
          type: integer
          description: Created at Unix timestamp of the message
        conversation_id:
          type: integer
          description: Display Id of the conversation the message belongs to
        attachments:
          type: array
          description: Attachments if any
          items:
            $ref: '#/components/schemas/public_message_attachment'
        sender:
          $ref: '#/components/schemas/public_message_sender'
    public_message_sender:
      type: object
      additionalProperties: true
      description: Polymorphic sender payload returned by push_event_data. Available fields vary by sender type.
      properties:
        id:
          type: integer
          description: Id of the sender
        name:
          nullable: true
          type: string
          description: Name of the sender when available
        avatar_url:
          type: string
          description: Avatar URL of the sender. Present for senders of type user, agent_bot, and captain_assistant. Not present for contact senders (use thumbnail instead).
        thumbnail:
          type: string
          description: Avatar/thumbnail URL of the sender. Contact senders use this field; user senders may also include it.
        type:
          type: string
          enum:
          - contact
          - user
          - agent_bot
          - captain_assistant
          description: Type of the sender
        available_name:
          nullable: true
          type: string
          description: Display name for user senders
        availability_status:
          nullable: true
          type: string
          description: Availability status for user senders
        email:
          nullable: true
          type: string
          description: Email of the sender when the sender is a contact
        phone_number:
          nullable: true
          type: string
          description: Phone number of the sender when the sender is a contact
        identifier:
          nullable: true
          type: string
          description: Identifier of the sender when the sender is a contact
        blocked:
          type: boolean
          description: Whether the sender is blocked when the sender is a contact
        additional_attributes:
          nullable: true
          type: object
          description: Additional attributes when the sender is a contact and available
        custom_attributes:
          nullable: true
          type: object
          description: Custom attributes when the sender is a contact and available
        description:
          nullable: true
          type: string
          description: Description when the sender is a captain assistant
        created_at:
          nullable: true
          type: string
          description: Created timestamp in ISO 8601 format when the sender is a captain assistant
  parameters:
    conversation_id:
      in: path
      name: conversation_id
      schema:
        type: integer
      required: true
      description: The numeric ID of the conversation
    public_contact_identifier:
      in: path
      name: contact_identifier
      schema:
        type: string
      required: true
      description: The source id of contact obtained on contact create
    public_inbox_identifier:
      in: path
      name: inbox_identifier
      schema:
        type: string
      required: true
      description: The identifier obtained from API inbox channel
  securitySchemes:
    userApiKey:
      type: apiKey
      in: header
      name: api_access_token
      description: This token can be obtained by visiting the profile page or via rails console. Provides access to  endpoints based on the user permissions levels. This token can be saved by an external system when user is created via API, to perform activities on behalf of the user.
    agentBotApiKey:
      type: apiKey
      in: header
      name: api_access_token
      description: This token should be provided by system admin or obtained via rails console. This token can be used to build bot integrations and can only access limited apis.
    platformAppApiKey:
      type: apiKey
      in: header
      name: api_access_token
      description: This token can be obtained by the system admin after creating a platformApp. This token should be used to provision agent bots, accounts, users and their roles.
x-tagGroups:
- name: Platform
  tags:
  - Accounts
  - Account Users
  - AgentBots
  - Users
- name: Application
  tags:
  - Account AgentBots
  - Account
  - Agents
  - Audit Logs
  - Canned Responses
  - Contacts
  - Contact Labels
  - Conversation Assignments
  - Conversation Labels
  - Conversations
  - Custom Attributes
  - Custom Filters
  - Inboxes
  - Integrations
  - Labels
  - Messages
  - Profile
  - Reports
  - Teams
  - Webhooks
  - Automation Rule
  - Help Center
- name: Client
  tags:
  - Contacts API
  - Conversations API
  - Messages API
- name: Others
  tags:
  - CSAT Survey Page