Chatwoot Application Messages API

Create, list, and delete messages within a conversation, including outgoing agent replies, private notes, and attachments.

OpenAPI Specification

chatwoot-com-openapi.yml Raw ↑
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