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

> ## Agent Instructions
> Wabox é uma API não-oficial de WhatsApp (aparelho vinculado). Tudo é snake_case; a base é https://api.wabox.me/instances/{instance_id}/token/{token}.
> Envios respondem { id, message_id, wabox_id, status: "queued" } na hora; o resultado real chega no webhook delivery. Envios não são idempotentes: confira GET /queue antes de repetir.
> Sempre verifique X-Wabox-Signature (HMAC-SHA256 de "<t>.<corpo cru>") nos webhooks e deduplique por event_id.
> Botões, listas, carrossel e catálogo são best effort e não renderizam no WhatsApp Web/Desktop. Não existem: chamadas, listas de transmissão, histórico de mensagens, instância mobile.
> Não invente endpoints ou campos: use o OpenAPI em https://api.wabox.me/openapi.json.

# Enviar lista de opções (menu de seleção única)

> `button_label` (até 20 caracteres) é o texto do botão que abre o menu. As opções vão em `sections[].rows[]` (até 10 seções com `title` opcional, cada uma com até 10 linhas) ou no atalho `options[]` (até 10 linhas em uma única seção sem título) — envie um dos dois. Cada linha tem `id`, `title` (até 24 caracteres) e `description` opcional (até 72). A opção escolhida chega no webhook `list_response` com o `id` da linha.

**Best effort.** Mensagens interativas não são um recurso oficial para contas comuns do WhatsApp: elas são entregues como mensagens "native flow" e a renderização depende do app e da plataforma de quem recebe — celulares (Android/iOS) exibem normalmente, mas o **WhatsApp Web e o WhatsApp Desktop não exibem** botões, lista nem carrossel (mostram o placeholder "mensagem de visualização única" e a pessoa precisa abrir no celular; é o mesmo comportamento de outras APIs não-oficiais e não há contorno conhecido, já que o conteúdo é cifrado igual para todos os dispositivos). Em versões antigas do app a mensagem pode chegar como texto simples. Botões `reply` voltam como webhook `buttons_response`; a opção escolhida em uma lista, como `list_response`.

A mensagem entra na fila e é enviada de forma assíncrona; `message_id` já é o id definitivo no WhatsApp (`id` é um alias dele) e o resultado chega no webhook `delivery`. `delay_message` e `delay_typing` (segundos, 0–15) funcionam como nos demais envios: o primeiro substitui o intervalo aleatório da instância para esta mensagem, o segundo mostra "digitando…" antes de enviar.



## OpenAPI

````yaml /openapi.json post /instances/{instance_id}/token/{token}/send-option-list
openapi: 3.1.0
info:
  title: Wabox API
  description: >-
    API pública do Wabox — WhatsApp via REST + webhooks.


    Base: `{server}/instances/{instance_id}/token/{token}`. Header
    `Client-Token` obrigatório quando ativado em Segurança.


    Tudo em `snake_case`. Datas ISO-8601 (UTC). Erros: `{ "error": { "code":
    "...", "message": "..." } }`.


    Envios respondem `{ id, message_id, wabox_id, status: "queued" }` na hora; o
    resultado chega no webhook `delivery`. `message_id` já é o id definitivo do
    WhatsApp.
  version: '1.0'
  contact: {}
servers:
  - url: https://api.wabox.me
