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

# Enviar botões interativos — POST /v1/messages/send

> Adicione botões de resposta, URL, chamada e copiar a envios de template ou texto livre com POST /v1/messages/send, e receba os toques nos botões como webhooks de entrada normais.

# Enviar botões interativos

Não existe um endpoint separado `/messages/interactive`. Os botões são campos extras (`buttons`, `header`, `footer`) do **único** endpoint de envio:

```text theme={null}
POST https://pilotstatus.com.br/v1/messages/send
```

## Onde os botões são permitidos

* **Envios de template** (`templateId`) — `buttons` sobrescrevem os botões do próprio template e podem ser combinados com a mídia do template (incluindo `video` / `document`; a Meta Cloud API pode rejeitar algumas combinações de botões com vídeo/documento no momento da entrega).
* **Envios de texto livre** (`text`) — `buttons` junto com o texto; `header` e `footer` exigem `buttons`.
* **Não permitidos** no modo de mídia direta pura (`media` + `mediaType` sem `templateId`/`text`) — veja [Enviar uma mensagem](/pt-BR/api/messages/send).

Até **3** botões por mensagem. Tipos: `reply`, `url`, `call`, `copy`.

## Exemplo: template + botões

```bash theme={null}
curl -X POST "https://pilotstatus.com.br/v1/messages/send" \
  -H "Content-Type: application/json" \
  -H "x-api-key: ps_sua_chave_aqui" \
  -d '{
    "templateId": "confirm-template",
    "destinationNumber": "+5511999999999",
    "variables": { "name": "João" },
    "buttons": [
      { "type": "reply", "displayText": "Confirmar", "id": "confirm" },
      { "type": "url", "displayText": "Ver detalhes", "url": "https://example.com/order/123" }
    ]
  }'
```

## Resposta (202)

```json theme={null}
{
  "id": "msg_abc",
  "correlationId": "corr_123",
  "status": "QUEUED"
}
```

## Como as respostas de botão chegam

Quando o contato toca em um botão de **resposta** (`reply`), você recebe um **webhook de entrada normal** — `message.reply` (ou `message.received`) — cujo `content` é o **texto do botão** (ex.: `"Confirmar"`), com `quotedMessageId` apontando para a sua mensagem original.

<Warning>
  **Não** existe um evento ou tipo de mensagem `button_reply` nem um campo `button_id` — o `id` que você define no botão de resposta não é devolvido. Identifique o toque no botão pelo texto em `content` mais o `quotedMessageId` (e o `correlationId` quando presente).
</Warning>

Veja os payloads completos em [Eventos de webhook](/pt-BR/api/webhooks/events) e a lista completa de parâmetros (formato dos objetos de botão, regras de `header`/`footer`) em [Enviar uma mensagem](/pt-BR/api/messages/send).
