> ## Documentation Index
> Fetch the complete documentation index at: https://developers.chatwoot.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create New Message

> Create a new message in the conversation.

## WhatsApp Template Messages

For WhatsApp channels, you can send structured template messages using the `template_params` field. 
Templates must be pre-approved in WhatsApp Business Manager.

### Example Templates

**Text with Image Header:**
```json
{
  "content": "Hi your order 121212 is confirmed. Please wait for further updates",
  "template_params": {
    "name": "order_confirmation",
    "category": "MARKETING",
    "language": "en",
    "processed_params": {
      "body": {
        "1": "121212"
      },
      "header": {
        "media_url": "https://picsum.photos/200/300",
        "media_type": "image"
      }
    }
  }
}
```

**Text with Copy Code Button:**
```json
{
  "content": "Special offer! Get 30% off your next purchase. Use the code below",
  "template_params": {
    "name": "discount_coupon",
    "category": "MARKETING",
    "language": "en",
    "processed_params": {
      "body": {
        "discount_percentage": "30"
      },
      "buttons": [{
        "type": "copy_code",
        "parameter": "SAVE20"
      }]
    }
  }
}
```




## OpenAPI

````yaml https://raw.githubusercontent.com/chatwoot/chatwoot/develop/swagger/tag_groups/application_swagger.json post /api/v1/accounts/{account_id}/conversations/{conversation_id}/messages
openapi: 3.1.0
info:
  title: Chatwoot
  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/
security: []
tags:
  - name: Account AgentBots
    description: Account-specific Agent Bots
  - name: Agents
    description: Agent management APIs
  - name: Canned Responses
    description: Pre-defined responses for common queries
  - name: Contacts
    description: Contact management APIs
  - name: Contact Labels
    description: Manage contact labels
  - name: Conversation Assignments
    description: Manage conversation assignments
  - name: Conversation Labels
    description: Manage conversation labels
  - name: Conversations
    description: Conversation management APIs
  - name: Custom Attributes
    description: Custom fields for contacts and conversations
  - name: Custom Filters
    description: Saved filters for conversations
  - name: Inboxes
    description: Communication channels setup
  - name: Integrations
    description: Third-party integrations
  - name: Labels
    description: Account label management APIs
  - name: Messages
    description: Message management APIs
  - name: Profile
    description: User profile APIs
  - name: Reports
    description: Analytics and reporting APIs
  - name: Teams
    description: Team management APIs
  - name: Webhooks
    description: Event notification webhooks
  - name: Automation Rule
    description: Workflow automation rules
  - name: Help Center
    description: Knowledge base management
paths:
  /api/v1/accounts/{account_id}/conversations/{conversation_id}/messages:
    parameters:
      - $ref: '#/components/parameters/account_id'
      - $ref: '#/components/parameters/conversation_id'
    post:
      tags:
        - Messages
      summary: Create New Message
      description: >
        Create a new message in the conversation.


        ## WhatsApp Template Messages


        For WhatsApp channels, you can send structured template messages using
        the `template_params` field. 

        Templates must be pre-approved in WhatsApp Business Manager.


        ### Example Templates


        **Text with Image Header:**

        ```json

        {
          "content": "Hi your order 121212 is confirmed. Please wait for further updates",
          "template_params": {
            "name": "order_confirmation",
            "category": "MARKETING",
            "language": "en",
            "processed_params": {
              "body": {
                "1": "121212"
              },
              "header": {
                "media_url": "https://picsum.photos/200/300",
                "media_type": "image"
              }
            }
          }
        }

        ```


        **Text with Copy Code Button:**

        ```json

        {
          "content": "Special offer! Get 30% off your next purchase. Use the code below",
          "template_params": {
            "name": "discount_coupon",
            "category": "MARKETING",
            "language": "en",
            "processed_params": {
              "body": {
                "discount_percentage": "30"
              },
              "buttons": [{
                "type": "copy_code",
                "parameter": "SAVE20"
              }]
            }
          }
        }

        ```
      operationId: create-a-new-message-in-a-conversation
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/conversation_message_create_payload'
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/generic_id'
                  - $ref: '#/components/schemas/message'
        '403':
          description: Access denied
          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'
      security:
        - userApiKey: []
        - agentBotApiKey: []