security: []
tags:
  - name: Instance
    description: >-
      Conexão (QR code / código de pareamento), status, webhooks e configurações
      da instância.
    x-group: Instância
  - name: Messages
    description: >-
      Envio de texto, mídia, localização, contatos, reações, enquetes e ações
      sobre mensagens. Tudo passa pela fila; o resultado chega no webhook
      `delivery`.
    x-group: Mensagens
  - name: Interactive
    description: >-
      Botões, listas, carrossel, PIX, eventos de calendário, status (stories) e
      convite de canal. Best effort: renderizam no celular; o WhatsApp
      Web/Desktop não exibe botões, listas nem carrossel.
    x-group: Interativos
  - name: Queue
    description: Mensagens aguardando envio (pacing anti-ban ou instância desconectada).
    x-group: Fila
  - name: Chats
    description: >-
      Lista de conversas, ações (arquivar, silenciar, fixar, ler) e mensagens
      temporárias.
    x-group: Chats
  - name: Contacts
    description: Contatos, foto de perfil, verificação de números e bloqueio.
    x-group: Contatos
  - name: Profile
    description: Nome, recado e foto do número conectado.
    x-group: Perfil
  - name: Groups
    description: >-
      Criar, listar, administrar participantes, links de convite e
      configurações.
    x-group: Grupos
  - name: Communities
    description: Comunidades e vínculo de grupos.
    x-group: Comunidades
  - name: Newsletters
    description: >-
      Canais (newsletters): criar, seguir, ler e reagir a posts. Para publicar,
      use qualquer `send-*` com `phone: <id>@newsletter`.
    x-group: Canais
  - name: Privacy
    description: Configurações de privacidade da conta.
    x-group: Privacidade
  - name: Business
    description: >-
      Perfil comercial, catálogo de produtos, pedidos e envio de
      produto/catálogo/pedido. Best effort: depende do protocolo do WhatsApp
      Web.
    x-group: Business e catálogo
  - name: Labels
    description: Etiquetas (labels) de conversas — só em contas WhatsApp Business.
    x-group: Etiquetas
  - name: Partner
    description: >-
      Para integradores: criar e administrar instâncias do próprio workspace
      Partner com o header `Partner-Token` (base `/partner`, sem
      `instance_id`/`token` na URL). As instâncias criadas aqui são operadas
      pela API pública normal e não têm trial nem `402`.
    x-group: Partner
  - name: Webhooks
    description: Eventos entregues por `POST` na URL configurada em cada instância.
    x-group: Webhooks
