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

# Send a list message (beta)

> **Beta.** Send a message with a button (`buttonText`) that opens a single-select list. Rows are grouped into titled sections. The response contains the message ID.

Picking a row produces a `message` event of type `list_reply` with the row's `id`, `title` and `description`.

A list has at most 10 sections and at most 10 rows in total across all sections. Row ids must be unique across the whole list. Header and footer are text only. Set `aiLabel` to show WhatsApp's "AI" badge on the message; it applies to 1:1 chats only and is ignored in groups.

Rendering: currently renders on phones only. WhatsApp Web shows "open your phone to view this message" instead; this is a temporary limitation.

Interactive messages rely on WhatsApp behaviour that is not an official contract and may change without notice. WhatsApp accepts the message even if a client does not render it, so a `201` response does not guarantee the list is displayed.

Limits mirror the WhatsApp Cloud API: `text` up to 1024 characters, `header` and `footer` up to 60, `buttonText` up to 20, section `title` up to 24, row `title` up to 24, row `description` up to 72, row `id` up to 200.




## OpenAPI

````yaml /openapi/wsapi-api.yaml post /messages/list
openapi: 3.0.3
info:
  title: WSAPI - WhatsApp API
  description: >-
    RESTful HTTP API for WhatsApp via whatsmeow. Supports multi-instance
    connections, connections, webhook event delivery, and HMAC-SHA256 signing.
    Includes self-service instance management endpoints served by the API
    Gateway.
  version: 2.0.0
servers:
  - url: https://api.wsapi.chat
    description: WSAPI API
security:
  - ApiKeyAuth: []
tags:
  - name: Account
    description: >-
      Customer account management — instances, subscriptions, and default
      settings (CustomerApiKey auth)
  - name: Session
    description: WhatsApp session management (login, logout, status)
  - name: Messages
    description: Send and manage WhatsApp messages
  - name: Groups
    description: Group management
  - name: Communities
    description: Community management
  - name: Contacts
    description: Contact lookup and management
  - name: Users
    description: Own account management, user lookup, and profile information
  - name: Media
    description: Media download
  - name: Chats
    description: Chat listing, info, settings, and management
  - name: Calls
    description: Call management
  - name: Newsletters
    description: Newsletter/channel management
  - name: Status
    description: Status/stories posting
paths:
  /messages/list:
    post:
      tags:
        - Messages
      summary: Send a list message (beta)
      description: >
        **Beta.** Send a message with a button (`buttonText`) that opens a
        single-select list. Rows are grouped into titled sections. The response
        contains the message ID.


        Picking a row produces a `message` event of type `list_reply` with the
        row's `id`, `title` and `description`.


        A list has at most 10 sections and at most 10 rows in total across all
        sections. Row ids must be unique across the whole list. Header and
        footer are text only. Set `aiLabel` to show WhatsApp's "AI" badge on the
        message; it applies to 1:1 chats only and is ignored in groups.


        Rendering: currently renders on phones only. WhatsApp Web shows "open
        your phone to view this message" instead; this is a temporary
        limitation.


        Interactive messages rely on WhatsApp behaviour that is not an official
        contract and may change without notice. WhatsApp accepts the message
        even if a client does not render it, so a `201` response does not
        guarantee the list is displayed.


        Limits mirror the WhatsApp Cloud API: `text` up to 1024 characters,
        `header` and `footer` up to 60, `buttonText` up to 20, section `title`
        up to 24, row `title` up to 24, row `description` up to 72, row `id` up
        to 200.
      operationId: sendList
      parameters:
        - $ref: '#/components/parameters/XInstanceId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SendListRequest'
            examples:
              list:
                summary: List with two sections
                value:
                  to: 1234567890@s.whatsapp.net
                  header: Book a table
                  text: Pick a time slot for your reservation.
                  footer: Example Bistro
                  buttonText: See times
                  sections:
                    - title: Lunch
                      rows:
                        - id: slot-1200
                          title: '12:00'
                          description: Terrace available
                        - id: slot-1330
                          title: '13:30'
                    - title: Dinner
                      rows:
                        - id: slot-1900
                          title: '19:00'
                        - id: slot-2030
                          title: '20:30'
                          description: Indoor seating only
      responses:
        '201':
          $ref: '#/components/responses/Created'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '409':
          $ref: '#/components/responses/DeviceNotPaired'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  parameters:
    XInstanceId:
      name: X-Instance-Id
      in: header
      required: true
      description: The ID of the WhatsApp instance to use
      schema:
        type: string
        default: '{{instanceId}}'
  schemas:
    SendListRequest:
      type: object
      required:
        - to
        - text
        - buttonText
        - sections
      properties:
        to:
          type: string
        text:
          type: string
          maxLength: 1024
          description: Message body
        header:
          type: string
          maxLength: 60
          description: Optional header text shown above the body
        footer:
          type: string
          maxLength: 60
          description: Optional footer text shown below the body
        aiLabel:
          type: boolean
          default: false
          description: >-
            Show WhatsApp's "AI" badge on the message. 1:1 chats only; ignored
            in groups.
        buttonText:
          type: string
          maxLength: 20
          description: Label of the button that opens the list
        sections:
          type: array
          minItems: 1
          maxItems: 10
          description: >-
            Sections of the list. At most 10 rows in total across all sections,
            with row ids unique across the whole list.
          items:
            $ref: '#/components/schemas/ListSection'
    ListSection:
      type: object
      required:
        - rows
      properties:
        title:
          type: string
          maxLength: 24
          description: >-
            Section title. Required on every section when the list has more than
            one.
        rows:
          type: array
          minItems: 1
          maxItems: 10
          items:
            $ref: '#/components/schemas/ListRow'
    Error:
      type: object
      description: Standard error response returned by all API endpoints
      required:
        - detail
        - status
      properties:
        detail:
          type: string
          description: Human-readable error message
          example: invalid request body
        status:
          type: integer
          description: HTTP status code
          example: 400
    ListRow:
      type: object
      required:
        - id
        - title
      properties:
        id:
          type: string
          maxLength: 200
          description: >-
            Row id, returned as `listReply.id` when picked. Unique across the
            whole list.
        title:
          type: string
          maxLength: 24
          description: Row title
        description:
          type: string
          maxLength: 72
          description: Optional row description
  responses:
    Created:
      description: Resource created
      content:
        application/json:
          schema:
            type: object
            properties:
              id:
                type: string
                description: ID of the created resource
          example:
            id: '01234567890123456'
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: 400
            detail: invalid request body
    Unauthorized:
      description: Authentication failed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: 401
            detail: unauthorized
    DeviceNotPaired:
      description: Device is not paired. Complete the pairing process first.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: 409
            detail: device not paired
    ServiceUnavailable:
      description: Instance not available (not connected or service is nil)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            status: 503
            detail: instance not available
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
      description: >-
        Instance or customer-level API key. Either the instance's own API key or
        the customer's API key is accepted. Must be paired with the
        X-Instance-Id header to identify the target instance.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.