components:
  parameters:
    account_id:
      in: path
      name: account_id
      schema:
        type: integer
      required: true
      description: The numeric ID of the account
    conversation_id:
      in: path
      name: conversation_id
      schema:
        type: integer
      required: true
      description: The numeric ID of the conversation
  schemas:
    conversation_message_create_payload:
      type: object
      required:
        - content
      properties:
        content:
          type: string
          description: The content of the message
          example: Hello, how can I help you?
        message_type:
          type: string
          enum:
            - outgoing
            - incoming
          description: The type of the message
          example: outgoing
        private:
          type: boolean
          description: Flag to identify if it is a private note
          example: false
        content_type:
          type: string
          enum:
            - text
            - input_email
            - cards
            - input_select
            - form
            - article
          description: Content type of the message
          example: text
        content_attributes:
          type: object
          description: Attributes based on the content type
          example: {}
        campaign_id:
          type: integer
          description: The campaign id to which the message belongs
          example: 1
        template_params:
          type: object
          description: WhatsApp template parameters for sending structured messages
          required:
            - name
            - category
            - language
            - processed_params
          properties:
            name:
              type: string
              description: >-
                Name of the WhatsApp template (must be approved in WhatsApp
                Business Manager)
              example: purchase_receipt
            category:
              type: string
              enum:
                - UTILITY
                - MARKETING
                - SHIPPING_UPDATE
                - TICKET_UPDATE
                - ISSUE_RESOLUTION
              description: Category of the template
              example: UTILITY
            language:
              type: string
              description: Language code of the template (BCP 47 format)
              example: en_US
            processed_params:
              type: object
              description: Processed template parameters organized by component type
              properties:
                body:
                  type: object
                  description: Body component parameters with variable placeholders
                  additionalProperties:
                    type: string
                  example:
                    '1': Visa
                    '2': Nike
                    '3': Bill
                header:
                  type: object
                  description: Header component parameters for media templates
                  properties:
                    media_url:
                      type: string
                      format: uri
                      description: >-
                        Publicly accessible URL for IMAGE, VIDEO, or DOCUMENT
                        headers
                      example: >-
                        https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf
                    media_type:
                      type: string
                      enum:
                        - image
                        - video
                        - document
                      description: Type of media for the header
                      example: document
                buttons:
                  type: array
                  description: Button component parameters for interactive templates
                  items:
                    type: object
                    properties:
                      type:
                        type: string
                        enum:
                          - url
                          - copy_code
                        description: Type of button parameter
                      parameter:
                        type: string
                        description: Dynamic parameter value for the button
                        example: SSFSDFSD
    generic_id:
      type: object
      properties:
        id:
          type: number
    message:
      type: object
      properties:
        id:
          type: number
          description: The ID of the message
        content:
          type: string
          description: The text content of the message
        account_id:
          type: number
          description: The ID of the account
        inbox_id:
          type: number
          description: The ID of the inbox
        conversation_id:
          type: number
          description: The ID of the conversation
        message_type:
          type: integer
          enum:
            - 0
            - 1
            - 2
            - 3
          description: The type of the message
        created_at:
          type: integer
          description: The time at which message was created
        updated_at:
          type:
            - integer
            - string
          description: The time at which message was updated
        private:
          type: boolean
          description: The flags which shows whether the message is private or not
        status:
          type:
            - string
            - 'null'
          enum:
            - sent
            - delivered
            - read
            - failed
            - null
          description: The status of the message
        source_id:
          type:
            - string
            - 'null'
          description: The source ID of the message
        content_type:
          type:
            - string
            - 'null'
          enum:
            - text
            - input_text
            - input_textarea
            - input_email
            - input_select
            - cards
            - form
            - article
            - incoming_email
            - input_csat
            - integrations
            - sticker
            - voice_call
            - null
          description: The type of the template message
        content_attributes:
          type: object
          description: The content attributes for each content_type
        sender_type:
          type:
            - string
            - 'null'
          enum:
            - Contact
            - User
            - AgentBot
            - Captain::Assistant
            - null
          description: The type of the sender
        sender_id:
          type:
            - number
            - 'null'
          description: The ID of the sender
        external_source_ids:
          type: object
          description: The external source IDs of the message
        additional_attributes:
          type: object
          description: The additional attributes of the message
        processed_message_content:
          type:
            - string
            - 'null'
          description: The processed message content
        sentiment:
          type:
            - object
            - 'null'
          description: The sentiment of the message
        conversation:
          type:
            - object
            - 'null'
          description: The conversation object
        attachment:
          type:
            - object
            - 'null'
          description: The file object attached to the image
        sender:
          type: object
          description: User/Agent/AgentBot object
    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
  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.

````