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

# Create Quick Reply

> Create a new quick reply. A quick reply holds one or more prepared messages (`send.contents`, same structure as **Send a Message to Chat** bodies) and a `send.target` list defining which channels - or which single chat - it is available for. The contents are validated against the limits of every targeted channel.

**Required token scopes:** `Manage quick replies`

### AI quick replies

Texter's inbox shows a special **AI suggestion** UI for quick replies whose `metadata.client.aiQuickReply` is `true`: they appear as suggested replies on the targeted chat, sorted on top, with an "unseen suggestion" indicator for agents. To create one (the same flow Texter's own AI assistant uses):

1. **Create** a quick reply targeted at one specific chat - set `send.target[0].id` to the **chat ID** (the chat's `_id`, from [Search Chats](/api-reference/chats/search-chats)), and optionally `display.note` to something like `"AI suggestion"`.
2. **Mark it** with the *Update Existing Quick Reply* endpoint: `[{ "updateClientMetadata": { "aiQuickReply": true } }]`.
3. When the suggestion becomes stale, **delete it** (or replace its contents with `updateSendContents`).

See the "AI suggested reply (step 1 of 2)" request example.


## OpenAPI

````yaml api-reference/openapi.json POST /quick-replies
openapi: 3.1.0
info:
  title: Texter API V2
  version: 2.0.0
  description: >-
    The **Texter API** lets your developers control the Texter platform
    programmatically:


    - Manage and send your WhatsApp template messages

    - Retrieve chats by ID or by various filters

    - Assign and resolve conversations

    - Send session messages into active chats

    - Manage labels

    - Monitor and resolve channel health issues

    - Subscribe to real-time webhook events

    - Manage quick replies (coming soon)


    For any questions please contact [Texter
    Support](https://wa.me/972586640430).
  contact:
    name: Texter Support
    url: https://wa.me/972586640430
servers:
  - url: https://{projectID}.texterchat.com/server/api/v2
    description: Your Texter environment. Replace projectID with your project subdomain
    variables:
      projectID:
        default: demo
        description: >-
          Your unique project subdomain. If your environment URL is
          https://demo.texterchat.com, your projectID is "demo"
security:
  - bearerAuth: []
tags:
  - name: Manage Templates
    description: >-
      Create, localize, submit, update, delete and send WhatsApp template
      messages, and retrieve approved templates for your connected WhatsApp
      accounts.


      **Suggested token for this group** - create one API token with the scopes:
      *Send template messages*, *View template messages*, *Manage WhatsApp
      templates*, *Manage all chats*, *List all chats* (the last two also cover
      the Templates Subscriptions group). Each endpoint below also lists the
      exact scopes it needs.
  - name: Templates Subscriptions
    description: >-
      Manage recipient subscriptions for WhatsApp template messages -
      unsubscribe or resubscribe recipients, and list unsubscribed users across
      all channels or for a specific account.


      **Suggested token for this group** - scopes: *Manage all chats*, *List all
      chats*. Each endpoint below also lists the exact scopes it needs.
  - name: Messages
    description: >-
      Retrieve message history from a chat, or send new session messages - text,
      media, buttons, lists, contact cards and locations - within the active
      WhatsApp 24-hour session window.


      **Suggested token for this group** - scopes: *Send session message*, *View
      all chats*. Each endpoint below also lists the exact scopes it needs.
  - name: Chats
    description: >-
      Fetch chat details, search conversations, update chat properties, assign
      or resolve chats, and manage their CRM metadata.


      **Suggested token for this group** - scopes: *Manage all chats*, *List all
      chats*, *Send session message*. Each endpoint below also lists the exact
      scopes it needs.
  - name: Labels
    description: >-
      Create and edit labels, assign or remove them from chats, retrieve label
      data, or delete labels from your inbox.


      **Suggested token for this group** - scopes: *Manage labels*, *Manage all
      chats* (needed for managing labels on chats). Each endpoint below also
      lists the exact scopes it needs.
  - name: Channels
    description: >-
      Monitor and maintain the health of connected messaging channels - retrieve
      active channel health problems, filter them by severity or account, and
      mark issues as resolved.


      **Suggested token for this group** - scopes: *Manage channels*. Each
      endpoint below also lists the exact scopes it needs.
  - name: Quick Replies
    description: >-
      Manage quick replies - prepared messages agents can send into matching
      chats with one click. Quick replies marked with `aiQuickReply` client
      metadata appear as **AI suggestions** in the Texter inbox (see Create
      Quick Reply for the full flow).


      **Suggested token for this group** - scopes: *View quick replies*, *Manage
      quick replies*. Each endpoint below also lists the exact scopes it needs.
  - name: Files
    description: >-
      Generate public access links to media files stored in Texter.


      **Suggested token for this group** - scopes: *View all files*, *View all
      chats* (both required). Each endpoint below also lists the exact scopes it
      needs.
  - name: Subscribe to Events
    description: >-
      Register webhooks for events occurring in your Texter environment. Under
      the hood this uses **Scenarios** - a workflow automation feature within
      Texter. To make integration easy, pre-defined templates are provided:
      import a scenario JSON, plug in your webhook URL and user UID, and the
      subscription is active.


      See the **Webhook Events** pages for the payload your URL receives for
      each event.


      **Suggested token for this group** - scopes: *View scenarios*, *Create
      scenarios*, *Delete scenarios*, *Activate/inactivate scenarios*, *Manage
      scenarios on behalf of user*. Each endpoint below also lists the exact
      scopes it needs.


      If the provided templates don't satisfy your needs, contact [Texter
      Support](https://wa.me/972586640430) and we'll gladly help modify any
      triggers, conditions or actions for your webhook.
  - name: Scenarios (Advanced)
    description: >-
      Full programmatic control over scenarios for advanced automations: create
      scenarios from scratch, copy them, edit drafts, publish revisions, inspect
      execution runs, and discover the available building blocks (events,
      conditions, loaders, actions). For plain webhook subscriptions, the
      **Subscribe to Events** group with its ready-made templates is the simpler
      path.


      **Suggested token for this group** - scopes: *View scenarios*, *Create
      scenarios*, *Edit scenarios*, *Delete scenarios*, *Activate/inactivate
      scenarios*, *Manage scenarios on behalf of user*, *View scenarios runs*.
      Each endpoint below also lists the exact scopes it needs.
paths:
  /quick-replies:
    post:
      tags:
        - Quick Replies
      summary: Create Quick Reply
      description: >-
        Create a new quick reply. A quick reply holds one or more prepared
        messages (`send.contents`, same structure as **Send a Message to Chat**
        bodies) and a `send.target` list defining which channels - or which
        single chat - it is available for. The contents are validated against
        the limits of every targeted channel.


        **Required token scopes:** `Manage quick replies`



        ### AI quick replies


        Texter's inbox shows a special **AI suggestion** UI for quick replies
        whose `metadata.client.aiQuickReply` is `true`: they appear as suggested
        replies on the targeted chat, sorted on top, with an "unseen suggestion"
        indicator for agents. To create one (the same flow Texter's own AI
        assistant uses):


        1. **Create** a quick reply targeted at one specific chat - set
        `send.target[0].id` to the **chat ID** (the chat's `_id`, from [Search
        Chats](/api-reference/chats/search-chats)), and optionally
        `display.note` to something like `"AI suggestion"`.

        2. **Mark it** with the *Update Existing Quick Reply* endpoint: `[{
        "updateClientMetadata": { "aiQuickReply": true } }]`.

        3. When the suggestion becomes stale, **delete it** (or replace its
        contents with `updateSendContents`).


        See the "AI suggested reply (step 1 of 2)" request example.
      operationId: create-quick-reply
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                send:
                  type: object
                  properties:
                    contents:
                      type: array
                      minItems: 1
                      description: >-
                        The message(s) to send - same structure as Send a
                        Message to Chat bodies (`type:
                        text/media/buttons/list/contacts/location`)
                      items:
                        type: object
                        additionalProperties: true
                    betweenMessagesDelay:
                      type: integer
                      minimum: 0
                      description: >-
                        Optional delay in milliseconds between messages, when
                        the quick reply has more than one
                    target:
                      type: array
                      description: >-
                        Channels or chats for which this quick reply is
                        available. Each entry needs the channel `name` and
                        `accountId`; add `id` (the **chat ID** - the chat's
                        `_id` from Search Chats) to restrict it to a single chat
                      items:
                        type: object
                        properties:
                          name:
                            $ref: '#/components/schemas/ChannelName'
                          accountId:
                            type: string
                            description: >-
                              Channel account ID. For WhatsApp, the business
                              phone number
                          id:
                            type: string
                            description: >-
                              Optional - restrict to a single chat (the chat's
                              `_id`)
                        required:
                          - name
                          - accountId
                  required:
                    - contents
                    - target
                display:
                  type: object
                  description: How and where the quick reply is displayed in Texter
                  properties:
                    position:
                      type: string
                      enum:
                        - top
                        - main
                      description: Where to display this quick reply
                    title:
                      type: string
                    note:
                      type: string
                      description: >-
                        Optional note displayed beside the quick reply, e.g. "AI
                        suggestion"
                    departments:
                      type: array
                      items:
                        type: string
                      description: Restrict to specified department IDs
                    users:
                      type: array
                      items:
                        type: string
                      description: Restrict to specified user UIDs
              required:
                - send
            examples:
              Simple text quick reply:
                value:
                  send:
                    contents:
                      - type: text
                        text: Thanks for reaching out! An agent will reply shortly.
                    target:
                      - name: whatsapp
                        accountId: '972586640430'
                  display:
                    position: top
                    title: Greeting
              Restricted visibility:
                value:
                  send:
                    contents:
                      - type: text
                        text: >-
                          Our enterprise pricing deck:
                          https://texterchat.com/enterprise
                    target:
                      - name: whatsapp
                        accountId: '972586640430'
                  display:
                    position: main
                    title: Enterprise pricing
                    departments:
                      - sales
                    users:
                      - 4d170fc7-5cd6-4496-98e4-f4f03a11456e
              Multi-message with delay:
                value:
                  send:
                    contents:
                      - type: text
                        text: 'Here is our price list:'
                      - type: media
                        media:
                          - mediaType: document
                            url: https://example.com/prices.pdf
                            filename: Prices 2026
                    betweenMessagesDelay: 1000
                    target:
                      - name: whatsapp
                        accountId: '972586640430'
                  display:
                    position: main
                    title: Price list
                    departments:
                      - sales
              AI suggested reply (step 1 of 2):
                value:
                  send:
                    contents:
                      - type: text
                        text: >-
                          היי! ראינו ששאלת על שעות הפתיחה - אנחנו פתוחים א-ה
                          9:00-18:00. אפשר לעזור בעוד משהו?
                    target:
                      - name: whatsapp
                        accountId: '972586640430'
                        id: 67a87067aeedqdee1271ck4d
                  display:
                    position: main
                    note: AI suggestion
      responses:
        '200':
          description: >-
            The created quick reply. Field-by-field reference: [The Quick Reply
            object](/api-reference/objects/quick-reply)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuickReplyObj'
        '400':
          description: Validation error - e.g. contents violate a targeted channel's limits
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Missing or invalid token, or missing required scope
components:
  schemas:
    ChannelName:
      type: string
      enum:
        - whatsapp
        - messenger
        - instagram
        - website_chat
        - email
        - sms
      description: Messaging channel type
    QuickReplyObj:
      type: object
      description: >-
        A quick reply - one or more prepared messages agents (or the AI
        assistant) can send into matching chats
      properties:
        _id:
          type: string
          description: Unique identifier of the quick reply
        send:
          type: object
          properties:
            contents:
              type: array
              description: >-
                The message(s) this quick reply sends. Same structure as Send a
                Message to Chat bodies (`type: text/media/buttons/list/...`).
                Multiple messages allowed
              items:
                type: object
                additionalProperties: true
            betweenMessagesDelay:
              type: integer
              description: >-
                Optional delay in milliseconds between sending each message when
                the quick reply has more than one
            target:
              type: array
              description: Channels or chats for which this quick reply is available
              items:
                type: object
                properties:
                  name:
                    $ref: '#/components/schemas/ChannelName'
                  accountId:
                    type: string
                    description: Channel account ID
                  id:
                    type: string
                    description: Optional - restrict to a single chat (the chat's `_id`)
                required:
                  - name
                  - accountId
        display:
          type: object
          description: How and where the quick reply is displayed in Texter
          properties:
            position:
              type: string
              enum:
                - top
                - main
              description: Where to display this quick reply
            title:
              type: string
            note:
              type: string
              description: >-
                Optional note displayed beside the quick reply, e.g. "AI
                recommendation"
            departments:
              type: array
              items:
                type: string
              description: Restrict to specified departments
            users:
              type: array
              items:
                type: string
              description: Restrict to specified users (list of UIDs)
        metadata:
          type: object
          properties:
            created:
              type: number
              description: Creation timestamp (epoch ms)
            updated:
              type: number
              description: Latest update timestamp (epoch ms)
            client:
              type: object
              additionalProperties: true
              description: >-
                Free-form data external clients may attach and read (set via the
                `updateClientMetadata` patch operation). Texter itself does not
                interpret it - except the inbox UI, which treats `aiQuickReply:
                true` as an AI suggestion (see Create Quick Reply)
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message
      required:
        - error
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API token generated in Texter: gear icon → Developers → API Tokens. When
        creating a token, assign it the scopes required by the endpoints you
        plan to call - each endpoint lists its required scopes.

````