paths:
  /instances/{instance_id}/token/{token}/send-option-list:
    post:
      tags:
        - Interactive
      summary: Enviar lista de opções (menu de seleção única)
      description: >-
        `button_label` (até 20 caracteres) é o texto do botão que abre o menu.
        As opções vão em `sections[].rows[]` (até 10 seções com `title`
        opcional, cada uma com até 10 linhas) ou no atalho `options[]` (até 10
        linhas em uma única seção sem título) — envie um dos dois. Cada linha
        tem `id`, `title` (até 24 caracteres) e `description` opcional (até 72).
        A opção escolhida chega no webhook `list_response` com o `id` da linha.


        **Best effort.** Mensagens interativas não são um recurso oficial para
        contas comuns do WhatsApp: elas são entregues como mensagens "native
        flow" e a renderização depende do app e da plataforma de quem recebe —
        celulares (Android/iOS) exibem normalmente, mas o **WhatsApp Web e o
        WhatsApp Desktop não exibem** botões, lista nem carrossel (mostram o
        placeholder "mensagem de visualização única" e a pessoa precisa abrir no
        celular; é o mesmo comportamento de outras APIs não-oficiais e não há
        contorno conhecido, já que o conteúdo é cifrado igual para todos os
        dispositivos). Em versões antigas do app a mensagem pode chegar como
        texto simples. Botões `reply` voltam como webhook `buttons_response`; a
        opção escolhida em uma lista, como `list_response`.


        A mensagem entra na fila e é enviada de forma assíncrona; `message_id`
        já é o id definitivo no WhatsApp (`id` é um alias dele) e o resultado
        chega no webhook `delivery`. `delay_message` e `delay_typing` (segundos,
        0–15) funcionam como nos demais envios: o primeiro substitui o intervalo
        aleatório da instância para esta mensagem, o segundo mostra "digitando…"
        antes de enviar.
      operationId: interactive.sendOptionList
      parameters:
        - name: instance_id
          required: true
          in: path
          description: Id da instância (dashboard › instância › Credenciais).
          schema:
            type: string
          example: 8f2a3c1e-6b7d-4e5f-9a0b-1c2d3e4f5a6b
        - name: token
          required: true
          in: path
          description: Token da instância. Trate como senha.
          schema:
            type: string
          example: 3A1F5C7E9B2D4F6A8C0E1B3D5F7A9C2E
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                phone:
                  type: string
                  minLength: 1
                  pattern: >-
                    ^(\d{5,20}|\d+@lid|\d+(-\d+)?-group|\d+@g\.us|\d+@newsletter|\d+@broadcast|status@broadcast)$
                  description: >-
                    Chat de destino: número só dígitos com DDI e DDD
                    (`5511988887777`), grupo (`<id>-group`), canal
                    (`<id>@newsletter`), LID (`<id>@lid`) ou `status@broadcast`.
                message:
                  type: string
                  minLength: 1
                  maxLength: 4096
                title:
                  type: string
                  maxLength: 256
                footer:
                  type: string
                  maxLength: 256
                reply_to_message_id:
                  description: Id da mensagem a citar (responder), no mesmo chat.
                  type: string
                  minLength: 1
                mentioned:
                  description: >-
                    Números a mencionar; cada um precisa aparecer no texto como
                    `@<número>`.
                  maxItems: 500
                  type: array
                  items:
                    type: string
                    minLength: 1
                    pattern: >-
                      ^(\d{5,20}|\d+@lid|\d+(-\d+)?-group|\d+@g\.us|\d+@newsletter|\d+@broadcast|status@broadcast)$
                mention_all:
                  description: 'Grupos: menciona todos os participantes.'
                  type: boolean
                delay_message:
                  description: >-
                    Segundos (0–15) de espera antes de enviar, substituindo o
                    intervalo aleatório da instância
                    (`delay_message_min_ms`/`max_ms`).
                  type: number
                  minimum: 0
                  maximum: 15
                delay_typing:
                  description: >-
                    Segundos (0–15) mostrando "digitando…" (ou "gravando…" em
                    voice notes) antes de enviar. Padrão 0.
                  type: number
                  minimum: 0
                  maximum: 15
                button_label:
                  type: string
                  minLength: 1
                  maxLength: 20
                sections:
                  minItems: 1
                  maxItems: 10
                  type: array
                  items:
                    type: object
                    properties:
                      title:
                        type: string
                        maxLength: 24
                      rows:
                        minItems: 1
                        maxItems: 10
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                              minLength: 1
                              maxLength: 256
                            title:
                              type: string
                              minLength: 1
                              maxLength: 24
                            description:
                              type: string
                              maxLength: 72
                          required:
                            - id
                            - title
                    required:
                      - rows
                options:
                  minItems: 1
                  maxItems: 10
                  type: array
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        minLength: 1
                        maxLength: 256
                      title:
                        type: string
                        minLength: 1
                        maxLength: 24
                      description:
                        type: string
                        maxLength: 72
                    required:
                      - id
                      - title
              required:
                - phone
                - message
                - button_label
            examples:
              basico:
                summary: Menu com seções
                value:
                  phone: '5511988887777'
                  title: Atendimento Wabox Store
                  message: 'Escolha o setor com o qual você quer falar:'
                  footer: Seg. a sex., das 9h às 18h
                  button_label: Ver opções
                  sections:
                    - title: Vendas
                      rows:
                        - id: vendas_novo_pedido
                          title: Novo pedido
                          description: Fazer um orçamento ou comprar
                        - id: vendas_status
                          title: Status do pedido
                          description: Acompanhar uma compra
                    - title: Suporte
                      rows:
                        - id: suporte_tecnico
                          title: Suporte técnico
                          description: Problemas com o produto
                        - id: suporte_financeiro
                          title: Financeiro
                          description: Boletos, notas fiscais e reembolsos
              options:
                summary: Atalho `options[]` (uma seção sem título)
                value:
                  phone: '5511988887777'
                  message: Qual horário prefere para a entrega?
                  button_label: Escolher horário
                  options:
                    - id: manha
                      title: Manhã
                      description: 8h às 12h
                    - id: tarde
                      title: Tarde
                      description: 13h às 18h
      responses:
        '200':
          description: Mensagem enfileirada.
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                  message_id:
                    type: string
                  wabox_id:
                    type: string
                  status:
                    type: string
                    enum:
                      - queued
                required:
                  - id
                  - message_id
                  - wabox_id
                  - status
              example:
                id: 3EB0A9C6D2F1E4B5A7C8
                message_id: 3EB0A9C6D2F1E4B5A7C8
                wabox_id: wbx_01J5Q8ZK3M4N5P6Q7R8S9T0M01
                status: queued
        '401':
          description: Instância/token inválidos ou `Client-Token` ausente.
          content:
            application/json:
              example:
                error:
                  code: instance_not_found
                  message: Instance not found or invalid token
        '402':
          description: >-
            Assinatura da instância inativa (trial expirado ou pagamento
            pendente).
          content:
            application/json:
              example:
                error:
                  code: subscription_required
                  message: Instance subscription is not active

````