Chatwoot Contacts API API

Public contact APIs

Operations 3

POST /public/api/v1/inboxes/{inbox_identifier}/contacts Create a contact #
GET /public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier} Get a contact #
PATCH /public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier} Update a contact #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/chatwoot-contacts-api-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

chatwoot-contacts-api-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Chatwoot Contacts 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: Contacts API
  description: Public contact APIs
paths:
  /public/api/v1/inboxes/{inbox_identifier}/contacts:
    parameters:
    - $ref: '#/components/parameters/public_inbox_identifier'
    post:
      tags:
      - Contacts API
      operationId: create-a-contact
      summary: Create a contact
      description: Create a contact
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/public_contact_create_update_payload'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/public_contact'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
  /public/api/v1/inboxes/{inbox_identifier}/contacts/{contact_identifier}:
    parameters:
    - $ref: '#/components/parameters/public_inbox_identifier'
    - $ref: '#/components/parameters/public_contact_identifier'
    get:
      tags:
      - Contacts API
      operationId: get-details-of-a-contact
      summary: Get a contact
      description: Get the details of a contact
      security: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/public_contact'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
        '404':
          description: The given contact does not exist
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
    patch:
      tags:
      - Contacts API
      operationId: update-a-contact
      summary: Update a contact
      description: Update a contact's attributes
      security: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/public_contact_create_update_payload'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/public_contact_record'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bad_request_error'
components:
  schemas:
    public_contact:
      type: object
      properties:
        id:
          type: integer
          description: Id of the contact
        source_id:
          type: string
          description: The session identifier of the contact
        name:
          type:
          - string
          - 'null'
          description: Name of the contact when available
        email:
          type:
          - string
          - 'null'
          description: Email of the contact
        phone_number:
          type:
          - string
          - 'null'
          description: Phone number of the contact
        pubsub_token:
          type: string
          description: The token to be used to connect to chatwoot websocket
    request_error:
      type: object
      properties:
        field:
          type: string
        message:
          type: string
        code:
          type: string
    public_contact_create_update_payload:
      type: object
      properties:
        identifier:
          type: string
          description: External identifier of the contact
          example: '1234567890'
        identifier_hash:
          type: string
          description: Identifier hash prepared for HMAC authentication
          example: e93275d4eba0e5679ad55f5360af00444e2a888df9b0afa3e8b691c3173725f9
        email:
          type: string
          description: Email of the contact
          example: alice@acme.inc
        name:
          type: string
          description: Name of the contact
          example: Alice
        phone_number:
          type: string
          description: Phone number of the contact
          example: '+123456789'
        avatar:
          type: string
          format: binary
          description: Send the form data with the avatar image binary or use the avatar_url
        custom_attributes:
          type: object
          description: Custom attributes of the customer
          example: {}
    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:
          type:
          - string
          - 'null'
          description: Name of the contact when available
        email:
          type:
          - string
          - 'null'
          description: Email of the contact
        phone_number:
          type:
          - string
          - 'null'
          description: Phone number of the contact
        identifier:
          type:
          - string
          - 'null'
          description: Identifier of the contact
        blocked:
          type: boolean
          description: Whether the contact is blocked
        additional_attributes:
          type:
          - object
          - 'null'
          description: Additional attributes of the contact when present
        custom_attributes:
          type:
          - object
          - 'null'
          description: Custom attributes of the contact when present
        contact_type:
          type:
          - string
          - 'null'
          description: Contact type of the contact when available
        country_code:
          type:
          - string
          - 'null'
          description: Country code of the contact
        last_activity_at:
          type:
          - string
          - 'null'
          description: Last activity timestamp of the contact in ISO 8601 format
        created_at:
          type:
          - string
          - 'null'
          description: Created timestamp of the contact in ISO 8601 format
        updated_at:
          type:
          - string
          - 'null'
          description: Updated timestamp of the contact in ISO 8601 format
        last_name:
          type:
          - string
          - 'null'
          description: Last name of the contact
        middle_name:
          type:
          - string
          - 'null'
          description: Middle name of the contact
        location:
          type:
          - string
          - 'null'
          description: Location of the contact
        account_id:
          type: integer
          description: Account id of the contact
        company_id:
          type:
          - integer
          - 'null'
          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'
  parameters:
    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