# Enviar mensagem

POST /messages

Envia uma mensagem de qualquer tipo. Passo a passo, exemplos e limites: [Enviar mensagens](/docs/enviar).

O corpo tem o formato da mensagem recebida: `type` diz o tipo, e os campos dele (`text`, `url`, `latitude`, `choices`...) vão soltos, ao lado de `to`; `text` é sempre o texto principal. A resposta é a própria mensagem, como na busca e no webhook.

- **Fila (WhatsApp Web):** a mensagem entra na fila e a resposta volta na hora com `status: queued`; o resultado chega em `message.status`. Com o intervalo padrão da inbox, a fila não espera 1 a 3 s entre as mensagens. Para esperar o envio, mande `options.async: false` (responde `pending` ou o erro). Quando usar cada um: `options.async`. Na API oficial o envio já é na hora.
- **Erros do pedido** (campo faltando, `to` inválido, tipo que o canal não tem) respondem antes da fila: 400 `invalid_request`, ou 501 `unsupported_for_channel` (por exemplo `template` no Web, ou `event` e `payment` na oficial). Inbox desconectada responde 503 (`disconnected`).
- **Placeholders** (`{{name}}`...) valem nos textos.
- **Responder em particular:** `to` na pessoa e `reply_to` numa mensagem de outra conversa. No WhatsApp Web, `reply_to` numa mensagem de grupo (ou num status) manda na conversa direta citando o grupo, como o "Responder em particular" do app. No Instagram e no Messenger, `reply_to` num comentário manda a resposta privada ("comente e receba no direct"): chega mesmo sem a pessoa ter escrito, uma por comentário, até 7 dias depois, só texto ou botões. `to` é quem comentou (o `author.id` do comentário; no Instagram, outro `to` responde `invalid_request`), e a resposta vem na conversa direta que a Meta indicar.
- **Comentar num post** (Instagram e Messenger): `to` no post (`<id>@instagram_post`, `<id>@facebook_post`), só `text`; com `reply_to`, responde ao comentário em público.
- As rotas `/send/*` continuam iguais (formato v1).

## Autenticação

```json
[
  {
    "token": []
  }
]
```

```json
{
  "token": {
    "name": "token",
    "type": "apiKey",
    "in": "header"
  }
}
```

## Corpo da requisição

```json
{
  "required": true,
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/OrkesioSendRequest"
      },
      "examples": {
        "texto": {
          "summary": "Texto",
          "description": "Texto simples, com a formatação do WhatsApp (`*negrito*`, `_itálico_`, `~riscado~`).\n\n- `text`: o texto. Num grupo, todo `@número` escrito no texto já vira menção, e `@todos` ou `@all` menciona todos.\n- `link_preview`: sem o campo, a api monta a prévia do primeiro link do texto; `false` desliga. Para escolher título, descrição e imagem, veja [Texto com prévia de link](/docs/envio-link).\n\nOs campos que valem para todos os tipos (`reply_to`, `mentions`, `track_source`, `track_id` e `options`) estão em [Enviar mensagens](/docs/enviar).",
          "value": {
            "to": "5511999999999",
            "type": "text",
            "text": "Seu pedido saiu para entrega."
          },
          "x-page": "envio-texto",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "text",
            "text": "Seu pedido saiu para entrega.",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "text",
                    "text": "Seu pedido saiu para entrega.",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/text",
            "request": {
              "number": "5511999999999",
              "text": "Seu pedido saiu para entrega."
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "ExtendedTextMessage",
              "mediaType": "",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "Seu pedido saiu para entrega.",
              "content": {
                "text": "Seu pedido saiu para entrega.",
                "contextInfo": {}
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "link": {
          "summary": "Texto com prévia de link",
          "description": "Texto com a prévia do link montada por você: título, descrição e imagem.\n\n- `text`: o texto, com o link. A prévia é do primeiro link do texto.\n- `link_preview`: os dados da prévia. `title` e `description` aparecem no cartão; `image_url` é a imagem; `large: true` mostra a imagem grande. Sem o campo, a api monta a prévia sozinha (`true` faz o mesmo); `false` desliga.\n\nNa API oficial vai só o pedido de prévia: a Meta monta o cartão, sem o título e a descrição daqui.",
          "value": {
            "to": "5511999999999",
            "type": "text",
            "text": "Veja o pedido: https://loja.exemplo/p/42",
            "link_preview": {
              "title": "Pedido 42",
              "description": "Acompanhe a entrega",
              "image_url": "https://loja.exemplo/p/42.jpg",
              "large": true
            }
          },
          "x-page": "envio-link",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "text",
            "text": "Veja o pedido: https://loja.exemplo/p/42",
            "link_preview": {
              "url": "https://loja.exemplo/p/42",
              "title": "Pedido 42",
              "description": "Acompanhe a entrega"
            },
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "text",
                    "text": "Veja o pedido: https://loja.exemplo/p/42",
                    "link_preview": {
                      "url": "https://loja.exemplo/p/42",
                      "title": "Pedido 42",
                      "description": "Acompanhe a entrega",
                      "thumbnail": "/9j/4AAQ..."
                    },
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/text",
            "note": "Na uazapi a prévia ia em campos soltos (`linkPreview`, `linkPreviewTitle`, `linkPreviewDescription`, `linkPreviewImage`); na Orkesio fica tudo em `link_preview`.",
            "request": {
              "number": "5511999999999",
              "text": "Veja o pedido: https://loja.exemplo/p/42",
              "linkPreview": true,
              "linkPreviewTitle": "Pedido 42",
              "linkPreviewDescription": "Acompanhe a entrega",
              "linkPreviewImage": "https://loja.exemplo/p/42.jpg",
              "linkPreviewLarge": true
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "ExtendedTextMessage",
              "mediaType": "",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "Veja o pedido: https://loja.exemplo/p/42",
              "content": {
                "text": "Veja o pedido: https://loja.exemplo/p/42",
                "matchedText": "https://loja.exemplo/p/42",
                "title": "Pedido 42",
                "description": "Acompanhe a entrega",
                "JPEGThumbnail": "/9j/4AAQ...",
                "contextInfo": {}
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "imagem": {
          "summary": "Imagem",
          "description": "Foto, com legenda opcional.\n\n- `url` ou `base64`: o arquivo. Use um dos dois; `base64` aceita com ou sem o prefixo `data:`.\n- `text`: a legenda.\n- `view_once: true`: visualização única.\n- `mime_type`: o tipo do arquivo. Sem ele, a api descobre pelo conteúdo.\n\nVisualização única é só do WhatsApp Web; nos outros canais a resposta é `501` com `unsupported_for_channel`.",
          "value": {
            "to": "5511999999999",
            "type": "image",
            "url": "https://loja.exemplo/nota.jpg",
            "text": "Sua nota fiscal"
          },
          "x-page": "envio-imagem",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "image",
            "text": "Sua nota fiscal",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "image",
                    "text": "Sua nota fiscal",
                    "mime_type": "image/jpeg",
                    "url": "https://servidor-da-instancia.exemplo/files/AC1FACA14F3FA7A19DB5FB19D7035506.jpg",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/media",
            "note": "Na uazapi era `POST /send/media` com `type: image` e o arquivo em `file`; na Orkesio o arquivo vai em `url` ou `base64`.",
            "request": {
              "number": "5511999999999",
              "type": "image",
              "file": "https://loja.exemplo/nota.jpg",
              "text": "Sua nota fiscal"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "ImageMessage",
              "mediaType": "image",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "Sua nota fiscal",
              "content": {
                "URL": "https://mmg.whatsapp.net/o1/v/t24/f2/m231/AQ...",
                "directPath": "/o1/v/t24/f2/m231/AQ...",
                "mediaKey": "xc89kGb6...",
                "fileSHA256": "fH72FyaiECvF1pFA4HOHfF6Pyd7c2X0B8jCM+r69RQo=",
                "fileEncSHA256": "f4ddpVBw...",
                "mediaKeyTimestamp": 1792238400,
                "mimetype": "image/jpeg",
                "caption": "Sua nota fiscal",
                "JPEGThumbnail": "/9j/4AAQ..."
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "video": {
          "summary": "Vídeo",
          "description": "Vídeo, com legenda opcional. O vídeo redondo (recado de vídeo) é outro tipo: [Vídeo redondo](/docs/envio-video-redondo).\n\n- `url` ou `base64`: o arquivo (MP4). Use um dos dois.\n- `text`: a legenda.\n- `animated: true`: envia como GIF, em loop e sem som, como os GIFs do WhatsApp.\n- `view_once: true`: visualização única.\n\nGIF e visualização única são só do WhatsApp Web; nos outros canais a resposta é `501` com `unsupported_for_channel`.\n- `thumbnail`: a miniatura, JPEG em base64. Sem ela, a api gera quando consegue.",
          "value": {
            "to": "5511999999999",
            "type": "video",
            "url": "https://loja.exemplo/montagem.mp4",
            "text": "Como montar"
          },
          "x-page": "envio-video",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "video",
            "text": "Como montar",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "video",
                    "text": "Como montar",
                    "mime_type": "video/mp4",
                    "url": "https://servidor-da-instancia.exemplo/files/AC1FACA14F3FA7A19DB5FB19D7035506.mp4",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/media",
            "note": "Na uazapi o GIF era `type: videoplay`; na Orkesio é o vídeo com `animated: true`.",
            "request": {
              "number": "5511999999999",
              "type": "video",
              "file": "https://loja.exemplo/montagem.mp4",
              "text": "Como montar"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "VideoMessage",
              "mediaType": "video",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "Como montar",
              "content": {
                "URL": "https://mmg.whatsapp.net/o1/v/t24/f2/m231/AQ...",
                "directPath": "/o1/v/t24/f2/m231/AQ...",
                "mediaKey": "xc89kGb6...",
                "fileSHA256": "fH72FyaiECvF1pFA4HOHfF6Pyd7c2X0B8jCM+r69RQo=",
                "fileEncSHA256": "f4ddpVBw...",
                "mediaKeyTimestamp": 1792238400,
                "mimetype": "video/mp4",
                "caption": "Como montar",
                "seconds": 42
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "video_redondo": {
          "summary": "Vídeo redondo",
          "description": "O recado de vídeo, que aparece redondo na conversa. É um tipo próprio, `video_note`, como a voz em relação ao áudio.\n\n- `url` ou `base64`: o arquivo (MP4). Use um dos dois.",
          "value": {
            "to": "5511999999999",
            "type": "video_note",
            "url": "https://loja.exemplo/recado.mp4"
          },
          "x-page": "envio-video-redondo",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "video_note",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "video_note",
                    "mime_type": "video/mp4",
                    "duration_seconds": 9,
                    "url": "https://servidor-da-instancia.exemplo/files/AC1FACA14F3FA7A19DB5FB19D7035506.mp4",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/media",
            "note": "Na uazapi era `type: ptv` no `POST /send/media`.",
            "request": {
              "number": "5511999999999",
              "type": "ptv",
              "file": "https://loja.exemplo/recado.mp4"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "PtvMessage",
              "mediaType": "ptv",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "",
              "content": {
                "URL": "https://mmg.whatsapp.net/o1/v/t24/f2/m231/AQ...",
                "directPath": "/o1/v/t24/f2/m231/AQ...",
                "mediaKey": "xc89kGb6...",
                "fileSHA256": "fH72FyaiECvF1pFA4HOHfF6Pyd7c2X0B8jCM+r69RQo=",
                "fileEncSHA256": "f4ddpVBw...",
                "mediaKeyTimestamp": 1792238400,
                "mimetype": "video/mp4",
                "seconds": 9
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "audio": {
          "summary": "Áudio",
          "description": "Áudio comum, que aparece como arquivo de áudio. A mensagem de voz gravada é outro tipo: [Voz](/docs/envio-voz).\n\n- `url` ou `base64`: o arquivo. Use um dos dois.",
          "value": {
            "to": "5511999999999",
            "type": "audio",
            "url": "https://loja.exemplo/aviso.mp3"
          },
          "x-page": "envio-audio",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "audio",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "audio",
                    "mime_type": "audio/mpeg",
                    "url": "https://servidor-da-instancia.exemplo/files/AC1FACA14F3FA7A19DB5FB19D7035506.mp3",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/media",
            "request": {
              "number": "5511999999999",
              "type": "audio",
              "file": "https://loja.exemplo/aviso.mp3"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "AudioMessage",
              "mediaType": "audio",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "",
              "content": {
                "URL": "https://mmg.whatsapp.net/o1/v/t24/f2/m231/AQ...",
                "directPath": "/o1/v/t24/f2/m231/AQ...",
                "mediaKey": "xc89kGb6...",
                "fileSHA256": "fH72FyaiECvF1pFA4HOHfF6Pyd7c2X0B8jCM+r69RQo=",
                "fileEncSHA256": "f4ddpVBw...",
                "mediaKeyTimestamp": 1792238400,
                "mimetype": "audio/mpeg",
                "seconds": 12,
                "PTT": false
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "voz": {
          "summary": "Voz",
          "description": "Mensagem de voz, como a gravada no app (com a onda do áudio). A api converte para OGG/Opus quando precisa.\n\n- `url` ou `base64`: o arquivo. Use um dos dois.\n- `options.delay_ms`: a espera antes de enviar mostra \"gravando...\" em vez de \"digitando...\".",
          "value": {
            "to": "5511999999999",
            "type": "voice",
            "url": "https://loja.exemplo/recado.ogg"
          },
          "x-page": "envio-voz",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "voice",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "voice",
                    "mime_type": "audio/ogg; codecs=opus",
                    "url": "https://servidor-da-instancia.exemplo/files/AC1FACA14F3FA7A19DB5FB19D7035506.ogg",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/media",
            "note": "Na uazapi o tipo era `ptt` (e `myaudio`); na Orkesio é `voice`.",
            "request": {
              "number": "5511999999999",
              "type": "ptt",
              "file": "https://loja.exemplo/recado.ogg"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "AudioMessage",
              "mediaType": "ptt",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "",
              "content": {
                "URL": "https://mmg.whatsapp.net/o1/v/t24/f2/m231/AQ...",
                "directPath": "/o1/v/t24/f2/m231/AQ...",
                "mediaKey": "xc89kGb6...",
                "fileSHA256": "fH72FyaiECvF1pFA4HOHfF6Pyd7c2X0B8jCM+r69RQo=",
                "fileEncSHA256": "f4ddpVBw...",
                "mediaKeyTimestamp": 1792238400,
                "mimetype": "audio/ogg; codecs=opus",
                "seconds": 8,
                "PTT": true
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "documento": {
          "summary": "Documento",
          "description": "Arquivo (PDF, planilha, qualquer formato), com legenda opcional.\n\n- `url` ou `base64`: o arquivo. Use um dos dois.\n- `filename`: o nome que o contato vê.\n- `text`: a legenda.",
          "value": {
            "to": "5511999999999",
            "type": "document",
            "url": "https://loja.exemplo/boleto.pdf",
            "filename": "boleto-42.pdf",
            "text": "Segue o boleto"
          },
          "x-page": "envio-documento",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "document",
            "text": "Segue o boleto",
            "filename": "boleto-42.pdf",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "document",
                    "text": "Segue o boleto",
                    "filename": "boleto-42.pdf",
                    "mime_type": "application/pdf",
                    "url": "https://servidor-da-instancia.exemplo/files/AC1FACA14F3FA7A19DB5FB19D7035506.pdf",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/media",
            "note": "Na uazapi o nome ia em `docName`; na Orkesio, em `filename`.",
            "request": {
              "number": "5511999999999",
              "type": "document",
              "file": "https://loja.exemplo/boleto.pdf",
              "docName": "boleto-42.pdf",
              "text": "Segue o boleto"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "DocumentMessage",
              "mediaType": "document",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "Segue o boleto",
              "content": {
                "URL": "https://mmg.whatsapp.net/o1/v/t24/f2/m231/AQ...",
                "directPath": "/o1/v/t24/f2/m231/AQ...",
                "mediaKey": "xc89kGb6...",
                "fileSHA256": "fH72FyaiECvF1pFA4HOHfF6Pyd7c2X0B8jCM+r69RQo=",
                "fileEncSHA256": "f4ddpVBw...",
                "mediaKeyTimestamp": 1792238400,
                "mimetype": "application/pdf",
                "fileName": "boleto-42.pdf",
                "caption": "Segue o boleto",
                "pageCount": 1
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "figurinha": {
          "summary": "Figurinha",
          "description": "Figurinha (WebP).\n\n- `url` ou `base64`: o arquivo. Use um dos dois.",
          "value": {
            "to": "5511999999999",
            "type": "sticker",
            "url": "https://loja.exemplo/obrigado.webp"
          },
          "x-page": "envio-figurinha",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "sticker",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "sticker",
                    "mime_type": "image/webp",
                    "url": "https://servidor-da-instancia.exemplo/files/AC1FACA14F3FA7A19DB5FB19D7035506.webp",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/media",
            "request": {
              "number": "5511999999999",
              "type": "sticker",
              "file": "https://loja.exemplo/obrigado.webp"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "StickerMessage",
              "mediaType": "sticker",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "",
              "content": {
                "URL": "https://mmg.whatsapp.net/o1/v/t24/f2/m231/AQ...",
                "directPath": "/o1/v/t24/f2/m231/AQ...",
                "mediaKey": "xc89kGb6...",
                "fileSHA256": "fH72FyaiECvF1pFA4HOHfF6Pyd7c2X0B8jCM+r69RQo=",
                "fileEncSHA256": "f4ddpVBw...",
                "mediaKeyTimestamp": 1792238400,
                "mimetype": "image/webp",
                "isAnimated": false
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "localizacao": {
          "summary": "Localização",
          "description": "Um ponto no mapa.\n\n- `latitude` e `longitude`: obrigatórios.\n- `name`: o nome do lugar.\n- `address`: o endereço.\n\nPara pedir a localização do contato, veja [Pedido de localização](/docs/envio-pedir-localizacao).",
          "value": {
            "to": "5511999999999",
            "type": "location",
            "latitude": -23.5614,
            "longitude": -46.6559,
            "name": "Loja Paulista",
            "address": "Av. Paulista, 1000"
          },
          "x-page": "envio-localizacao",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "location",
            "latitude": -23.5614,
            "longitude": -46.6559,
            "name": "Loja Paulista",
            "address": "Av. Paulista, 1000",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "location",
                    "latitude": -23.5614,
                    "longitude": -46.6559,
                    "name": "Loja Paulista",
                    "address": "Av. Paulista, 1000",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/location",
            "request": {
              "number": "5511999999999",
              "latitude": -23.5614,
              "longitude": -46.6559,
              "name": "Loja Paulista",
              "address": "Av. Paulista, 1000"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "LocationMessage",
              "mediaType": "",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "",
              "content": {
                "degreesLatitude": -23.5614,
                "degreesLongitude": -46.6559,
                "name": "Loja Paulista",
                "address": "Av. Paulista, 1000"
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "contato": {
          "summary": "Contato",
          "description": "Cartão de contato, que o contato salva com um toque.\n\n- `contacts[]`: o contato. Por enquanto vai um por mensagem (com mais, responde 400).\n  - `name`: o nome exibido.\n  - `phones[]`: os telefones, com DDI.\n  - `email`, `organization` e `url`: opcionais.",
          "value": {
            "to": "5511999999999",
            "type": "contacts",
            "contacts": [
              {
                "name": "Suporte Loja",
                "phones": [
                  "5511977776666",
                  "5511955554444"
                ],
                "organization": "Loja",
                "email": "suporte@loja.exemplo"
              }
            ]
          },
          "x-page": "envio-contato",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "contacts",
            "contacts": [
              {
                "name": "Suporte Loja",
                "phones": [
                  {
                    "number": "5511977776666"
                  },
                  {
                    "number": "5511955554444"
                  }
                ]
              }
            ],
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "contacts",
                    "contacts": [
                      {
                        "name": "Suporte Loja",
                        "phones": [
                          {
                            "number": "+55 11 97777-6666",
                            "wa_id": "5511977776666"
                          },
                          {
                            "number": "+55 11 95555-4444",
                            "wa_id": "5511955554444"
                          }
                        ],
                        "vcard": "BEGIN:VCARD\nVERSION:3.0\nFN:Suporte Loja\n...\nEND:VCARD"
                      }
                    ],
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/contact",
            "note": "Na uazapi os telefones iam numa string separada por vírgula (`phoneNumber`); na Orkesio é a lista `phones`.",
            "request": {
              "number": "5511999999999",
              "fullName": "Suporte Loja",
              "phoneNumber": "5511977776666,5511955554444",
              "organization": "Loja",
              "email": "suporte@loja.exemplo"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "ContactMessage",
              "mediaType": "",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "",
              "content": {
                "displayName": "Suporte Loja",
                "vcard": "BEGIN:VCARD\nVERSION:3.0\nFN:Suporte Loja\n...\nEND:VCARD"
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "enquete": {
          "summary": "Enquete",
          "description": "Pergunta com opções, que o contato responde tocando.\n\n- `text`: a pergunta.\n- `choices[]`: as opções, pelo nome.\n- `selectable_count`: quantas o contato pode marcar, de `0` (várias) até o número de opções.\n\nCada voto chega como mensagem `poll_vote`, com as opções marcadas pelo nome. Para votar pela inbox, mande `\"type\": \"poll_vote\"` com a enquete em `poll.id` e as opções em `choices` (`[]` tira o voto); `to` é opcional, o voto vai para a conversa da enquete.\n\n```json\n{\n  \"type\": \"poll_vote\",\n  \"poll\": { \"id\": \"3EB05DCE1D4036FCE241C6\" },\n  \"choices\": [\"Tarde\"]\n}\n```",
          "value": {
            "to": "5511999999999",
            "type": "poll",
            "text": "Qual horário prefere?",
            "choices": [
              "Manhã",
              "Tarde"
            ],
            "selectable_count": 1
          },
          "x-page": "envio-enquete",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "poll",
            "text": "Qual horário prefere?",
            "choices": [
              "Manhã",
              "Tarde"
            ],
            "selectable_count": 1,
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "poll",
                    "text": "Qual horário prefere?",
                    "choices": [
                      "Manhã",
                      "Tarde"
                    ],
                    "selectable_count": 1,
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-replies": [
            {
              "event": "message.received",
              "note": "o contato votou em **Tarde**. Cada voto (e cada troca de voto) chega assim, com `category: event`; `choices` vazio é o voto retirado",
              "example": {
                "id": "evt_01JAB3M2K8P4R6T8V0X2Z4B6D8",
                "type": "message.received",
                "created_at": "2026-10-17T12:03:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "AC1FACA14F3FA7A19DB5FB19D7035506",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511999999999@s.whatsapp.net",
                      "phone": "5511999999999",
                      "lid": "123456789012345@lid",
                      "name": "Maria Souza"
                    },
                    "direction": "in",
                    "sent_at": "2026-10-17T12:03:00.000Z",
                    "category": "event",
                    "type": "poll_vote",
                    "poll": {
                      "id": "3EB05DCE1D4036FCE241C6",
                      "direction": "out",
                      "type": "poll",
                      "preview": "Qual horário prefere?"
                    },
                    "choices": [
                      "Tarde"
                    ]
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/menu",
            "note": "Na uazapi a enquete era `POST /send/menu` com `type: poll`, e o voto pela inbox era um texto `>1` (ou `>0`) respondendo à enquete. Na Orkesio um texto vai como texto: o voto é `type: poll_vote`.",
            "request": {
              "number": "5511999999999",
              "type": "poll",
              "text": "Qual horário prefere?",
              "choices": [
                "Manhã",
                "Tarde"
              ],
              "selectableCount": 1
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "PollCreationMessageV3",
              "mediaType": "",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "Qual horário prefere?",
              "content": {
                "name": "Qual horário prefere?",
                "options": [
                  {
                    "optionName": "Manhã"
                  },
                  {
                    "optionName": "Tarde"
                  }
                ],
                "selectableOptionsCount": 1
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "botoes": {
          "summary": "Botões",
          "description": "Texto com botões embaixo. O botão de resposta manda o clique para você; os outros abrem um link, ligam ou copiam um código.\n\n- `text`: o texto. Com mais de uma linha, a primeira é o cabeçalho (em negrito) e o resto é o corpo.\n- `footer`: o rodapé, em cinza.\n- `url` ou `base64`: mídia no cabeçalho (imagem, vídeo ou documento), opcional.\n- `choices[]`: os botões.\n  - `title`: o texto do botão.\n  - `id`: o que volta no clique (`option_id`). Sem `id`, vale o `title`.\n  - `action`: `reply` (padrão, responde), `url` (abre o link em `value`), `call` (liga para o número em `value`) ou `copy` (copia o código em `value`). Só o `reply` gera evento. Na API oficial: até 3 botões de resposta ou 1 de link, sem misturar; copiar e ligar só em modelo (`template`).\n- `legacy: true`: o formato antigo de botões, para quem ainda usa (só botões de resposta, sem mídia).\n\nPara responder pela inbox a uma mensagem de botões que chegou, mande `\"type\": \"interactive_reply\"` com a mensagem em `reply_to` e o `id` da opção em `option_id`.",
          "value": {
            "to": "5511999999999",
            "type": "buttons",
            "text": "Confirma o pedido?",
            "footer": "Loja",
            "choices": [
              {
                "id": "sim",
                "title": "Sim"
              },
              {
                "id": "nao",
                "title": "Não"
              }
            ]
          },
          "x-page": "envio-botoes",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "buttons",
            "text": "Confirma o pedido?",
            "footer": "Loja",
            "choices": [
              {
                "id": "sim",
                "title": "Sim"
              },
              {
                "id": "nao",
                "title": "Não"
              }
            ],
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "buttons",
                    "text": "Confirma o pedido?",
                    "footer": "Loja",
                    "choices": [
                      {
                        "id": "sim",
                        "title": "Sim"
                      },
                      {
                        "id": "nao",
                        "title": "Não"
                      }
                    ],
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-replies": [
            {
              "event": "message.received",
              "note": "o contato tocou em **Sim**. `option_id` é o `id` do botão e `reply_to` é a mensagem dos botões. `kind` é `template_button` (é assim que o WhatsApp manda o clique nesses botões; com `legacy: true`, vem `button`)",
              "example": {
                "id": "evt_01JAB3M2K8P4R6T8V0X2Z4B6D8",
                "type": "message.received",
                "created_at": "2026-10-17T12:03:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "AC1FACA14F3FA7A19DB5FB19D7035506",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511999999999@s.whatsapp.net",
                      "phone": "5511999999999",
                      "lid": "123456789012345@lid",
                      "name": "Maria Souza"
                    },
                    "direction": "in",
                    "sent_at": "2026-10-17T12:03:00.000Z",
                    "category": "conversation",
                    "type": "interactive_reply",
                    "kind": "template_button",
                    "option_id": "sim",
                    "text": "Sim",
                    "reply_to": "3EB05DCE1D4036FCE241C6",
                    "quoted": {
                      "id": "3EB05DCE1D4036FCE241C6",
                      "direction": "out",
                      "type": "buttons",
                      "preview": "Confirma o pedido?"
                    }
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/menu",
            "note": "Na uazapi cada opção era um texto `\"Título|id\"`, e o tipo do botão vinha do formato do id. Na Orkesio cada item de `choices` é um objeto com `action` e `value`. A resposta pela inbox era um texto `>1` respondendo à mensagem; na Orkesio é `type: interactive_reply`.",
            "request": {
              "number": "5511999999999",
              "type": "button",
              "text": "Confirma o pedido?",
              "footerText": "Loja",
              "choices": [
                "Sim|sim",
                "Não|nao"
              ]
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "InteractiveMessage",
              "mediaType": "",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "Confirma o pedido?",
              "content": {
                "body": {
                  "text": "Confirma o pedido?"
                },
                "footer": {
                  "text": "Loja"
                },
                "nativeFlowMessage": {
                  "buttons": [
                    "..."
                  ]
                }
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "lista": {
          "summary": "Lista",
          "description": "Texto com um botão que abre a lista de opções, agrupadas em seções.\n\n- `text`: o texto. Com mais de uma linha, a primeira é o cabeçalho (em negrito) e o resto é o corpo. A lista não aceita mídia.\n- `button_text`: o texto do botão que abre a lista.\n- `footer`: o rodapé, em cinza.\n- `choices[]`: os itens.\n  - `title`: o texto do item.\n  - `id`: o que volta no clique (`option_id`). Sem `id`, vale o `title`.\n  - `description`: a linha de baixo, em cinza.\n  - `section`: a seção do item. Itens com a mesma `section` ficam juntos, na ordem em que vierem.\n\nPara responder pela inbox a uma lista que chegou, mande `\"type\": \"interactive_reply\"` com a mensagem em `reply_to` e o `id` do item em `option_id`.",
          "value": {
            "to": "5511999999999",
            "type": "list",
            "text": "Escolha o setor",
            "button_text": "Ver setores",
            "choices": [
              {
                "id": "vendas",
                "title": "Vendas",
                "section": "Atendimento"
              },
              {
                "id": "suporte",
                "title": "Suporte",
                "description": "Dúvidas e problemas",
                "section": "Atendimento"
              },
              {
                "id": "boleto",
                "title": "Segunda via",
                "section": "Financeiro"
              }
            ]
          },
          "x-page": "envio-lista",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "list",
            "text": "Escolha o setor",
            "choices": [
              {
                "id": "vendas",
                "title": "Vendas",
                "section": "Atendimento"
              },
              {
                "id": "suporte",
                "title": "Suporte",
                "description": "Dúvidas e problemas",
                "section": "Atendimento"
              },
              {
                "id": "boleto",
                "title": "Segunda via",
                "section": "Financeiro"
              }
            ],
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "list",
                    "text": "Escolha o setor",
                    "choices": [
                      {
                        "id": "vendas",
                        "title": "Vendas",
                        "section": "Atendimento"
                      },
                      {
                        "id": "suporte",
                        "title": "Suporte",
                        "description": "Dúvidas e problemas",
                        "section": "Atendimento"
                      },
                      {
                        "id": "boleto",
                        "title": "Segunda via",
                        "section": "Financeiro"
                      }
                    ],
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-replies": [
            {
              "event": "message.received",
              "note": "o contato escolheu **Suporte**. `option_id` é o `id` do item, `description` vem junto e `reply_to` é a mensagem da lista",
              "example": {
                "id": "evt_01JAB3M2K8P4R6T8V0X2Z4B6D8",
                "type": "message.received",
                "created_at": "2026-10-17T12:03:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "AC1FACA14F3FA7A19DB5FB19D7035506",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511999999999@s.whatsapp.net",
                      "phone": "5511999999999",
                      "lid": "123456789012345@lid",
                      "name": "Maria Souza"
                    },
                    "direction": "in",
                    "sent_at": "2026-10-17T12:03:00.000Z",
                    "category": "conversation",
                    "type": "interactive_reply",
                    "kind": "list",
                    "option_id": "suporte",
                    "text": "Suporte",
                    "description": "Dúvidas e problemas",
                    "reply_to": "3EB05DCE1D4036FCE241C6",
                    "quoted": {
                      "id": "3EB05DCE1D4036FCE241C6",
                      "direction": "out",
                      "type": "list",
                      "preview": "Escolha o setor"
                    }
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/menu",
            "note": "Na uazapi a seção era um item `\"[Título]\"` no meio da lista; na Orkesio cada item de `choices` diz a sua `section`. A resposta pela inbox era um texto `>1` respondendo à mensagem; na Orkesio é `type: interactive_reply`.",
            "request": {
              "number": "5511999999999",
              "type": "list",
              "text": "Escolha o setor",
              "listButton": "Ver setores",
              "choices": [
                "[Atendimento]",
                "Vendas|vendas",
                "Suporte|suporte|Dúvidas e problemas",
                "[Financeiro]",
                "Segunda via|boleto"
              ]
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "ListMessage",
              "mediaType": "",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "Escolha o setor",
              "content": {
                "description": "Escolha o setor",
                "buttonText": "Ver setores",
                "listType": 1,
                "sections": [
                  "..."
                ]
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "carrossel": {
          "summary": "Carrossel",
          "description": "Cartões lado a lado, que o contato arrasta para o lado. Cada cartão tem uma mídia, um texto e os seus botões. Serve para vitrine de produtos, planos ou opções com foto.\n\n- `text`: o texto que vai acima dos cartões.\n- `cards[]`: os cartões, na ordem em que aparecem.\n  - `type`: a mídia do cartão (`image`, `video` ou `document`). Com `url` e sem `type`, vale `image`.\n  - `url` ou `base64`: o arquivo. Use um dos dois; `filename` dá o nome do documento.\n  - `text`: o texto do cartão, abaixo da mídia. Aceita quebra de linha.\n  - `choices[]`: os botões do cartão. Sem `action` (ou `action: reply`), o botão responde: o contato toca e chega um `message.received` com `interactive_reply`, e o `option_id` é o `id` do botão (sem `id`, vale o `title`). Com `action: url`, abre o link em `value`; `call` liga para o número em `value`; `copy` copia o código em `value`. Esses três não geram evento: nada chega ao WhatsApp da inbox.\n\nNos botões, `title`, `id` e `value` não aceitam aspas, `\\` nem quebra de linha. Use `id` diferente em cada botão de resposta, mesmo entre cartões: o clique diz qual botão foi tocado, não qual cartão.\n\nSó no WhatsApp Web. Na API oficial, no Telegram, no Instagram e no Messenger, responde `501` com `unsupported_for_channel`.",
          "value": {
            "to": "5511999999999",
            "type": "carousel",
            "text": "Nossos destaques",
            "cards": [
              {
                "type": "image",
                "url": "https://loja.exemplo/xyz.jpg",
                "text": "Smartphone XYZ\nR$ 1.999",
                "choices": [
                  {
                    "id": "comprar_xyz",
                    "title": "Comprar"
                  },
                  {
                    "title": "Ver no site",
                    "action": "url",
                    "value": "https://loja.exemplo/xyz"
                  }
                ]
              },
              {
                "type": "image",
                "url": "https://loja.exemplo/fone.jpg",
                "text": "Fone ABC\nR$ 299",
                "choices": [
                  {
                    "id": "comprar_fone",
                    "title": "Comprar"
                  },
                  {
                    "title": "Falar com vendedor",
                    "action": "call",
                    "value": "+5511888888888"
                  }
                ]
              }
            ]
          },
          "x-page": "envio-carrossel",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_by": "api",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "type": "carousel",
            "text": "Nossos destaques",
            "cards": [
              {
                "type": "image",
                "mime_type": "image/jpeg",
                "text": "Smartphone XYZ\nR$ 1.999",
                "choices": [
                  {
                    "id": "comprar_xyz",
                    "title": "Comprar"
                  },
                  {
                    "title": "Ver no site",
                    "action": "url",
                    "value": "https://loja.exemplo/xyz"
                  }
                ]
              },
              {
                "type": "image",
                "mime_type": "image/jpeg",
                "text": "Fone ABC\nR$ 299",
                "choices": [
                  {
                    "id": "comprar_fone",
                    "title": "Comprar"
                  },
                  {
                    "title": "Falar com vendedor",
                    "action": "call",
                    "value": "+5511888888888"
                  }
                ]
              }
            ],
            "category": "unsent",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando o carrossel sai, com os cartões",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_by": "api",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "carousel",
                    "text": "Nossos destaques",
                    "cards": [
                      {
                        "type": "image",
                        "mime_type": "image/jpeg",
                        "text": "Smartphone XYZ\nR$ 1.999",
                        "choices": [
                          {
                            "id": "comprar_xyz",
                            "title": "Comprar"
                          },
                          {
                            "title": "Ver no site",
                            "action": "url",
                            "value": "https://loja.exemplo/xyz"
                          }
                        ]
                      },
                      {
                        "type": "image",
                        "mime_type": "image/jpeg",
                        "text": "Fone ABC\nR$ 299",
                        "choices": [
                          {
                            "id": "comprar_fone",
                            "title": "Comprar"
                          },
                          {
                            "title": "Falar com vendedor",
                            "action": "call",
                            "value": "+5511888888888"
                          }
                        ]
                      }
                    ]
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-replies": [
            {
              "event": "message.received",
              "note": "o contato tocou no botão **Comprar** do primeiro cartão. `kind` é `template_button` (é assim que o WhatsApp manda o clique no carrossel) e `reply_to` é o id do carrossel",
              "example": {
                "id": "evt_01JAB3M2K8P4R6T8V0X2Z4B6D8",
                "type": "message.received",
                "created_at": "2026-10-17T12:03:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "AC1FACA14F3FA7A19DB5FB19D7035506",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511999999999@s.whatsapp.net",
                      "phone": "5511999999999",
                      "lid": "123456789012345@lid",
                      "name": "Maria"
                    },
                    "direction": "in",
                    "sent_at": "2026-10-17T12:03:00.000Z",
                    "category": "conversation",
                    "type": "interactive_reply",
                    "kind": "template_button",
                    "option_id": "comprar_xyz",
                    "text": "Comprar",
                    "reply_to": "3EB05DCE1D4036FCE241C6"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/carousel",
            "note": "Os botões do cartão (`choices`) têm o mesmo formato das outras opções; a mídia do cartão (`type`, `url`) vai solta no próprio cartão. Na uazapi o link ia no `id` com `type: URL`; na Orkesio vai em `value` com `action: url`. A resposta é a própria mensagem, igual ao `message.sent`.",
            "request": {
              "number": "5511999999999",
              "text": "Nossos destaques",
              "carousel": [
                {
                  "text": "Smartphone XYZ\nR$ 1.999",
                  "image": "https://loja.exemplo/xyz.jpg",
                  "buttons": [
                    {
                      "id": "comprar_xyz",
                      "text": "Comprar",
                      "type": "REPLY"
                    },
                    {
                      "id": "https://loja.exemplo/xyz",
                      "text": "Ver no site",
                      "type": "URL"
                    }
                  ]
                },
                {
                  "text": "Fone ABC\nR$ 299",
                  "image": "https://loja.exemplo/fone.jpg",
                  "buttons": [
                    {
                      "id": "comprar_fone",
                      "text": "Comprar",
                      "type": "REPLY"
                    },
                    {
                      "id": "+5511888888888",
                      "text": "Falar com vendedor",
                      "type": "CALL"
                    }
                  ]
                }
              ]
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "fromMe": true,
              "messageType": "InteractiveMessage",
              "messageTimestamp": 1792238400000,
              "text": "Nossos destaques",
              "content": {
                "body": {
                  "text": "Nossos destaques"
                },
                "carouselMessage": {
                  "cards": [
                    "..."
                  ]
                }
              },
              "wasSentByApi": true,
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "pedir_localizacao": {
          "summary": "Pedido de localização",
          "description": "Texto com o botão \"Enviar localização\": o contato toca e manda onde está.\n\n- `text`: o pedido, acima do botão.",
          "value": {
            "to": "5511999999999",
            "type": "location_request",
            "text": "Mande sua localização para calcular o frete"
          },
          "x-page": "envio-pedir-localizacao",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "location_request",
            "text": "Mande sua localização para calcular o frete",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "location_request",
                    "text": "Mande sua localização para calcular o frete",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-replies": [
            {
              "event": "message.received",
              "note": "o contato tocou em **Enviar localização**: chega uma mensagem `location` comum",
              "example": {
                "id": "evt_01JAB3M2K8P4R6T8V0X2Z4B6D8",
                "type": "message.received",
                "created_at": "2026-10-17T12:03:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "AC1FACA14F3FA7A19DB5FB19D7035506",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511999999999@s.whatsapp.net",
                      "phone": "5511999999999",
                      "lid": "123456789012345@lid",
                      "name": "Maria Souza"
                    },
                    "direction": "in",
                    "sent_at": "2026-10-17T12:03:00.000Z",
                    "category": "conversation",
                    "type": "location",
                    "latitude": -23.5614,
                    "longitude": -46.6559
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/location-button",
            "request": {
              "number": "5511999999999",
              "text": "Mande sua localização para calcular o frete"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "InteractiveMessage",
              "mediaType": "",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "Mande sua localização para calcular o frete",
              "content": {
                "body": {
                  "text": "Mande sua localização para calcular o frete"
                },
                "nativeFlowMessage": {
                  "buttons": [
                    {
                      "name": "send_location"
                    }
                  ]
                }
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "flow": {
          "summary": "Flow (formulário da Meta)",
          "description": "O Flow é um formulário em telas, criado e publicado no WhatsApp Manager da Meta. A mensagem leva o texto e um botão; o botão abre o Flow.\n\n- `text`: com mais de uma linha, a primeira é o cabeçalho e o resto é o corpo, como na lista e nos botões.\n- `button_text`: o texto do botão.\n- `flow_id`: o Flow, como está na Meta.\n- `flow_token`: o seu identificador desta conversa, que volta na resposta. Sem ele, vai o `flow_id`.\n- `flow_action`: `navigate` (padrão, abre na tela de `flow_action_payload.screen`) ou `data_exchange` (o Flow pede a primeira tela ao seu endpoint de dados).\n- `mode`: `published` (padrão) ou `draft`, para testar o rascunho.\n\nA resposta do contato chega como mensagem `interactive_reply`, com `kind: flow` e os dados do formulário em `response`.",
          "value": {
            "to": "5511999999999",
            "type": "flow",
            "text": "Cadastro\nPreencha seus dados para o orçamento.",
            "footer": "Leva 1 minuto",
            "button_text": "Começar",
            "flow_id": "1234567890123456",
            "flow_token": "pedido-42",
            "flow_action_payload": {
              "screen": "DADOS",
              "data": {
                "pedido": "42"
              }
            }
          },
          "x-page": "envio-flow",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "flow",
            "text": "Cadastro\nPreencha seus dados para o orçamento.",
            "footer": "Leva 1 minuto",
            "button_text": "Começar",
            "flow_id": "1234567890123456",
            "flow_token": "pedido-42",
            "flow_action": "navigate",
            "flow_action_payload": {
              "screen": "DADOS",
              "data": {
                "pedido": "42"
              }
            },
            "mode": "published",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "flow",
                    "text": "Cadastro\nPreencha seus dados para o orçamento.",
                    "footer": "Leva 1 minuto",
                    "button_text": "Começar",
                    "flow_id": "1234567890123456",
                    "flow_token": "pedido-42",
                    "flow_action": "navigate",
                    "flow_action_payload": {
                      "screen": "DADOS",
                      "data": {
                        "pedido": "42"
                      }
                    },
                    "mode": "published",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-replies": [
            {
              "event": "message.received",
              "note": "o contato preencheu e enviou o formulário. `response` traz os campos do Flow e o `flow_token` que você mandou",
              "example": {
                "id": "evt_01JAB3M2K8P4R6T8V0X2Z4B6D8",
                "type": "message.received",
                "created_at": "2026-10-17T12:05:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "AC1FACA14F3FA7A19DB5FB19D7035506",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511999999999@s.whatsapp.net",
                      "phone": "5511999999999",
                      "lid": "123456789012345@lid",
                      "name": "Maria Souza"
                    },
                    "direction": "in",
                    "sent_at": "2026-10-17T12:05:00.000Z",
                    "category": "conversation",
                    "type": "interactive_reply",
                    "kind": "flow",
                    "reply_to": "3EB05DCE1D4036FCE241C6",
                    "response": {
                      "flow_token": "pedido-42",
                      "nome": "Maria Souza",
                      "cidade": "São Paulo"
                    }
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/flow",
            "note": "A `/send/flow` não está na doc da uazapi. O texto do botão era `flow_cta` (na Orkesio, `button_text`). Saíram `flow_metadata` (campos livres, que a Meta não usa) e `flow_message_version` (a única versão que o WhatsApp aceita é a 3, que a api manda sempre).",
            "request": {
              "number": "5511999999999",
              "headerText": "Cadastro",
              "text": "Preencha seus dados para o orçamento.",
              "footerText": "Leva 1 minuto",
              "flow_cta": "Começar",
              "flow_id": "1234567890123456",
              "flow_token": "pedido-42",
              "flow_action_payload": {
                "screen": "DADOS",
                "data": {
                  "pedido": "42"
                }
              }
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "fromMe": true,
              "isGroup": false,
              "messageType": "InteractiveMessage",
              "messageTimestamp": 1792238400000,
              "text": "Preencha seus dados para o orçamento.",
              "content": {
                "header": {
                  "title": "Cadastro"
                },
                "body": {
                  "text": "Preencha seus dados para o orçamento."
                },
                "footer": {
                  "text": "Leva 1 minuto"
                },
                "nativeFlowMessage": {
                  "buttons": [
                    {
                      "name": "galaxy_message",
                      "buttonParamsJSON": "{\"flow_message_version\":\"3\",\"flow_id\":\"1234567890123456\",\"flow_cta\":\"Começar\",...}"
                    }
                  ]
                }
              },
              "wasSentByApi": true,
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "cobranca": {
          "summary": "Cobrança (PIX, boleto, link)",
          "description": "Pedido de pagamento: o contato vê o valor e as formas de pagar. `pix`, `boleto` e `link` podem ir juntos, e aparecem os que vierem.\n\n- `amount`: o valor (obrigatório na cobrança; sem ele e só com `pix`, sai o [Botão PIX](/docs/envio-pix)).\n- `text`: a nota da cobrança.\n- `reference_id`: o número do pedido ou da fatura.\n- `items[]`: o item cobrado (`name` e `quantity`). Por enquanto, um item por cobrança, sem valor próprio: o valor é o `amount`.\n- `pix`: a chave (`key`), o tipo dela (`key_type`: `cpf`, `cnpj`, `email`, `phone` ou `evp`) e o nome de quem recebe (`merchant_name`).\n- `boleto`: a linha digitável.\n- `link`: o link de pagamento (só domínios homologados pelo WhatsApp).\n- `invoice`: a fatura em PDF (`url` ou `base64`, e `filename`).\n- `order_id`: para cobrar um pedido que o contato mandou, o `id` da mensagem do pedido.",
          "value": {
            "to": "5511999999999",
            "type": "payment",
            "amount": 349.5,
            "text": "Pedido #457",
            "reference_id": "457",
            "items": [
              {
                "name": "Kit de ferramentas",
                "quantity": 1
              }
            ],
            "pix": {
              "key": "12345678000190",
              "key_type": "cnpj",
              "merchant_name": "Loja Exemplo LTDA"
            },
            "boleto": "34191.79001 01043.510047 91020.150008 5 97340000034950",
            "invoice": {
              "url": "https://loja.exemplo/boleto-457.pdf",
              "filename": "boleto-457.pdf"
            }
          },
          "x-page": "envio-cobranca",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "payment",
            "amount": 349.5,
            "reference_id": "457",
            "text": "Pedido #457",
            "pix": {
              "key": "12345678000190",
              "key_type": "cnpj",
              "merchant_name": "Loja Exemplo LTDA"
            },
            "boleto": "34191.79001 01043.510047 91020.150008 5 97340000034950",
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "payment",
                    "amount": 349.5,
                    "currency": "BRL",
                    "reference_id": "457",
                    "text": "Pedido #457",
                    "items": [
                      {
                        "name": "Kit de ferramentas",
                        "quantity": 1,
                        "amount": 349.5
                      }
                    ],
                    "pix": {
                      "key": "12345678000190",
                      "key_type": "cnpj",
                      "merchant_name": "Loja Exemplo LTDA"
                    },
                    "boleto": "34191.79001 01043.510047 91020.150008 5 97340000034950",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/request-payment",
            "note": "Na uazapi o pedido do contato ia em `orderMessageId`; na Orkesio, em `order_id`.",
            "request": {
              "number": "5511999999999",
              "amount": 349.5,
              "text": "Pedido #457",
              "invoiceNumber": "457",
              "itemName": "Kit de ferramentas",
              "pixKey": "12345678000190",
              "pixType": "CNPJ",
              "pixName": "Loja Exemplo LTDA",
              "boletoCode": "34191.79001 01043.510047 91020.150008 5 97340000034950",
              "fileUrl": "https://loja.exemplo/boleto-457.pdf",
              "fileName": "boleto-457.pdf"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "InteractiveMessage",
              "mediaType": "",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "Pedido #457",
              "content": {
                "body": {
                  "text": "Pedido #457"
                },
                "nativeFlowMessage": {
                  "buttons": [
                    {
                      "name": "review_and_pay",
                      "buttonParamsJSON": "..."
                    }
                  ]
                }
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "pix": {
          "summary": "Botão PIX",
          "description": "Só o botão de copiar a chave PIX, sem valor. É a mesma `payment` da [Cobrança](/docs/envio-cobranca), sem `amount`.\n\n- `pix.key`: a chave.\n- `pix.key_type`: `cpf`, `cnpj`, `email`, `phone` ou `evp`.\n- `pix.merchant_name`: o nome de quem recebe.",
          "value": {
            "to": "5511999999999",
            "type": "payment",
            "pix": {
              "key": "loja@exemplo.com",
              "key_type": "email",
              "merchant_name": "Loja"
            }
          },
          "x-page": "envio-pix",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "payment",
            "pix": {
              "key": "loja@exemplo.com",
              "key_type": "email",
              "merchant_name": "Loja"
            },
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "payment",
                    "pix": {
                      "key": "loja@exemplo.com",
                      "key_type": "email",
                      "merchant_name": "Loja"
                    },
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/pix-button",
            "note": "A chave ia em `pixKey`, o tipo em `pixType` (em maiúsculas) e o nome em `pixName`; na Orkesio fica tudo em `pix`.",
            "request": {
              "number": "5511999999999",
              "pixKey": "loja@exemplo.com",
              "pixType": "EMAIL",
              "pixName": "Loja"
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "InteractiveMessage",
              "mediaType": "",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "",
              "content": {
                "nativeFlowMessage": {
                  "buttons": [
                    {
                      "name": "payment_info",
                      "buttonParamsJSON": "..."
                    }
                  ]
                }
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "evento": {
          "summary": "Evento",
          "description": "Convite de evento, que o contato confirma (vou, não vou, talvez).\n\n- `text`: o nome do evento.\n- `description`: a descrição.\n- `start_at` e `end_at`: início e fim, em ISO 8601 (UTC).\n- `location`: o lugar (`name` e `address`).\n- `join_link`: o link da chamada (HTTPS). Com ele, o evento vira chamada agendada.\n- `reminder_minutes`: o lembrete, em minutos antes do início.\n- `canceled: true`: cancela o evento.",
          "value": {
            "to": "5511999999999",
            "type": "event",
            "text": "Reunião de apresentação",
            "description": "Demonstração do produto",
            "start_at": "2026-10-17T15:00:00.000Z",
            "end_at": "2026-10-17T16:00:00.000Z",
            "location": {
              "name": "Escritório",
              "address": "Av. Paulista, 1000"
            },
            "reminder_minutes": 15
          },
          "x-page": "envio-evento",
          "x-response": {
            "id": "3EB05DCE1D4036FCE241C6",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "unsent",
            "type": "event",
            "text": "Reunião de apresentação",
            "description": "Demonstração do produto",
            "start_at": "2026-10-17T15:00:00.000Z",
            "end_at": "2026-10-17T16:00:00.000Z",
            "location": {
              "name": "Escritório",
              "address": "Av. Paulista, 1000"
            },
            "sent_by": "api",
            "status": "queued"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "3EB05DCE1D4036FCE241C6",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "event",
                    "text": "Reunião de apresentação",
                    "description": "Demonstração do produto",
                    "start_at": "2026-10-17T15:00:00.000Z",
                    "location": {
                      "name": "Escritório",
                      "address": "Av. Paulista, 1000"
                    },
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered`, `read` e `played` (áudio e voz), um evento por mudança; `failed` se o envio falhar",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "3EB05DCE1D4036FCE241C6"
                    }
                  ]
                }
              }
            }
          ],
          "x-replies": [
            {
              "event": "message.received",
              "note": "o contato respondeu **Vou** ao convite (`going`; também `not_going` e `maybe`). `event.id` é o convite",
              "example": {
                "id": "evt_01JAB3M2K8P4R6T8V0X2Z4B6D8",
                "type": "message.received",
                "created_at": "2026-10-17T12:03:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_web"
                },
                "data": {
                  "message": {
                    "id": "AC1FACA14F3FA7A19DB5FB19D7035506",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511999999999@s.whatsapp.net",
                      "phone": "5511999999999",
                      "lid": "123456789012345@lid",
                      "name": "Maria Souza"
                    },
                    "direction": "in",
                    "sent_at": "2026-10-17T12:03:00.000Z",
                    "category": "conversation",
                    "type": "event_response",
                    "event": {
                      "id": "3EB05DCE1D4036FCE241C6"
                    },
                    "response": "going"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "lid": "123456789012345@lid",
                    "type": "direct"
                  }
                }
              }
            }
          ],
          "x-uazapi": {
            "route": "POST /send/event",
            "note": "Na uazapi as datas iam em segundos Unix (`startTime`, `endTime`); na Orkesio, em ISO. Com `join_link`, o evento vira chamada agendada (o `isScheduleCall` da uazapi).",
            "request": {
              "number": "5511999999999",
              "name": "Reunião de apresentação",
              "description": "Demonstração do produto",
              "startTime": 1792249200,
              "endTime": 1792252800,
              "location": {
                "name": "Escritório",
                "address": "Av. Paulista, 1000"
              },
              "hasReminder": true,
              "reminderOffsetSec": 900
            },
            "response": {
              "id": "5511888888888:3EB05DCE1D4036FCE241C6",
              "messageid": "3EB05DCE1D4036FCE241C6",
              "chatid": "5511999999999@s.whatsapp.net",
              "chatlid": "123456789012345@lid",
              "fromMe": true,
              "isGroup": false,
              "groupName": "",
              "sender": "987654321098765@lid",
              "sender_pn": "5511888888888@s.whatsapp.net",
              "sender_lid": "987654321098765@lid",
              "senderName": "",
              "messageType": "EventMessage",
              "mediaType": "",
              "messageTimestamp": 1792238400000,
              "source": "web",
              "status": "",
              "text": "",
              "content": {
                "name": "Reunião de apresentação",
                "description": "Demonstração do produto",
                "startTime": 1792249200,
                "endTime": 1792252800,
                "location": {
                  "name": "Escritório"
                }
              },
              "quoted": "",
              "edited": "",
              "reaction": "",
              "vote": "",
              "buttonOrListid": "",
              "convertOptions": "",
              "pinned": false,
              "owner": "5511888888888",
              "wasSentByApi": true,
              "track_source": "",
              "track_id": "",
              "response": {
                "status": "success",
                "message": "Message sent successfully"
              }
            }
          }
        },
        "template": {
          "summary": "Modelo (API oficial)",
          "description": "Modelo aprovado na Meta: é o jeito de iniciar conversa ou de falar depois de 24 h sem resposta na API oficial.\n\n- `name`: o nome do modelo, como aprovado na Meta.\n- `language`: o idioma do modelo (`pt_BR`).\n- `components`: os parâmetros do modelo, no formato da Meta.\n\nSó na API oficial (`whatsapp_cloud`). O envio é na hora (a API oficial não tem fila): a resposta volta depois que a Meta aceita, com o `wamid` como `id` e `status: pending`, ou com o erro. A mensagem traz em `text` o modelo montado com os parâmetros, como o contato vê; se a api não conseguir ler o modelo na Meta, vai o nome dele.",
          "value": {
            "to": "5511999999999",
            "type": "template",
            "name": "pedido_enviado",
            "language": "pt_BR",
            "components": [
              {
                "type": "body",
                "parameters": [
                  {
                    "type": "text",
                    "text": "42"
                  }
                ]
              }
            ]
          },
          "x-page": "envio-modelo",
          "x-response": {
            "id": "wamid.HBgNNTUxMTk5OTk5OTk5OVUCABEYEjQ4QjE2RjJBMEE5QjE2RjJBAA==",
            "chat_id": "5511999999999@s.whatsapp.net",
            "author": {
              "id": "5511888888888@s.whatsapp.net",
              "phone": "5511888888888"
            },
            "direction": "out",
            "sent_at": "2026-10-17T12:00:00.000Z",
            "category": "conversation",
            "type": "template",
            "text": "Seu pedido 42 foi enviado.",
            "sent_by": "api",
            "status": "pending"
          },
          "x-events": [
            {
              "event": "message.sent",
              "note": "quando a mensagem sai",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
                "type": "message.sent",
                "created_at": "2026-10-17T12:00:00.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_cloud"
                },
                "data": {
                  "message": {
                    "id": "wamid.HBgNNTUxMTk5OTk5OTk5OVUCABEYEjQ4QjE2RjJBMEE5QjE2RjJBAA==",
                    "chat_id": "5511999999999@s.whatsapp.net",
                    "author": {
                      "id": "5511888888888@s.whatsapp.net",
                      "phone": "5511888888888"
                    },
                    "direction": "out",
                    "sent_at": "2026-10-17T12:00:00.000Z",
                    "category": "conversation",
                    "type": "template",
                    "text": "Seu pedido 42 foi enviado.",
                    "sent_by": "api"
                  },
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "type": "direct"
                  }
                }
              }
            },
            {
              "event": "message.status",
              "note": "`sent`, `delivered` e `read`, um evento por mudança",
              "example": {
                "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD6J",
                "type": "message.status",
                "created_at": "2026-10-17T12:00:05.000Z",
                "inbox": {
                  "id": "r0269625d29bfbd",
                  "name": "loja",
                  "phone": "5511888888888",
                  "channel": "whatsapp_cloud"
                },
                "data": {
                  "chat": {
                    "id": "5511999999999@s.whatsapp.net",
                    "type": "direct"
                  },
                  "status": "delivered",
                  "at": "2026-10-17T12:00:05.000Z",
                  "messages": [
                    {
                      "id": "wamid.HBgNNTUxMTk5OTk5OTk5OVUCABEYEjQ4QjE2RjJBMEE5QjE2RjJBAA=="
                    }
                  ]
                }
              }
            }
          ]
        },
        "grupo": {
          "summary": "Grupo com menção, na fila",
          "value": {
            "to": "120363028782550019@g.us",
            "type": "text",
            "text": "@5511999999999 seu pedido chegou",
            "mentions": [
              "5511999999999"
            ],
            "options": {
              "async": true,
              "delay_ms": 1500
            }
          }
        }
      }
    }
  }
}
```

## Respostas

```json
{
  "200": {
    "description": "A mensagem aceita: `status: queued` quando entrou na fila, `pending` quando o envio foi na hora. No Messenger e no Instagram, se a mídia sair e a legenda (que vai logo depois, como texto) não, a resposta vem com `warning` (`partial_send`): não reenvie a mídia, mande a legenda como texto.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioMessage"
        },
        "example": {
          "id": "3EB05DCE1D4036FCE241C6",
          "chat_id": "5511999999999@s.whatsapp.net",
          "author": {
            "id": "5511888888888@s.whatsapp.net",
            "name": "Loja"
          },
          "direction": "out",
          "sent_by": "api",
          "sent_at": "2026-10-17T12:00:00.000Z",
          "category": "unsent",
          "type": "text",
          "text": "Seu pedido saiu para entrega.",
          "track_source": "crm",
          "track_id": "42",
          "status": "queued"
        }
      }
    }
  },
  "400": {
    "description": "Pedido inválido (`invalid_request`), fora da janela de 24 horas (`outside_window`: no WhatsApp oficial, mande um modelo; no Messenger e no Instagram, espere o contato ou use `human_agent`), `human_agent` sem a permissão no app (`human_agent_not_allowed`) ou contato que não pode receber: bloqueou a conta (ou o bot, no Telegram) ou nunca falou com ela (`recipient_unavailable`). O `message` diz o campo ou o motivo.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "invalid_request",
          "message": "url ou base64 é obrigatório para image."
        }
      }
    }
  },
  "401": {
    "description": "Token inválido ou ausente.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "unauthorized",
          "message": "Token inválido."
        }
      }
    }
  },
  "403": {
    "description": "O WhatsApp recusou a conversa nova: a conta está restrita (`account_restricted`) ou atingiu a cota de conversas novas (`new_chat_limit`). Repetir não adianta; até quando dura, em `GET /inbox/limits`. Mandar para quem já conversa com a conta continua valendo. Com `options.async` (o padrão), a recusa chega em `message.failed` com o mesmo código. Na API oficial, `payment_required`: a Meta recusou por um problema no pagamento da conta (erro 131042); acerte a forma de pagamento no gerenciador da Meta. Também chega em `message.failed`, quando a Meta avisa depois.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "account_restricted",
          "message": "O WhatsApp restringiu esta conta de iniciar novas conversas; veja GET /inbox/limits."
        }
      }
    }
  },
  "409": {
    "description": "Messenger e Instagram: a conversa está com outro app ou com a caixa de entrada da Meta (`conversation_taken`), depois que um atendente respondeu por lá. A mensagem do contato chega mesmo assim; responda pela caixa da Meta ou espere a conversa voltar.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "conversation_taken",
          "message": "meta: (#10) Another app is controlling this thread now."
        }
      }
    }
  },
  "429": {
    "description": "Limite de envios atingido (`rate_limited`), da Orkesio ou do canal (a Meta limita por número e por Página). Espere e tente de novo.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "rate_limited",
          "message": "Muitas requisições."
        }
      }
    }
  },
  "500": {
    "description": "O envio falhou (`send_failed`); o motivo vem em `message`.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "send_failed",
          "message": "O WhatsApp recusou o envio."
        }
      }
    }
  },
  "501": {
    "description": "O canal da inbox não tem este tipo de mensagem ou esta opção (`unsupported_for_channel`; enquete na API oficial, por exemplo). O `message` diz o quê.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "unsupported_for_channel",
          "message": "poll não está disponível neste canal."
        }
      }
    }
  },
  "503": {
    "description": "Inbox desconectada (`disconnected`): no WhatsApp Web, sem conexão; nos canais oficiais, o token venceu ou foi revogado. Conecte a inbox de novo.",
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/OrkesioError"
        },
        "example": {
          "error": "disconnected",
          "message": "WhatsApp disconnected"
        }
      }
    }
  }
}
```

**Estado:** Disponível

## Compatibilidade de canais

| Canal | Compatível | Observação |
|---|---|---|
| WhatsApp (Web) | Sim | Todos os tipos, menos `template`. Fila por padrão. Com `to` numa pessoa e `reply_to` numa mensagem de grupo, responde em particular. |
| WhatsApp (API oficial) | Em parte | Envia sempre na hora, sem fila: a resposta volta `pending` com o `wamid` como `id`, ou o erro (`rate_limited` quando a Meta limita; o envio pode ser repetido). Não tem enquete, carrossel, cobrança, evento, pedido de localização nem botões de copiar e ligar (respondem `unsupported_for_channel`). `template` só existe aqui. |
| Instagram | Em parte | Envia na hora: texto, mídia (imagem, vídeo, áudio e arquivo, por URL ou base64, e em base64 só imagem, vídeo, áudio e PDF; a legenda vai logo depois, como texto) e botões (até 13 respostas rápidas, ou até 3 com link). Fora da janela de 24 horas, `outside_window`; com `options.human_agent`, até 7 dias. Localização, contato, enquete, modelo e os outros tipos respondem `unsupported_for_channel`. Num post (`to` com `@instagram_post` ou `@facebook_post`): só `text`, publicado como comentário; com `reply_to`, responde ao comentário. Sem janela de 24 horas. Com `to` na pessoa e `reply_to` num comentário, manda a resposta privada (uma por comentário, até 7 dias, sem a janela de 24 horas; anexo responde `invalid_request`). |
| Messenger | Em parte | Envia na hora: texto, mídia (imagem, vídeo, áudio e arquivo, por URL ou base64; a legenda vai logo depois, como texto) e botões (até 13 respostas rápidas, ou até 3 com link). Fora da janela de 24 horas, `outside_window`; com `options.human_agent`, até 7 dias. Localização, contato, enquete, modelo e os outros tipos respondem `unsupported_for_channel`. Num post (`to` com `@instagram_post` ou `@facebook_post`): só `text`, publicado como comentário; com `reply_to`, responde ao comentário. Sem janela de 24 horas. Com `to` na pessoa e `reply_to` num comentário, manda a resposta privada (uma por comentário, até 7 dias, sem a janela de 24 horas; anexo responde `invalid_request`). |
| Telegram | Em parte | Envia na hora: texto (até 4096 caracteres), mídia (imagem, vídeo, áudio, voz, arquivo e figurinha; legenda junto, até 1024 caracteres, só em imagem, vídeo e arquivo; por URL até 5 MB a imagem e 20 MB o resto, e arquivo por URL só PDF e ZIP; em base64 até 10 MB e 50 MB), botões (respostas e links; a lista vira um botão por item), localização e contato. A formatação do WhatsApp no texto e na legenda (`*negrito*`, `_itálico_`, `~riscado~`, `` `código` `` e bloco com ```) sai formatada no Telegram; o resto do texto vai como veio. O bot não começa conversa: o contato precisa ter falado antes (senão, `recipient_unavailable`). Na conversa com o bot não há janela de 24 horas. No Telegram Business, a resposta sai pela sua conta, com o rótulo do bot. Enquete, modelo, botões de ligar e copiar e os outros tipos respondem `unsupported_for_channel`; mídia no cabeçalho dos botões responde `invalid_request`. |

## Eventos que esta rota gera

O que chega no seu webhook (ou em `GET /events`) depois desta rota.

### [`message.sent`](/webhook/message.sent): a mensagem que saiu

```json
{
  "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
  "type": "message.sent",
  "created_at": "2026-10-17T12:00:00.000Z",
  "inbox": {
    "id": "r0269625d29bfbd",
    "name": "loja",
    "phone": "5511888888888",
    "channel": "whatsapp_web"
  },
  "data": {
    "message": {
      "id": "3EB05DCE1D4036FCE241C6",
      "chat_id": "5511999999999@s.whatsapp.net",
      "author": {
        "id": "5511888888888@s.whatsapp.net",
        "name": "Loja"
      },
      "direction": "out",
      "sent_by": "api",
      "sent_at": "2026-10-17T12:00:00.000Z",
      "category": "conversation",
      "type": "text",
      "text": "Seu pedido saiu para entrega.",
      "track_source": "crm",
      "track_id": "42"
    },
    "chat": {
      "id": "5511999999999@s.whatsapp.net",
      "lid": "123456789012345@lid",
      "type": "direct"
    }
  }
}
```

### [`message.status`](/webhook/message.status): `sent`, `delivered`, `read` ou `failed`

```json
{
  "id": "evt_01JAB3K9ZQ7V0M4T8R2X6WYD5H",
  "type": "message.status",
  "created_at": "2026-10-17T12:00:00.000Z",
  "inbox": {
    "id": "r0269625d29bfbd",
    "name": "loja",
    "phone": "5511888888888",
    "channel": "whatsapp_web"
  },
  "data": {
    "chat": {
      "id": "5511999999999@s.whatsapp.net",
      "lid": "123456789012345@lid",
      "type": "direct"
    },
    "status": "delivered",
    "at": "2026-10-17T12:00:00.000Z",
    "messages": [
      {
        "id": "3EB05DCE1D4036FCE241C6"
      },
      {
        "id": "3EB0A7F2C91D"
      }
    ]
  }
}
```

### [`message.failed`](/webhook/message.failed): só se o envio falhar

```json
{
  "id": "evt_01JAB3M7Q2W8R4T6V9X0YZ1K2C",
  "type": "message.failed",
  "created_at": "2026-10-17T12:00:00.000Z",
  "inbox": {
    "id": "r0269625d29bfbd",
    "name": "loja",
    "phone": "5511888888888",
    "channel": "whatsapp_web"
  },
  "data": {
    "message": {
      "id": "3EB05DCE1D4036FCE241C6",
      "chat_id": "5511999999999@s.whatsapp.net",
      "author": {
        "id": "5511888888888@s.whatsapp.net",
        "name": "Loja"
      },
      "direction": "out",
      "sent_by": "api",
      "sent_at": "2026-10-17T12:00:00.000Z",
      "category": "unsent",
      "type": "text",
      "text": "Seu pedido saiu para entrega.",
      "track_source": "crm",
      "track_id": "42",
      "status": "failed",
      "error": {
        "error": "send_failed",
        "message": "O número não tem WhatsApp."
      }
    },
    "chat": {
      "id": "5511999999999@s.whatsapp.net",
      "lid": "123456789012345@lid",
      "type": "direct"
    }
  }
}
```

## Antes e depois (uazapi → Orkesio)

Na uazapi: `POST /send/text`, `POST /send/media`, `POST /send/location`, `POST /send/contact`, `POST /send/menu`, `POST /send/carousel`, `POST /send/location-button`, `POST /send/pix-button`, `POST /send/request-payment`, `POST /send/event`.

- Uma rota para todos os tipos: `type` diz o tipo, e os campos dele vão soltos no corpo, como na uazapi (`text`, `latitude`, `choices`), igual à mensagem recebida.
- Destino em `to` (antes `number`): número, JID, LID, grupo, canal ou, na oficial, BSUID.
- No WhatsApp Web, fila por padrão: a resposta volta na hora com `status: queued`. Antes era síncrono, e a fila era `async: true`. Na API oficial continua síncrono.
- A resposta é a própria mensagem (`OrkesioMessage`), igual à da busca e do webhook. Antes era um objeto próprio do envio.
- Campos em `snake_case`; as opções do envio agrupadas em `options` (`options.delay_ms`, `options.read_chat`); `reply_to`; `mentions` como lista; `track_source` e `track_id` iguais.
- Erros em `{error, message}` com código estável (`invalid_request`, `unsupported_for_channel`, `disconnected`, `rate_limited`, `send_failed`).
- Modelo (`type: template`) só na API oficial, que é só da Orkesio.
- Flow da Meta (`type: flow`): antes o `/send/flow`, fora da doc da uazapi. `flow_cta` vira `button_text`; o cabeçalho vai na primeira linha do `text`, como nos botões e na lista.

### Texto

**uazapi, pedido:**

```json
{
  "number": "5511999999999",
  "text": "Seu pedido saiu para entrega.",
  "track_source": "crm",
  "track_id": "42"
}
```

**uazapi, resposta:**

```json
{
  "id": "5511888888888:3EB05DCE1D4036FCE241C6",
  "messageid": "3EB05DCE1D4036FCE241C6",
  "chatid": "5511999999999@s.whatsapp.net",
  "fromMe": true,
  "messageType": "text",
  "text": "Seu pedido saiu para entrega.",
  "messageTimestamp": 1792238400000,
  "status": "Pending",
  "track_source": "crm",
  "track_id": "42"
}
```

**Orkesio, pedido:**

```json
{
  "to": "5511999999999",
  "type": "text",
  "text": "Seu pedido saiu para entrega.",
  "track_source": "crm",
  "track_id": "42"
}
```

**Orkesio, resposta:**

```json
{
  "id": "3EB05DCE1D4036FCE241C6",
  "chat_id": "5511999999999@s.whatsapp.net",
  "author": {
    "id": "5511888888888@s.whatsapp.net",
    "name": "Loja"
  },
  "direction": "out",
  "sent_by": "api",
  "sent_at": "2026-10-17T12:00:00.000Z",
  "category": "unsent",
  "type": "text",
  "text": "Seu pedido saiu para entrega.",
  "track_source": "crm",
  "track_id": "42",
  "status": "queued"
}
```

## #/components/schemas/OrkesioSendRequest

```json
{
  "type": "object",
  "properties": {
    "to": {
      "type": "string",
      "description": "Para quem vai (obrigatório, menos em `poll_vote` e `interactive_reply`, que vão para a conversa da mensagem respondida): o número (só dígitos, com DDI) ou o id do WhatsApp: contato (`<número>@s.whatsapp.net`), LID (`<id>@lid`), grupo (`<id>@g.us`), canal (`<id>@newsletter`) ou, na API oficial, `<BSUID>@bsuid`. Em outros canais, o identificador deles (como `@username`). Na resposta, a conversa vem em `chat_id`. No Instagram e no Messenger, o post (`<id>@instagram_post`, `<id>@facebook_post`) publica um comentário."
    },
    "type": {
      "type": "string",
      "enum": [
        "text",
        "image",
        "video",
        "video_note",
        "audio",
        "voice",
        "document",
        "sticker",
        "location",
        "contacts",
        "poll",
        "poll_vote",
        "buttons",
        "list",
        "carousel",
        "location_request",
        "flow",
        "interactive_reply",
        "payment",
        "event",
        "template"
      ],
      "description": "Tipo da mensagem. Os campos dele vão soltos, ao lado de `to`, no formato deste tipo, igual na mensagem recebida."
    },
    "reply_to": {
      "type": "string",
      "description": "Mensagem a responder: o `id` dela. Num post, o comentário a responder em público. Numa mensagem de outra conversa (de grupo ou status no WhatsApp, um comentário no Instagram e no Messenger), com `to` na pessoa: responde em particular."
    },
    "mentions": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "Número ou id do participante."
      },
      "description": "Quem mencionar (grupos). Todo `@número` escrito no `text` (texto, legenda de mídia, enquete, botões, lista e carrossel) já vira menção, e `@todos` ou `@all` menciona todos. Em grupo que usa LID, a menção e o `@número` do texto saem com o LID do participante, como o WhatsApp faz. Evento, localização e contato não leem o texto."
    },
    "mention_all": {
      "type": "boolean",
      "description": "Menciona todos do grupo, sem aparecer no texto."
    },
    "forwarded": {
      "type": "boolean",
      "description": "Mostra como encaminhada. Vale para texto, mídia, localização, contato e carrossel; nos outros tipos responde 400."
    },
    "track_source": {
      "type": "string",
      "description": "**Seu** rastreamento: nome do seu sistema ou da origem do envio (ex.: `crm`). Volta igual na resposta, no `message.sent`, nos status e na busca (filtro `track_source`). Na API oficial vai também à Meta."
    },
    "track_id": {
      "type": "string",
      "description": "Seu id para este envio (ex.: o id do pedido no seu sistema). Filtra a busca em `track_id`."
    },
    "options": {
      "type": "object",
      "properties": {
        "delay_ms": {
          "type": "integer",
          "description": "Espera, em milissegundos, antes de enviar, mostrando \"digitando...\" (ou \"gravando...\" em voz). Na API oficial é ignorado."
        },
        "async": {
          "type": "boolean",
          "description": "Fila (`true`) ou envio na hora (`false`). **WhatsApp Web: padrão `true`**: a mensagem entra na fila da inbox, que espaça os envios para proteger o número, e a resposta volta na hora com `status: queued`; o resultado chega em `message.status` (a falha também em `message.failed`). Com o intervalo padrão da inbox (1 a 3 s), a fila desta rota não espera entre um envio e outro: as mensagens saem uma por vez, na ordem; intervalo configurado na inbox vale como sempre. Use a fila (padrão) em automação e volume, quando a resposta não precisa do resultado; use `false` quando o seu fluxo depende do resultado na resposta (número sem WhatsApp, falha no envio). **API oficial: sempre na hora** (sem fila; `true` é ignorado): responde `pending` com o `wamid` como `id`, ou o erro (janela de 24 horas, modelo reprovado)."
        },
        "read_chat": {
          "type": "boolean",
          "description": "Marca a conversa como lida depois de enviar."
        },
        "read_messages": {
          "type": "boolean",
          "description": "Marca como lidas as mensagens recebidas da conversa."
        },
        "human_agent": {
          "type": "boolean",
          "description": "**Messenger e Instagram.** Resposta de atendente humano: vale até 7 dias depois da última mensagem do contato (tag `HUMAN_AGENT` da Meta), além da janela de 24 horas. Exige a permissão Human Agent no app da Meta; sem ela, `human_agent_not_allowed`. Nos outros canais, `unsupported_for_channel`."
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "type"
  ],
  "description": "Mensagem a enviar. **O mesmo formato da mensagem recebida:** `type` diz o tipo e os campos dele (`text`, `url`, `latitude`, `choices`...) vão soltos, ao lado de `to`. Os campos só de leitura da mensagem recebida (`display_text`, `size`, `sha256`, `width`, `height`...) não vão no envio; campo que o tipo não tem responde 400.",
  "oneOf": [
    {
      "properties": {
        "type": {
          "const": "text"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentText"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "image"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentImage"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "video"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentVideo"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "video_note"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentVideoNote"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "audio"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentAudio"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "voice"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentVoice"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "document"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentDocument"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "sticker"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentSticker"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "location"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentLocation"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "contacts"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentContacts"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "poll"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentPoll"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "poll_vote"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentPollVote"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "buttons"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentButtons"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "list"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentList"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "carousel"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentCarousel"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "location_request"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentLocationRequest"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "flow"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentFlow"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "interactive_reply"
        },
        "reply_to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentInteractiveReply"
        }
      ],
      "required": [
        "reply_to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "payment"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentPayment"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "event"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentEvent"
        }
      ],
      "required": [
        "to"
      ]
    },
    {
      "properties": {
        "type": {
          "const": "template"
        },
        "to": {
          "type": "string"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/SendContentTemplate"
        }
      ],
      "required": [
        "to"
      ]
    }
  ],
  "unevaluatedProperties": false
}
```

## #/components/schemas/SendContentText

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O texto da mensagem (com a formatação do WhatsApp). Vai como está: um `>1` respondendo a uma enquete é texto (o voto é `type: poll_vote`; a resposta a botões, `interactive_reply`)."
    },
    "link_preview": {
      "oneOf": [
        {
          "type": "boolean",
          "description": "`true`: prévia automática do primeiro link (o mesmo que omitir). `false`: sem prévia."
        },
        {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "description": "Título da prévia."
            },
            "description": {
              "type": "string",
              "description": "Texto de descrição da prévia."
            },
            "image_url": {
              "type": "string",
              "description": "Link da imagem da prévia."
            },
            "large": {
              "type": "boolean",
              "description": "Mostra a imagem grande, em vez da miniatura."
            }
          },
          "additionalProperties": false
        }
      ],
      "description": "Prévia do link. Sem o campo, a api monta a prévia do primeiro link do texto; `false` desliga; um objeto define os dados da prévia."
    }
  },
  "required": [
    "text"
  ],
  "title": "texto"
}
```

## #/components/schemas/SendContentImage

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Link público do arquivo. Use `url` ou `base64`."
    },
    "base64": {
      "type": "string",
      "description": "Arquivo em base64 (com ou sem o prefixo `data:`). Use `url` ou `base64`."
    },
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo. Sem ele, a api descobre pelo conteúdo."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64 (vídeo e documento). Sem ela, a api gera quando consegue."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única (foto, vídeo e voz). Só no WhatsApp Web: nos outros canais, `unsupported_for_channel`."
    }
  },
  "title": "imagem"
}
```

## #/components/schemas/SendContentVideo

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Link público do arquivo. Use `url` ou `base64`."
    },
    "base64": {
      "type": "string",
      "description": "Arquivo em base64 (com ou sem o prefixo `data:`). Use `url` ou `base64`."
    },
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo. Sem ele, a api descobre pelo conteúdo."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64 (vídeo e documento). Sem ela, a api gera quando consegue."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única (foto, vídeo e voz). Só no WhatsApp Web: nos outros canais, `unsupported_for_channel`."
    },
    "animated": {
      "type": "boolean",
      "description": "Envia como GIF: o vídeo toca em loop e sem som, como os GIFs do WhatsApp (mande um MP4). Só no WhatsApp Web: nos outros canais, `unsupported_for_channel`. Só vale em `type: video`."
    }
  },
  "title": "vídeo"
}
```

## #/components/schemas/SendContentVideoNote

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Link público do arquivo. Use `url` ou `base64`."
    },
    "base64": {
      "type": "string",
      "description": "Arquivo em base64 (com ou sem o prefixo `data:`). Use `url` ou `base64`."
    },
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo. Sem ele, a api descobre pelo conteúdo."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64 (vídeo e documento). Sem ela, a api gera quando consegue."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única (foto, vídeo e voz). Só no WhatsApp Web: nos outros canais, `unsupported_for_channel`."
    }
  },
  "title": "vídeo redondo"
}
```

## #/components/schemas/SendContentAudio

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Link público do arquivo. Use `url` ou `base64`."
    },
    "base64": {
      "type": "string",
      "description": "Arquivo em base64 (com ou sem o prefixo `data:`). Use `url` ou `base64`."
    },
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo. Sem ele, a api descobre pelo conteúdo."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64 (vídeo e documento). Sem ela, a api gera quando consegue."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única (foto, vídeo e voz). Só no WhatsApp Web: nos outros canais, `unsupported_for_channel`."
    }
  },
  "title": "áudio"
}
```

## #/components/schemas/SendContentVoice

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Link público do arquivo. Use `url` ou `base64`."
    },
    "base64": {
      "type": "string",
      "description": "Arquivo em base64 (com ou sem o prefixo `data:`). Use `url` ou `base64`."
    },
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo. Sem ele, a api descobre pelo conteúdo."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64 (vídeo e documento). Sem ela, a api gera quando consegue."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única (foto, vídeo e voz). Só no WhatsApp Web: nos outros canais, `unsupported_for_channel`."
    }
  },
  "title": "voz"
}
```

## #/components/schemas/SendContentDocument

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Link público do arquivo. Use `url` ou `base64`."
    },
    "base64": {
      "type": "string",
      "description": "Arquivo em base64 (com ou sem o prefixo `data:`). Use `url` ou `base64`."
    },
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo. Sem ele, a api descobre pelo conteúdo."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64 (vídeo e documento). Sem ela, a api gera quando consegue."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única (foto, vídeo e voz). Só no WhatsApp Web: nos outros canais, `unsupported_for_channel`."
    }
  },
  "title": "documento"
}
```

## #/components/schemas/SendContentSticker

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Link público do arquivo. Use `url` ou `base64`."
    },
    "base64": {
      "type": "string",
      "description": "Arquivo em base64 (com ou sem o prefixo `data:`). Use `url` ou `base64`."
    },
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo. Sem ele, a api descobre pelo conteúdo."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64 (vídeo e documento). Sem ela, a api gera quando consegue."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única (foto, vídeo e voz). Só no WhatsApp Web: nos outros canais, `unsupported_for_channel`."
    }
  },
  "title": "figurinha"
}
```

## #/components/schemas/SendContentLocation

```json
{
  "type": "object",
  "properties": {
    "latitude": {
      "type": "number",
      "description": "Latitude."
    },
    "longitude": {
      "type": "number",
      "description": "Longitude."
    },
    "name": {
      "type": "string",
      "description": "O nome do lugar."
    },
    "address": {
      "type": "string",
      "description": "Endereço."
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "localização"
}
```

## #/components/schemas/SendContentContacts

```json
{
  "type": "object",
  "required": [
    "contacts"
  ],
  "properties": {
    "contacts": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Nome exibido."
          },
          "phones": {
            "type": "array",
            "items": {
              "anyOf": [
                {
                  "type": "string",
                  "description": "Número com DDI."
                },
                {
                  "type": "object",
                  "additionalProperties": false,
                  "required": [
                    "number"
                  ],
                  "properties": {
                    "number": {
                      "type": "string",
                      "description": "Número com DDI."
                    },
                    "wa_id": {
                      "type": "string",
                      "description": "Ignorado no envio (vem na mensagem recebida)."
                    }
                  }
                }
              ]
            },
            "description": "Telefones: o número com DDI, ou o objeto da mensagem recebida (`{\"number\": \"...\"}`), para reenviar como veio."
          },
          "email": {
            "type": "string",
            "description": "E-mail."
          },
          "organization": {
            "type": "string",
            "description": "Empresa."
          },
          "url": {
            "type": "string",
            "description": "Site."
          }
        },
        "required": [
          "name",
          "phones"
        ],
        "additionalProperties": false
      },
      "description": "Contato a compartilhar. Por enquanto vai um por mensagem: a lista precisa ter exatamente um item (com mais, responde 400).",
      "minItems": 1,
      "maxItems": 1
    }
  },
  "title": "contatos"
}
```

## #/components/schemas/SendContentPoll

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "A pergunta."
    },
    "choices": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "Opção."
      },
      "description": "Opções."
    },
    "selectable_count": {
      "type": "integer",
      "description": "Quantas opções o contato pode escolher: de `0` (várias) até o número de opções."
    }
  },
  "required": [
    "text",
    "choices"
  ],
  "title": "enquete"
}
```

## #/components/schemas/SendContentPollVote

```json
{
  "type": "object",
  "title": "voto na enquete",
  "description": "Vota numa enquete, como o contato faria no celular; um voto novo troca o anterior. O voto sai **na conversa da enquete**: `to` pode ficar de fora; se vier e não for essa conversa (o mesmo número, id ou LID do contato), 400. Só no WhatsApp Web (na API oficial, `unsupported_for_channel`). Não vale em campanha nem em resposta rápida.",
  "properties": {
    "poll": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "A enquete: o `id` da mensagem."
        }
      },
      "description": "A enquete votada (vai aqui, não em `reply_to`)."
    },
    "choices": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "Nome da opção, como na enquete (sem diferença de maiúsculas)."
      },
      "description": "As opções escolhidas, pelos nomes. Vazio (`[]`) tira o voto. Opção que a enquete não tem, ou mais do que `selectable_count`, responde 400."
    }
  },
  "required": [
    "poll",
    "choices"
  ],
  "example": {
    "poll": {
      "id": "3EB0FB3B7123AFD0E90FB5"
    },
    "options": [
      "Tarde"
    ]
  }
}
```

## #/components/schemas/SendContentButtons

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O texto, acima das opções. Quando há texto depois da primeira linha, ela é o cabeçalho (em negrito) e o resto é o corpo. Com uma linha só, ela vai como cabeçalho, sem corpo, também junto da mídia do cabeçalho. Na API oficial, o texto vai inteiro no corpo."
    },
    "footer": {
      "type": "string",
      "description": "Rodapé."
    },
    "url": {
      "type": "string",
      "description": "Mídia do cabeçalho (imagem, vídeo ou documento): link público do arquivo. Use `url` ou `base64`. O tipo sai do arquivo; na API oficial, da extensão do link (imagem quando não há)."
    },
    "base64": {
      "type": "string",
      "description": "Mídia do cabeçalho em base64 (com ou sem o prefixo `data:`). Use `url` ou `base64`."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo do cabeçalho. Sem ele, a api descobre pelo conteúdo."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo do cabeçalho (documentos)."
    },
    "button_text": {
      "type": "string",
      "description": "Texto do botão que abre a lista (só `list`)."
    },
    "choices": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/OrkesioOption"
      },
      "description": "Botões (`buttons`) ou itens (`list`, agrupados por `section`). Sem `id`, a api usa o `title`. `title`, `id` e `value` não aceitam `|` nem quebra de linha; em `list`, `section` e `description` também não aceitam `[` e `]`. Na API oficial, `call` e `copy` respondem `unsupported_for_channel`."
    },
    "legacy": {
      "type": "boolean",
      "description": "Só `buttons`, só WhatsApp Web: envia no formato antigo de botões (`ButtonsMessage`), para quem ainda usa. Só botões de resposta (sem `url`, `call` e `copy`) e sem mídia no cabeçalho; o `text` vai inteiro no corpo, sem cabeçalho. O WhatsApp pode deixar de mostrar esse formato a qualquer momento. Nos outros canais responde `unsupported_for_channel`."
    }
  },
  "required": [],
  "title": "botões"
}
```

## #/components/schemas/OrkesioOption

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id."
    },
    "title": {
      "type": "string",
      "description": "Título."
    },
    "description": {
      "type": "string",
      "description": "Descrição."
    },
    "action": {
      "type": "string",
      "enum": [
        "reply",
        "url",
        "call",
        "copy"
      ],
      "description": "O que o botão faz."
    },
    "value": {
      "type": "string",
      "description": "Link, telefone ou código, conforme `action`."
    },
    "section": {
      "type": "string",
      "description": "Seção (listas)."
    }
  },
  "required": [
    "title"
  ],
  "additionalProperties": false,
  "description": "Opção de menu ou botão."
}
```

## #/components/schemas/SendContentList

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O texto, acima das opções. Quando há texto depois da primeira linha, ela é o cabeçalho (em negrito) e o resto é o corpo. Com uma linha só, ela vai como cabeçalho, sem corpo. Na API oficial, o texto vai inteiro no corpo. A lista não aceita mídia no cabeçalho."
    },
    "footer": {
      "type": "string",
      "description": "Rodapé."
    },
    "button_text": {
      "type": "string",
      "description": "Texto do botão que abre a lista (só `list`)."
    },
    "choices": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/OrkesioOption"
      },
      "description": "Botões (`buttons`) ou itens (`list`, agrupados por `section`). Sem `id`, a api usa o `title`. `title`, `id` e `value` não aceitam `|` nem quebra de linha; em `list`, `section` e `description` também não aceitam `[` e `]`. Na API oficial, `call` e `copy` respondem `unsupported_for_channel`."
    }
  },
  "required": [],
  "title": "lista"
}
```

## #/components/schemas/SendContentCarousel

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O corpo: o texto principal, acima das opções."
    },
    "footer": {
      "type": "string",
      "description": "Rodapé."
    },
    "choices": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/OrkesioOption"
      },
      "description": "Botões (`buttons`) ou itens (`list`, agrupados por `section`). Sem `id`, a api usa o `title`. `title`, `id` e `value` não aceitam `|` nem quebra de linha; em `list`, `section` e `description` também não aceitam `[` e `]`. Na API oficial, `call` e `copy` respondem `unsupported_for_channel`."
    },
    "cards": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "image",
              "video",
              "document"
            ],
            "description": "O tipo da mídia do cartão."
          },
          "url": {
            "type": "string",
            "description": "Link público do arquivo. Use `url` ou `base64`."
          },
          "base64": {
            "type": "string",
            "description": "Arquivo em base64 (com ou sem o prefixo `data:`). Use `url` ou `base64`."
          },
          "mime_type": {
            "type": "string",
            "description": "Tipo do arquivo. Sem ele, a api descobre pelo conteúdo."
          },
          "filename": {
            "type": "string",
            "description": "Nome do arquivo (documentos)."
          },
          "thumbnail": {
            "type": "string",
            "description": "Miniatura JPEG em base64 (vídeo e documento). Sem ela, a api gera quando consegue."
          },
          "view_once": {
            "type": "boolean",
            "description": "Visualização única (foto, vídeo e voz). Só no WhatsApp Web: nos outros canais, `unsupported_for_channel`."
          },
          "text": {
            "type": "string",
            "description": "Texto."
          },
          "choices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrkesioOption"
            },
            "description": "Botões do card. `title`, `id` e `value` não aceitam aspas, `\\` nem quebra de linha."
          }
        },
        "additionalProperties": false
      },
      "description": "Cards (`carousel`): a mídia (`type` e `url` ou `base64`), o `text` e os `choices` de cada cartão."
    }
  },
  "required": [],
  "title": "carrossel"
}
```

## #/components/schemas/SendContentLocationRequest

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O pedido, acima do botão \"Enviar localização\"."
    }
  },
  "required": [
    "text"
  ],
  "title": "pedido de localização"
}
```

## #/components/schemas/SendContentFlow

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O texto, acima do botão. Quando há texto depois da primeira linha, ela é o cabeçalho (em negrito) e o resto é o corpo. Com uma linha só, ela é o corpo."
    },
    "footer": {
      "type": "string",
      "description": "Rodapé."
    },
    "button_text": {
      "type": "string",
      "description": "Texto do botão que abre o Flow."
    },
    "flow_id": {
      "type": "string",
      "description": "Id do Flow na Meta (o Flow publicado no WhatsApp Manager da sua conta)."
    },
    "flow_name": {
      "type": "string",
      "description": "Nome do Flow na Meta (informativo: o Flow é o do `flow_id`)."
    },
    "flow_token": {
      "type": "string",
      "description": "Seu identificador desta conversa no Flow: volta na resposta do contato. Sem ele, a api usa o `flow_id`."
    },
    "flow_action": {
      "type": "string",
      "enum": [
        "navigate",
        "data_exchange"
      ],
      "description": "`navigate` (padrão): o Flow abre na tela de `flow_action_payload.screen`. `data_exchange`: o Flow pede a primeira tela ao seu endpoint de dados."
    },
    "flow_action_payload": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "screen": {
          "type": "string",
          "description": "Tela em que o Flow abre (só `navigate`)."
        },
        "data": {
          "type": "object",
          "additionalProperties": true,
          "description": "Dados iniciais da tela, no formato que o Flow espera."
        }
      },
      "description": "A tela inicial e os dados dela, no formato da Meta."
    },
    "mode": {
      "type": "string",
      "enum": [
        "published",
        "draft"
      ],
      "description": "`published` (padrão) usa o Flow publicado; `draft`, o rascunho, para testar."
    }
  },
  "required": [
    "text",
    "flow_id",
    "button_text"
  ],
  "title": "Flow"
}
```

## #/components/schemas/SendContentInteractiveReply

```json
{
  "type": "object",
  "title": "resposta a botões ou lista",
  "description": "Responde a botões, lista ou carrossel, como o clique do contato. A mensagem com as opções vai em `reply_to` (obrigatório) e a resposta sai **na conversa dela**: `to` pode ficar de fora; se vier e não for essa conversa (o mesmo número, id ou LID do contato), 400. A resposta sai como `interactive_reply`. Opção que a mensagem não tem, ou que não se responde por aqui (botão de link, cópia ou ligação), responde 400. Só no WhatsApp Web (na API oficial, `unsupported_for_channel`). Não vale em campanha nem em resposta rápida.",
  "properties": {
    "option_id": {
      "type": "string",
      "description": "O `id` da opção escolhida (`choices[].id` da mensagem respondida)."
    }
  },
  "required": [
    "option_id"
  ],
  "example": {
    "option_id": "suporte"
  }
}
```

## #/components/schemas/SendContentPayment

```json
{
  "type": "object",
  "properties": {
    "amount": {
      "type": "number",
      "description": "Valor. Sem `amount` e só com `pix`, sai o botão de copiar a chave; nesse caso `title`, `note`, `footer`, `currency` e `reference_id` respondem 400."
    },
    "currency": {
      "type": "string",
      "description": "Moeda (padrão `BRL`)."
    },
    "reference_id": {
      "type": "string",
      "description": "Número do pedido ou da fatura."
    },
    "order_id": {
      "type": "string",
      "description": "Mensagem de pedido (`order`) recebida do contato que esta cobrança atende: o `id` dela."
    },
    "title": {
      "type": "string",
      "description": "Título."
    },
    "text": {
      "type": "string",
      "description": "A nota da cobrança."
    },
    "footer": {
      "type": "string",
      "description": "Rodapé."
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Item."
          },
          "quantity": {
            "type": "number",
            "description": "Quantidade, inteiro a partir de 1."
          },
          "amount": {
            "type": "number",
            "description": "Valor do item. Ainda não é aceito (400): use `payment.amount`."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "description": "Itens da cobrança. Por enquanto, um item por cobrança.",
      "maxItems": 1
    },
    "pix": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "description": "Chave PIX."
        },
        "key_type": {
          "type": "string",
          "enum": [
            "cpf",
            "cnpj",
            "phone",
            "email",
            "evp"
          ],
          "description": "Tipo da chave (padrão `evp`)."
        },
        "merchant_name": {
          "type": "string",
          "description": "Recebedor."
        }
      },
      "required": [
        "key"
      ],
      "additionalProperties": false
    },
    "boleto": {
      "type": "string",
      "description": "Linha digitável do boleto."
    },
    "link": {
      "type": "string",
      "description": "Link de pagamento (só domínios homologados pelo WhatsApp)."
    },
    "invoice": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "description": "Link público do arquivo. Use `url` ou `base64`."
        },
        "base64": {
          "type": "string",
          "description": "Arquivo em base64 (com ou sem o prefixo `data:`). Use `url` ou `base64`."
        },
        "mime_type": {
          "type": "string",
          "description": "Tipo do arquivo. Sem ele, a api descobre pelo conteúdo."
        },
        "filename": {
          "type": "string",
          "description": "Nome do arquivo (documentos)."
        },
        "thumbnail": {
          "type": "string",
          "description": "Miniatura JPEG em base64 (vídeo e documento). Sem ela, a api gera quando consegue."
        },
        "view_once": {
          "type": "boolean",
          "description": "Visualização única (foto, vídeo e voz). Só no WhatsApp Web: nos outros canais, `unsupported_for_channel`."
        }
      },
      "additionalProperties": false,
      "description": "Fatura (PDF): o arquivo, sem legenda."
    }
  },
  "title": "cobrança"
}
```

## #/components/schemas/SendContentEvent

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O nome do evento."
    },
    "description": {
      "type": "string",
      "description": "Descrição."
    },
    "start_at": {
      "type": "string",
      "format": "date-time",
      "description": "Início. ISO 8601 em UTC com milissegundos."
    },
    "end_at": {
      "type": "string",
      "format": "date-time",
      "description": "Fim. ISO 8601 em UTC com milissegundos."
    },
    "location": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Nome do local."
        },
        "address": {
          "type": "string",
          "description": "Endereço."
        },
        "latitude": {
          "type": "number",
          "description": "Latitude."
        },
        "longitude": {
          "type": "number",
          "description": "Longitude."
        }
      },
      "additionalProperties": false
    },
    "join_link": {
      "type": "string",
      "description": "Link da chamada (HTTPS). Com ele, o evento vira chamada agendada."
    },
    "extra_guests_allowed": {
      "type": "boolean",
      "description": "Convidado pode levar acompanhante."
    },
    "reminder_minutes": {
      "type": "integer",
      "description": "Lembrete, em minutos antes do início."
    },
    "canceled": {
      "type": "boolean",
      "description": "Evento cancelado."
    }
  },
  "required": [
    "text",
    "start_at"
  ],
  "title": "evento"
}
```

## #/components/schemas/SendContentTemplate

```json
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Nome do modelo aprovado na Meta."
    },
    "language": {
      "type": "string",
      "description": "Idioma do modelo (`pt_BR`)."
    },
    "components": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "Parâmetros do modelo, no formato da Meta."
    }
  },
  "required": [
    "name",
    "language"
  ],
  "title": "modelo"
}
```

## #/components/schemas/OrkesioMessage

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id da mensagem no canal: no WhatsApp, o id do WhatsApp; na API oficial, o `wamid`; no Instagram e no Messenger, o `mid`; no Telegram, a conversa e o número da mensagem (`<conversa>_<número>`, e `b<conversa>_<número>` no Telegram Business). É único dentro da inbox: a mesma mensagem pode chegar com o mesmo `id` em duas inboxes (um grupo com dois números seus), então guarde pela inbox e pelo `id`. Busca e ações valem para o número atual da inbox."
    },
    "chat_id": {
      "type": "string",
      "description": "Id da conversa (o `id` de `GET /chats/{chat_id}`). Em grupo, o grupo; quem escreveu vem em `author`. No webhook e no `/events`, a conversa vem inteira ao lado da mensagem, em `data.chat`."
    },
    "author": {
      "$ref": "#/components/schemas/OrkesioParticipant"
    },
    "direction": {
      "type": "string",
      "enum": [
        "in",
        "out"
      ],
      "description": "`in`: escrita pelo contato. `out`: escrita pela inbox."
    },
    "sent_by": {
      "type": "string",
      "enum": [
        "api",
        "automation",
        "campaign",
        "phone",
        "web",
        "user"
      ],
      "description": "Só em `out`: quem mandou. `api` (rota de envio), `automation` (IA, fluxo ou resposta rápida, com `automation`), `campaign` (disparo em massa, com `campaign_id`), `phone` (o celular), `web` (outro aparelho conectado, como o WhatsApp Web ou o Desktop) ou `user` (pessoa logada no painel; **em breve**, com o login por usuário, junto do campo `user`)."
    },
    "sent_at": {
      "type": "string",
      "format": "date-time",
      "description": "Quando a mensagem foi enviada. ISO 8601 em UTC com milissegundos."
    },
    "status": {
      "type": "string",
      "enum": [
        "scheduled",
        "queued",
        "pending",
        "sent",
        "delivered",
        "read",
        "played",
        "failed"
      ],
      "description": "Estado atual (busca e resposta do envio). `scheduled` e `queued` são envios que ainda não saíram. As mudanças chegam em `message.status`."
    },
    "error": {
      "$ref": "#/components/schemas/OrkesioError"
    },
    "scheduled_at": {
      "type": "string",
      "format": "date-time",
      "description": "Quando o envio agendado sai (só em `scheduled`). ISO 8601 em UTC com milissegundos."
    },
    "campaign_id": {
      "type": "string",
      "description": "A campanha (`/campaigns`) que enviou ou vai enviar a mensagem: o `id` dela, para acompanhar ou cancelar."
    },
    "deleted": {
      "type": "boolean",
      "description": "Apagada para todos."
    },
    "pinned": {
      "type": "boolean",
      "description": "Fixada na conversa."
    },
    "pinned_until": {
      "type": "string",
      "format": "date-time",
      "description": "Fixada até, quando o prazo é conhecido (fixações a partir desta versão). ISO 8601 em UTC com milissegundos."
    },
    "forwarded_from": {
      "type": "object",
      "properties": {
        "newsletter_id": {
          "type": "string",
          "description": "Canal de origem."
        },
        "name": {
          "type": "string",
          "description": "Nome do canal."
        }
      },
      "additionalProperties": false,
      "description": "**Só WhatsApp.** Encaminhada de uma newsletter do WhatsApp: qual.",
      "x-only": "whatsapp"
    },
    "category": {
      "type": "string",
      "enum": [
        "conversation",
        "call",
        "reaction",
        "event",
        "unsent"
      ],
      "description": "A classe da mensagem, dada pela api (não deduza do `type`): `conversation` (balão da conversa, apagado inclusive), `call` (ligação), `reaction`, `event` (registro que não é balão: edição, voto de enquete, fixar, aviso de grupo e os `system`) ou `unsent` (envio que ainda não chegou ao canal: agendado, na fila, enviando, com falha ou cancelado). Só `conversation` não apagada aceita resposta, reação, edição e fixar. O `kind` de `interactive_reply`, `share` e `system` é outro campo."
    },
    "type": {
      "type": "string",
      "enum": [
        "text",
        "image",
        "video",
        "audio",
        "voice",
        "document",
        "sticker",
        "location",
        "contacts",
        "poll",
        "poll_vote",
        "buttons",
        "list",
        "carousel",
        "location_request",
        "flow",
        "interactive_reply",
        "order",
        "product",
        "payment",
        "group_invite",
        "newsletter_invite",
        "event_response",
        "sticker_pack",
        "video_note",
        "live_location",
        "scheduled_call",
        "album",
        "share",
        "story_mention",
        "event",
        "reaction",
        "call",
        "group_participant",
        "system",
        "unavailable",
        "template",
        "unknown"
      ],
      "description": "Tipo da mensagem: diz quais campos do tipo vêm soltos na mensagem (`text`, `url`, `latitude`, `choices`...)."
    },
    "album_id": {
      "type": "string",
      "description": "O álbum de que esta mídia faz parte: o `id` da mensagem `album`. Várias fotos e vídeos enviados juntos chegam como um álbum mais uma mensagem por mídia, cada uma com este campo."
    },
    "reply_to": {
      "type": "string",
      "description": "A mensagem respondida: o `id` dela. O resumo (quem, tipo, prévia) vem em `quoted`."
    },
    "quoted": {
      "allOf": [
        {
          "$ref": "#/components/schemas/OrkesioMessageRef"
        }
      ],
      "readOnly": true,
      "description": "Resumo da mensagem respondida (`author`, `direction`, `type`, `preview`), para mostrar sem buscar; vem quando a api conhece a citada. Resposta a um story do Instagram: `quoted.story`, sem `reply_to`."
    },
    "reactions": {
      "type": "array",
      "readOnly": true,
      "description": "As reações que a mensagem recebeu, uma linha por emoji (mais reações primeiro): o último emoji de cada pessoa vale. Vem na busca (`GET /messages`), contando as reações de até 7 dias depois da mensagem mais nova da página naquela conversa (numa conversa muito movimentada a conta pode ficar incompleta); os eventos mandam cada reação como uma mensagem `reaction`. Ausente sem reação.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "emoji",
          "count",
          "mine"
        ],
        "properties": {
          "emoji": {
            "type": "string",
            "description": "O emoji."
          },
          "count": {
            "type": "integer",
            "description": "Quantas pessoas reagiram com ele."
          },
          "mine": {
            "type": "boolean",
            "description": "A inbox está entre quem reagiu com este emoji."
          }
        }
      }
    },
    "mentions": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "Número ou LID mencionado."
      },
      "description": "Menções."
    },
    "forwarded": {
      "type": "boolean",
      "description": "Encaminhada."
    },
    "edited": {
      "type": "boolean",
      "description": "Já foi editada (o texto é o da última edição)."
    },
    "device": {
      "type": "string",
      "enum": [
        "android",
        "ios",
        "web",
        "desktop"
      ],
      "description": "**Só WhatsApp.** Aparelho de quem enviou, quando dá para saber (só `whatsapp_web`).",
      "x-only": "whatsapp"
    },
    "referral": {
      "$ref": "#/components/schemas/OrkesioReferral"
    },
    "track_source": {
      "type": "string",
      "description": "**Seu** rastreamento: o `track_source` que você mandou no envio, devolvido aqui para reconhecer a mensagem. Só em mensagem enviada (`direction: out`). Não confundir com `referral`, que vem da Meta."
    },
    "track_id": {
      "type": "string",
      "description": "O `track_id` que você mandou no envio."
    },
    "send_request": {
      "type": "object",
      "additionalProperties": true,
      "description": "Só no `GET /messages`, nas mensagens enviadas pela API nos últimos 7 dias: o pedido do envio como foi guardado (opções, texto antes de trocar os placeholders), sem o base64 dos arquivos."
    },
    "automation": {
      "type": "object",
      "properties": {
        "agent_id": {
          "type": "string",
          "description": "Agente de IA que respondeu."
        },
        "flow_id": {
          "type": "string",
          "description": "Fluxo que enviou."
        },
        "turn": {
          "type": "string",
          "description": "Só no `GET /messages`, nas mensagens que a IA mandou: o `id` da mensagem do contato que a rodada respondeu, onde fica o registro completo."
        },
        "outcome": {
          "type": "object",
          "additionalProperties": false,
          "description": "Só no `GET /messages`, na mensagem do contato que a IA respondeu: o que a rodada da IA fez.",
          "properties": {
            "status": {
              "type": "string",
              "enum": [
                "sent",
                "cancelled",
                "error",
                "empty"
              ],
              "description": "`sent` (enviou algo), `cancelled` (descartada: a conversa pausou ou um fluxo começou), `error` (o provedor falhou) ou `empty` (nada a enviar)."
            },
            "texts": {
              "type": "integer",
              "description": "Textos enviados."
            },
            "audio": {
              "type": "boolean",
              "description": "Respondeu em áudio."
            },
            "menus": {
              "type": "integer",
              "description": "Menus enviados."
            },
            "files": {
              "type": "integer",
              "description": "Arquivos enviados."
            },
            "handoff": {
              "type": "string",
              "description": "O resumo, quando chamou um humano."
            },
            "lead": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "O que gravou no lead (`lead_email = ana@x.com`)."
            },
            "detail": {
              "type": "string",
              "description": "Por que cancelou, ou o erro."
            }
          }
        },
        "request": {
          "description": "Só no `GET /messages`, na mensagem do contato que a IA respondeu: o pedido mandado ao provedor da IA, como foi gravado."
        },
        "response": {
          "description": "Só no `GET /messages`, na mensagem do contato que a IA respondeu: a resposta do provedor da IA, como foi gravada."
        }
      },
      "additionalProperties": false,
      "description": "Qual automação mandou (`sent_by: automation`): `agent_id` é o agente de IA; `flow_id`, o fluxo. Também na mensagem do contato que a IA respondeu, com o `agent_id`. No `GET /messages` vem a rodada da IA: nas mensagens que a IA mandou, `turn`; na mensagem do contato, o registro completo (`outcome`, `request`, `response`)."
    },
    "warning": {
      "type": "object",
      "description": "Só na resposta do `POST /messages`, quando parte do envio falhou (`partial_send`, Messenger e Instagram). A mensagem saiu.",
      "properties": {
        "error": {
          "type": "string",
          "example": "partial_send"
        },
        "message": {
          "type": "string",
          "example": "A mídia foi enviada, mas a legenda não (meta: (#100) ...). Mande a legenda como texto."
        }
      },
      "required": [
        "error",
        "message"
      ]
    },
    "display_text": {
      "type": "string",
      "readOnly": true,
      "description": "Tudo o que aparece na tela num texto só, com a formatação do WhatsApp (`*negrito*`, `_itálico_`): cabeçalho, texto, rodapé, opções. Montado pela api para n8n, IA e CRM; não existe no envio."
    }
  },
  "required": [
    "id",
    "chat_id",
    "author",
    "direction",
    "sent_at",
    "type"
  ],
  "description": "Mensagem. Os campos do tipo (`text`, `url`, `latitude`, `choices`...) ficam soltos, ao lado dos campos da mensagem; `type` diz quais valem. Campos vazios ficam fora do JSON.",
  "oneOf": [
    {
      "properties": {
        "type": {
          "const": "template"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentTemplate"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "text"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentText"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "image"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentImage"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "video"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentVideo"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "audio"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentAudio"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "voice"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentVoice"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "document"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentDocument"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "sticker"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentSticker"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "location"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentLocation"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "contacts"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentContacts"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "poll"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentPoll"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "poll_vote"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentPollVote"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "buttons"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentButtons"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "list"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentList"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "carousel"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentCarousel"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "location_request"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentLocationRequest"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "flow"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentFlow"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "interactive_reply"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentInteractiveReply"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "order"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentOrder"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "product"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentProduct"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "payment"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentPayment"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "group_invite"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentGroupInvite"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "newsletter_invite"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentNewsletterInvite"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "event_response"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentEventResponse"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "sticker_pack"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentStickerPack"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "video_note"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentVideoNote"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "live_location"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentLiveLocation"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "scheduled_call"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentScheduledCall"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "album"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentAlbum"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "share"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentShare"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "story_mention"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentStoryMention"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "event"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentEvent"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "reaction"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentReaction"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "call"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentCall"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "group_participant"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentGroupParticipant"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "system"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentSystem"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "const": "unavailable"
        }
      },
      "allOf": [
        {
          "$ref": "#/components/schemas/MessageContentUnavailable"
        }
      ]
    },
    {
      "properties": {
        "type": {
          "enum": [
            "unknown"
          ]
        }
      }
    }
  ],
  "unevaluatedProperties": false
}
```

## #/components/schemas/OrkesioParticipant

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Identificador da pessoa no canal (opaco). No WhatsApp é `<número>@s.whatsapp.net` ou `<BSUID>@bsuid`; em outros canais, o id deles. Não conte com ele ser telefone: use `phone`."
    },
    "phone": {
      "type": "string",
      "description": "Telefone (só dígitos), quando o canal informa."
    },
    "username": {
      "type": "string",
      "description": "Nome de usuário (@), quando o canal informa."
    },
    "lid": {
      "type": "string",
      "description": "**Só WhatsApp.** LID, quando conhecido.",
      "x-only": "whatsapp"
    },
    "name": {
      "type": "string",
      "description": "Nome visível (push name), quando conhecido."
    },
    "picture_url": {
      "type": "string",
      "description": "Foto de perfil, quando conhecida."
    }
  },
  "required": [
    "id"
  ],
  "additionalProperties": false,
  "description": "Pessoa: autor de mensagem, participante de grupo, quem fez uma ação."
}
```

## #/components/schemas/OrkesioError

```json
{
  "type": "object",
  "properties": {
    "error": {
      "type": "string",
      "description": "Código estável do erro, em inglês e `snake_case`. Os de uso geral: `invalid_request` (400): pedido inválido: JSON malformado, campo desconhecido ou valor fora do permitido (o detalhe em `message`; o campo em `field`, quando é um só); `unauthorized` (401): `token` ou `admintoken` ausente ou inválido; `forbidden` (403): o token não pode fazer isso (no servidor de demonstração, por exemplo); `not_admin` (403): o WhatsApp recusou por falta de permissão no grupo ou na newsletter; `account_restricted` (403): o WhatsApp restringiu a conta de iniciar conversas novas (mandar para quem já conversa continua valendo; até quando, em `GET /inbox/limits`); `new_chat_limit` (403): a conta atingiu a cota do WhatsApp de conversas novas neste ciclo (veja `GET /inbox/limits`); os dois também no `error` de `OrkesioMessage` e de `message.status`, e não adianta repetir o envio; `payment_required` (403): na API oficial, a Meta recusou o envio por um problema no pagamento da conta do WhatsApp Business (erro 131042 da Meta); acerte a forma de pagamento no gerenciador da Meta, porque repetir não adianta; também no `error` de `OrkesioMessage` e de `message.status`; `whatsapp_rejected` (400): o WhatsApp recusou a mudança pedida (o campo, em `field`, quando é um só); `not_found` (404): o recurso não existe nesta inbox; `conflict` (409): o recurso já existe ou mudou (id em uso, inbox de outro canal); `inbox_not_paired` (409): a inbox ainda não conectou um número; `payload_too_large` (413): o corpo passou do limite; `canceled` e `expired`: só no `error` de `OrkesioMessage` e de `message.status` (envio cancelado antes de sair, ou que passou do prazo na fila); `rate_limited` (429): muitos pedidos; espere o `Retry-After`; `internal_error` (500): falha inesperada na api; tente de novo; `send_failed` (500): o envio falhou (o motivo em `message`); também no `error` de `OrkesioMessage` e de `message.status`; `unsupported_for_channel` (501): o canal da inbox não atende esta rota ou este tipo de mensagem; `meta_error` (502): a Meta recusou ou não respondeu; `disconnected` (503): a inbox está desconectada (sem sessão do WhatsApp, ou token do canal oficial vencido); `unavailable` (503 ou 504): o WhatsApp não respondeu a tempo, ou algo em andamento impede agora; tente de novo. Cada rota lista os códigos próprios dela (`outside_window`, `number_invalid`, `flow_invalid`...). A lista pode crescer: trate código desconhecido pelo status HTTP."
    },
    "message": {
      "type": "string",
      "description": "Descrição para pessoas (às vezes o texto do WhatsApp ou da Meta). Não compare o texto: use `error`."
    },
    "field": {
      "type": "string",
      "description": "O campo do pedido que causou o erro, quando é um só (por exemplo, o campo que o WhatsApp recusou num `PATCH`)."
    }
  },
  "required": [
    "error",
    "message"
  ],
  "additionalProperties": true,
  "description": "O objeto de erro da Orkesio, o mesmo em todo lugar: o corpo das respostas de erro e o `error` de `OrkesioMessage`, `message.status` e `message.failed`. Algumas rotas juntam campos próprios (`request_id`, `errors`...)."
}
```

## #/components/schemas/OrkesioMessageRef

```json
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Id da mensagem (o mesmo `id` da mensagem)."
    },
    "author": {
      "$ref": "#/components/schemas/OrkesioParticipant"
    },
    "direction": {
      "type": "string",
      "enum": [
        "in",
        "out"
      ],
      "description": "O lado da mensagem, como `OrkesioMessage.direction`: `in` (recebida) ou `out` (da inbox). Vem quando a api sabe quem mandou."
    },
    "type": {
      "type": "string",
      "description": "Tipo da mensagem (mesma lista de `type`). `story` quando a resposta é a um story do Instagram (veja `story`)."
    },
    "preview": {
      "type": "string",
      "description": "Texto ou legenda, para mostrar sem buscar a mensagem."
    },
    "story": {
      "type": "object",
      "x-only": "instagram",
      "description": "**Só Instagram.** O contato respondeu a um story da conta. O link do story expira.",
      "properties": {
        "url": {
          "type": "string",
          "description": "Link do story (expira)."
        },
        "id": {
          "type": "string",
          "description": "Id do story."
        }
      }
    }
  },
  "additionalProperties": false,
  "description": "Referência a uma mensagem, com resumo opcional (`author`, `direction`, `type`, `preview`) para mostrar sem buscar. O resumo vem quando a api conhece a mensagem; em `message.status` e `group.receipts` vem só o id. Numa resposta a story (Instagram) vem `story` em vez de `id`."
}
```

## #/components/schemas/OrkesioReferral

```json
{
  "type": "object",
  "properties": {
    "source_type": {
      "type": "string",
      "description": "Tipo da origem informado pela Meta: `ad` (anúncio) ou `post` (publicação).",
      "enum": [
        "ad",
        "post"
      ]
    },
    "source_id": {
      "type": "string",
      "description": "Id do anúncio ou da publicação na Meta."
    },
    "source_url": {
      "type": "string",
      "description": "Link do anúncio ou da publicação."
    },
    "headline": {
      "type": "string",
      "description": "Título do anúncio."
    },
    "body": {
      "type": "string",
      "description": "Texto do anúncio."
    },
    "media_type": {
      "type": "string",
      "enum": [
        "image",
        "video"
      ],
      "description": "Mídia do anúncio."
    },
    "media_url": {
      "type": "string",
      "description": "Link da imagem ou do vídeo do anúncio."
    },
    "thumbnail_url": {
      "type": "string",
      "description": "Miniatura do anúncio."
    },
    "ctwa_clid": {
      "type": "string",
      "description": "Id do clique no anúncio (click-to-WhatsApp). É o que se devolve à Meta (API de Conversões) para atribuir venda ou lead ao anúncio. Não vem em anúncio de Status."
    },
    "welcome_message": {
      "type": "string",
      "description": "Mensagem de boas-vindas configurada no anúncio, quando houver."
    }
  },
  "additionalProperties": false,
  "description": "Origem do contato vinda da Meta: a conversa começou por um anúncio ou uma publicação (click-to-WhatsApp). Igual nos dois canais: no `whatsapp_web` sai do `externalAdReply` da mensagem; no `whatsapp_cloud`, do `referral` da Meta."
}
```

## #/components/schemas/MessageContentTemplate

```json
{
  "title": "modelo",
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O corpo do modelo, já com os parâmetros."
    },
    "footer": {
      "type": "string",
      "description": "Rodapé."
    }
  }
}
```

## #/components/schemas/MessageContentText

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O texto da mensagem (com a formatação do WhatsApp)."
    },
    "style": {
      "type": "object",
      "properties": {
        "background_color": {
          "type": "string",
          "description": "Cor do fundo."
        },
        "text_color": {
          "type": "string",
          "description": "Cor do texto."
        },
        "font": {
          "type": "integer",
          "description": "Fonte."
        }
      },
      "additionalProperties": false,
      "description": "Só em post de status de texto."
    },
    "link_preview": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string",
          "description": "Link."
        },
        "title": {
          "type": "string",
          "description": "Título."
        },
        "description": {
          "type": "string",
          "description": "Descrição."
        },
        "thumbnail": {
          "type": "string",
          "description": "Miniatura JPEG em base64. Vem **só no aviso em tempo real** (webhook e SSE): não é gravada, então a busca não a traz."
        }
      },
      "required": [
        "url"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "text"
  ],
  "title": "texto"
}
```

## #/components/schemas/MessageContentImage

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo."
    },
    "size": {
      "type": "integer",
      "description": "Tamanho em bytes, quando o canal informa."
    },
    "sha256": {
      "type": "string",
      "description": "SHA-256 do arquivo em base64, quando o canal informa."
    },
    "url": {
      "type": "string",
      "description": "Link do arquivo no servidor da inbox, quando já baixado. O evento `message.updated` com `change: media_ready` avisa quando fica pronto."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "duration_seconds": {
      "type": "integer",
      "description": "Duração em segundos (áudio e vídeo), quando o canal informa."
    },
    "width": {
      "type": "integer",
      "description": "Largura em pixels, quando o canal informa."
    },
    "height": {
      "type": "integer",
      "description": "Altura em pixels, quando o canal informa."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única."
    },
    "animated": {
      "type": "boolean",
      "description": "Figurinha animada, ou vídeo que toca como GIF (em loop e sem som)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64. Vem **só no aviso em tempo real** (webhook e SSE): não é gravada, então a busca e o `GET /status-posts` não a trazem (use o `url`)."
    },
    "transcription": {
      "type": "string",
      "description": "Transcrição (áudio e voz), quando feita com `transcribe` no download. Fica aqui, não em `text`."
    }
  },
  "title": "imagem"
}
```

## #/components/schemas/MessageContentVideo

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo."
    },
    "size": {
      "type": "integer",
      "description": "Tamanho em bytes, quando o canal informa."
    },
    "sha256": {
      "type": "string",
      "description": "SHA-256 do arquivo em base64, quando o canal informa."
    },
    "url": {
      "type": "string",
      "description": "Link do arquivo no servidor da inbox, quando já baixado. O evento `message.updated` com `change: media_ready` avisa quando fica pronto."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "duration_seconds": {
      "type": "integer",
      "description": "Duração em segundos (áudio e vídeo), quando o canal informa."
    },
    "width": {
      "type": "integer",
      "description": "Largura em pixels, quando o canal informa."
    },
    "height": {
      "type": "integer",
      "description": "Altura em pixels, quando o canal informa."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única."
    },
    "animated": {
      "type": "boolean",
      "description": "Figurinha animada, ou vídeo que toca como GIF (em loop e sem som)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64. Vem **só no aviso em tempo real** (webhook e SSE): não é gravada, então a busca e o `GET /status-posts` não a trazem (use o `url`)."
    },
    "transcription": {
      "type": "string",
      "description": "Transcrição (áudio e voz), quando feita com `transcribe` no download. Fica aqui, não em `text`."
    }
  },
  "title": "vídeo"
}
```

## #/components/schemas/MessageContentAudio

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo."
    },
    "size": {
      "type": "integer",
      "description": "Tamanho em bytes, quando o canal informa."
    },
    "sha256": {
      "type": "string",
      "description": "SHA-256 do arquivo em base64, quando o canal informa."
    },
    "url": {
      "type": "string",
      "description": "Link do arquivo no servidor da inbox, quando já baixado. O evento `message.updated` com `change: media_ready` avisa quando fica pronto."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "duration_seconds": {
      "type": "integer",
      "description": "Duração em segundos (áudio e vídeo), quando o canal informa."
    },
    "width": {
      "type": "integer",
      "description": "Largura em pixels, quando o canal informa."
    },
    "height": {
      "type": "integer",
      "description": "Altura em pixels, quando o canal informa."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única."
    },
    "animated": {
      "type": "boolean",
      "description": "Figurinha animada, ou vídeo que toca como GIF (em loop e sem som)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64. Vem **só no aviso em tempo real** (webhook e SSE): não é gravada, então a busca e o `GET /status-posts` não a trazem (use o `url`)."
    },
    "transcription": {
      "type": "string",
      "description": "Transcrição (áudio e voz), quando feita com `transcribe` no download. Fica aqui, não em `text`."
    }
  },
  "title": "áudio"
}
```

## #/components/schemas/MessageContentVoice

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo."
    },
    "size": {
      "type": "integer",
      "description": "Tamanho em bytes, quando o canal informa."
    },
    "sha256": {
      "type": "string",
      "description": "SHA-256 do arquivo em base64, quando o canal informa."
    },
    "url": {
      "type": "string",
      "description": "Link do arquivo no servidor da inbox, quando já baixado. O evento `message.updated` com `change: media_ready` avisa quando fica pronto."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "duration_seconds": {
      "type": "integer",
      "description": "Duração em segundos (áudio e vídeo), quando o canal informa."
    },
    "width": {
      "type": "integer",
      "description": "Largura em pixels, quando o canal informa."
    },
    "height": {
      "type": "integer",
      "description": "Altura em pixels, quando o canal informa."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única."
    },
    "animated": {
      "type": "boolean",
      "description": "Figurinha animada, ou vídeo que toca como GIF (em loop e sem som)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64. Vem **só no aviso em tempo real** (webhook e SSE): não é gravada, então a busca e o `GET /status-posts` não a trazem (use o `url`)."
    },
    "transcription": {
      "type": "string",
      "description": "Transcrição (áudio e voz), quando feita com `transcribe` no download. Fica aqui, não em `text`."
    }
  },
  "title": "voz"
}
```

## #/components/schemas/MessageContentDocument

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo."
    },
    "size": {
      "type": "integer",
      "description": "Tamanho em bytes, quando o canal informa."
    },
    "sha256": {
      "type": "string",
      "description": "SHA-256 do arquivo em base64, quando o canal informa."
    },
    "url": {
      "type": "string",
      "description": "Link do arquivo no servidor da inbox, quando já baixado. O evento `message.updated` com `change: media_ready` avisa quando fica pronto."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "duration_seconds": {
      "type": "integer",
      "description": "Duração em segundos (áudio e vídeo), quando o canal informa."
    },
    "width": {
      "type": "integer",
      "description": "Largura em pixels, quando o canal informa."
    },
    "height": {
      "type": "integer",
      "description": "Altura em pixels, quando o canal informa."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única."
    },
    "animated": {
      "type": "boolean",
      "description": "Figurinha animada, ou vídeo que toca como GIF (em loop e sem som)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64. Vem **só no aviso em tempo real** (webhook e SSE): não é gravada, então a busca e o `GET /status-posts` não a trazem (use o `url`)."
    },
    "transcription": {
      "type": "string",
      "description": "Transcrição (áudio e voz), quando feita com `transcribe` no download. Fica aqui, não em `text`."
    }
  },
  "title": "documento"
}
```

## #/components/schemas/MessageContentSticker

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo."
    },
    "size": {
      "type": "integer",
      "description": "Tamanho em bytes, quando o canal informa."
    },
    "sha256": {
      "type": "string",
      "description": "SHA-256 do arquivo em base64, quando o canal informa."
    },
    "url": {
      "type": "string",
      "description": "Link do arquivo no servidor da inbox, quando já baixado. O evento `message.updated` com `change: media_ready` avisa quando fica pronto."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "duration_seconds": {
      "type": "integer",
      "description": "Duração em segundos (áudio e vídeo), quando o canal informa."
    },
    "width": {
      "type": "integer",
      "description": "Largura em pixels, quando o canal informa."
    },
    "height": {
      "type": "integer",
      "description": "Altura em pixels, quando o canal informa."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única."
    },
    "animated": {
      "type": "boolean",
      "description": "Figurinha animada, ou vídeo que toca como GIF (em loop e sem som)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64. Vem **só no aviso em tempo real** (webhook e SSE): não é gravada, então a busca e o `GET /status-posts` não a trazem (use o `url`)."
    },
    "transcription": {
      "type": "string",
      "description": "Transcrição (áudio e voz), quando feita com `transcribe` no download. Fica aqui, não em `text`."
    }
  },
  "title": "figurinha"
}
```

## #/components/schemas/MessageContentLocation

```json
{
  "type": "object",
  "properties": {
    "latitude": {
      "type": "number",
      "description": "Latitude."
    },
    "longitude": {
      "type": "number",
      "description": "Longitude."
    },
    "name": {
      "type": "string",
      "description": "O nome do lugar."
    },
    "address": {
      "type": "string",
      "description": "Endereço."
    },
    "url": {
      "type": "string",
      "description": "Link."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura do mapa, JPEG em base64."
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "title": "localização"
}
```

## #/components/schemas/MessageContentContacts

```json
{
  "type": "object",
  "required": [
    "contacts"
  ],
  "properties": {
    "contacts": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/OrkesioContactCard"
      },
      "description": "Contatos compartilhados."
    }
  },
  "title": "contatos"
}
```

## #/components/schemas/OrkesioContactCard

```json
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Nome exibido."
    },
    "phones": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "number": {
            "type": "string",
            "description": "Número."
          },
          "wa_id": {
            "type": "string",
            "description": "Número no WhatsApp, quando informado."
          }
        },
        "required": [
          "number"
        ],
        "additionalProperties": false
      },
      "description": "Telefones."
    },
    "vcard": {
      "type": "string",
      "description": "vCard completo."
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false,
  "description": "Contato compartilhado."
}
```

## #/components/schemas/MessageContentPoll

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "A pergunta."
    },
    "choices": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "Opção."
      },
      "description": "Opções."
    },
    "selectable_count": {
      "type": "integer",
      "description": "Quantas opções podem ser escolhidas (0 = várias)."
    },
    "results": {
      "type": "object",
      "readOnly": true,
      "additionalProperties": false,
      "required": [
        "options",
        "my_vote"
      ],
      "description": "Os votos: vem na busca (`GET /messages`), contando os de até 7 dias depois da mensagem mais nova da página naquela conversa (numa conversa muito movimentada a conta pode ficar incompleta); nos eventos, cada voto chega como mensagem `poll_vote`. O último voto de cada pessoa vale.",
      "properties": {
        "options": {
          "type": "array",
          "description": "Todas as opções, na ordem da enquete, com quantos votos cada uma tem.",
          "items": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "name",
              "count"
            ],
            "properties": {
              "name": {
                "type": "string",
                "description": "A opção."
              },
              "count": {
                "type": "integer",
                "description": "Quantos votos."
              }
            }
          }
        },
        "my_vote": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "As opções que a inbox escolheu (vazio: não votou ou tirou o voto)."
        }
      }
    }
  },
  "required": [
    "text",
    "choices"
  ],
  "title": "enquete"
}
```

## #/components/schemas/MessageContentPollVote

```json
{
  "type": "object",
  "properties": {
    "poll": {
      "$ref": "#/components/schemas/OrkesioMessageRef"
    },
    "choices": {
      "type": "array",
      "items": {
        "type": "string",
        "description": "Opção."
      },
      "description": "Opções escolhidas (vazio = voto retirado)."
    }
  },
  "required": [
    "poll",
    "choices"
  ],
  "title": "voto na enquete"
}
```

## #/components/schemas/MessageContentButtons

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O texto principal, acima das opções. Quando a mensagem tem cabeçalho em texto, ele vem na primeira linha, como se manda."
    },
    "footer": {
      "type": "string",
      "description": "Rodapé."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo do cabeçalho, quando ele é uma mídia (imagem, vídeo ou documento)."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo do cabeçalho (documentos)."
    },
    "choices": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/OrkesioOption"
      },
      "description": "Opções do menu ou botões."
    }
  },
  "required": [],
  "title": "botões"
}
```

## #/components/schemas/MessageContentList

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O texto principal, acima das opções. Quando a mensagem tem cabeçalho em texto, ele vem na primeira linha, como se manda."
    },
    "footer": {
      "type": "string",
      "description": "Rodapé."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo do cabeçalho, quando ele é uma mídia (imagem, vídeo ou documento)."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo do cabeçalho (documentos)."
    },
    "choices": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/OrkesioOption"
      },
      "description": "Opções do menu ou botões."
    },
    "button_text": {
      "type": "string",
      "description": "O texto do botão que abre a lista."
    }
  },
  "required": [],
  "title": "lista"
}
```

## #/components/schemas/MessageContentCarousel

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O texto principal, acima das opções. Quando a mensagem tem cabeçalho em texto, ele vem na primeira linha, como se manda."
    },
    "footer": {
      "type": "string",
      "description": "Rodapé."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo do cabeçalho, quando ele é uma mídia (imagem, vídeo ou documento)."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo do cabeçalho (documentos)."
    },
    "choices": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/OrkesioOption"
      },
      "description": "Opções do menu ou botões."
    },
    "cards": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "image",
              "video",
              "document"
            ],
            "description": "O tipo da mídia do cartão."
          },
          "mime_type": {
            "type": "string",
            "description": "Tipo do arquivo."
          },
          "size": {
            "type": "integer",
            "description": "Tamanho em bytes, quando o canal informa."
          },
          "sha256": {
            "type": "string",
            "description": "SHA-256 do arquivo em base64, quando o canal informa."
          },
          "url": {
            "type": "string",
            "description": "Link do arquivo do cartão, depois de baixado com `POST /messages/media` e `item: cards.N` (N = posição do cartão, a partir de 0)."
          },
          "filename": {
            "type": "string",
            "description": "Nome do arquivo (documentos)."
          },
          "duration_seconds": {
            "type": "integer",
            "description": "Duração em segundos (áudio e vídeo), quando o canal informa."
          },
          "width": {
            "type": "integer",
            "description": "Largura em pixels, quando o canal informa."
          },
          "height": {
            "type": "integer",
            "description": "Altura em pixels, quando o canal informa."
          },
          "view_once": {
            "type": "boolean",
            "description": "Visualização única."
          },
          "animated": {
            "type": "boolean",
            "description": "Figurinha animada, ou vídeo que toca como GIF (em loop e sem som)."
          },
          "thumbnail": {
            "type": "string",
            "description": "Miniatura JPEG em base64. Vem **só no aviso em tempo real** (webhook e SSE): não é gravada, então a busca e o `GET /status-posts` não a trazem (use o `url`)."
          },
          "transcription": {
            "type": "string",
            "description": "Transcrição (áudio e voz), quando feita com `transcribe` no download. Fica aqui, não em `text`."
          },
          "text": {
            "type": "string",
            "description": "Texto."
          },
          "choices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrkesioOption"
            },
            "description": "Botões do card."
          }
        },
        "additionalProperties": false
      },
      "description": "Cards (carrossel): a mídia (`type` e os campos da mídia), o `text` e os `choices` de cada cartão."
    }
  },
  "required": [],
  "title": "carrossel"
}
```

## #/components/schemas/MessageContentLocationRequest

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O texto principal, acima das opções. Quando a mensagem tem cabeçalho em texto, ele vem na primeira linha, como se manda."
    },
    "footer": {
      "type": "string",
      "description": "Rodapé."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo do cabeçalho, quando ele é uma mídia (imagem, vídeo ou documento)."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo do cabeçalho (documentos)."
    },
    "choices": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/OrkesioOption"
      },
      "description": "Opções do menu ou botões."
    }
  },
  "required": [],
  "title": "pedido de localização"
}
```

## #/components/schemas/MessageContentFlow

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O texto principal, acima do botão. Quando a mensagem tem cabeçalho em texto, ele vem na primeira linha, como se manda."
    },
    "footer": {
      "type": "string",
      "description": "Rodapé."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo do cabeçalho, quando ele é uma mídia (imagem, vídeo ou documento)."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo do cabeçalho (documentos)."
    },
    "button_text": {
      "type": "string",
      "description": "O texto do botão que abre o Flow."
    },
    "flow_id": {
      "type": "string",
      "description": "Id do Flow na Meta (o Flow publicado no WhatsApp Manager da sua conta)."
    },
    "flow_name": {
      "type": "string",
      "description": "Nome do Flow na Meta (informativo: o Flow é o do `flow_id`)."
    },
    "flow_token": {
      "type": "string",
      "description": "O identificador da conversa no Flow, que volta na resposta do contato."
    },
    "flow_action": {
      "type": "string",
      "enum": [
        "navigate",
        "data_exchange"
      ],
      "description": "Como o Flow abre: `navigate` (na tela de `flow_action_payload.screen`) ou `data_exchange` (pelo endpoint de dados)."
    },
    "flow_action_payload": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "screen": {
          "type": "string",
          "description": "Tela em que o Flow abre (só `navigate`)."
        },
        "data": {
          "type": "object",
          "additionalProperties": true,
          "description": "Dados iniciais da tela, no formato que o Flow espera."
        }
      },
      "description": "A tela inicial e os dados dela, no formato da Meta."
    },
    "mode": {
      "type": "string",
      "enum": [
        "published",
        "draft"
      ],
      "description": "`published` (o Flow publicado) ou `draft` (o rascunho)."
    }
  },
  "required": [],
  "title": "Flow"
}
```

## #/components/schemas/MessageContentInteractiveReply

```json
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "button",
        "list",
        "flow",
        "quick_reply",
        "postback",
        "template_button",
        "callback"
      ],
      "description": "Origem: botão, lista, Flow, resposta rápida, postback (Messenger/Instagram), botão de template ou callback (Telegram)."
    },
    "option_id": {
      "type": "string",
      "description": "Id da opção escolhida."
    },
    "text": {
      "type": "string",
      "description": "O título da opção escolhida."
    },
    "description": {
      "type": "string",
      "description": "Descrição da opção (listas)."
    },
    "payload": {
      "type": "string",
      "description": "Dados devolvidos pelo botão."
    },
    "response": {
      "type": "object",
      "additionalProperties": true,
      "description": "Respostas do formulário (Flow), já como objeto."
    }
  },
  "required": [
    "kind"
  ],
  "title": "resposta de botão ou lista",
  "description": "A resposta do contato a botões, lista ou carrossel. No Messenger e no Instagram (quando chegarem), o clique num botão (postback) também chega aqui: o botão em `option_id` e o dado dele em `payload`."
}
```

## #/components/schemas/MessageContentOrder

```json
{
  "type": "object",
  "properties": {
    "item_count": {
      "type": "integer",
      "description": "Itens."
    },
    "total": {
      "type": "number",
      "description": "Valor total."
    },
    "currency": {
      "type": "string",
      "description": "Moeda."
    },
    "text": {
      "type": "string",
      "description": "Mensagem do pedido."
    }
  },
  "x-only": "whatsapp",
  "title": "pedido"
}
```

## #/components/schemas/MessageContentProduct

```json
{
  "type": "object",
  "properties": {
    "product_id": {
      "type": "string",
      "description": "Id do produto."
    },
    "name": {
      "type": "string",
      "description": "O nome do produto, como o `name` do catálogo (`GET /catalog/products`)."
    },
    "description": {
      "type": "string",
      "description": "Descrição."
    },
    "price": {
      "type": "number",
      "description": "Preço em unidades da moeda (`19.99`). O catálogo usa a string em milésimos do WhatsApp (`\"19990\"`)."
    },
    "sale_price": {
      "type": "number",
      "description": "Preço promocional, em unidades da moeda."
    },
    "currency": {
      "type": "string",
      "description": "Moeda."
    },
    "url": {
      "type": "string",
      "description": "Link."
    },
    "image": {
      "$ref": "#/components/schemas/MessageContentImage"
    }
  },
  "x-only": "whatsapp",
  "title": "produto"
}
```

## #/components/schemas/MessageContentPayment

```json
{
  "type": "object",
  "properties": {
    "reference_id": {
      "type": "string",
      "description": "Referência do pedido."
    },
    "amount": {
      "type": "number",
      "description": "Valor."
    },
    "currency": {
      "type": "string",
      "description": "Moeda."
    },
    "text": {
      "type": "string",
      "description": "A nota da cobrança."
    },
    "items": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Item."
          },
          "quantity": {
            "type": "number",
            "description": "Quantidade."
          },
          "amount": {
            "type": "number",
            "description": "Valor do item."
          }
        },
        "required": [
          "name"
        ],
        "additionalProperties": false
      },
      "description": "Itens."
    },
    "pix": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "description": "Chave PIX."
        },
        "key_type": {
          "type": "string",
          "description": "Tipo da chave."
        },
        "merchant_name": {
          "type": "string",
          "description": "Recebedor."
        }
      },
      "additionalProperties": false
    },
    "boleto": {
      "type": "string",
      "description": "Linha digitável do boleto."
    },
    "link": {
      "type": "string",
      "description": "Link de pagamento."
    },
    "card": {
      "type": "boolean",
      "description": "Pagamento por cartão."
    },
    "payment_status": {
      "type": "string",
      "description": "Status do pagamento, quando informado."
    }
  },
  "x-only": "whatsapp",
  "title": "cobrança"
}
```

## #/components/schemas/MessageContentGroupInvite

```json
{
  "type": "object",
  "properties": {
    "group_id": {
      "type": "string",
      "description": "Grupo."
    },
    "name": {
      "type": "string",
      "description": "Nome do grupo."
    },
    "code": {
      "type": "string",
      "description": "Código do convite."
    },
    "expires_at": {
      "type": "string",
      "format": "date-time",
      "description": "Validade. ISO 8601 em UTC com milissegundos."
    },
    "text": {
      "type": "string",
      "description": "A legenda do convite."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura, JPEG em base64."
    }
  },
  "required": [
    "code"
  ],
  "x-only": "whatsapp",
  "title": "convite de grupo"
}
```

## #/components/schemas/MessageContentNewsletterInvite

```json
{
  "type": "object",
  "properties": {
    "newsletter_id": {
      "type": "string",
      "description": "Canal (`<id>@newsletter`)."
    },
    "name": {
      "type": "string",
      "description": "Nome do canal."
    },
    "role": {
      "type": "string",
      "enum": [
        "admin",
        "follower"
      ],
      "description": "Convite para ser admin ou para seguir."
    },
    "text": {
      "type": "string",
      "description": "A legenda do convite."
    },
    "expires_at": {
      "type": "string",
      "format": "date-time",
      "description": "Validade. ISO 8601 em UTC com milissegundos."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura, JPEG em base64."
    }
  },
  "required": [
    "newsletter_id"
  ],
  "x-only": "whatsapp",
  "title": "convite de newsletter"
}
```

## #/components/schemas/MessageContentEventResponse

```json
{
  "type": "object",
  "properties": {
    "event": {
      "$ref": "#/components/schemas/OrkesioMessageRef"
    },
    "response": {
      "type": "string",
      "enum": [
        "going",
        "not_going",
        "maybe"
      ],
      "description": "Resposta ao convite."
    }
  },
  "required": [
    "event",
    "response"
  ],
  "title": "resposta a evento"
}
```

## #/components/schemas/MessageContentStickerPack

```json
{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Nome do pacote."
    },
    "publisher": {
      "type": "string",
      "description": "Autor."
    },
    "count": {
      "type": "integer",
      "description": "Figurinhas no pacote."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura, JPEG em base64."
    }
  },
  "x-only": "whatsapp",
  "title": "pacote de figurinhas"
}
```

## #/components/schemas/MessageContentVideoNote

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "mime_type": {
      "type": "string",
      "description": "Tipo do arquivo."
    },
    "size": {
      "type": "integer",
      "description": "Tamanho em bytes, quando o canal informa."
    },
    "sha256": {
      "type": "string",
      "description": "SHA-256 do arquivo em base64, quando o canal informa."
    },
    "url": {
      "type": "string",
      "description": "Link do arquivo no servidor da inbox, quando já baixado. O evento `message.updated` com `change: media_ready` avisa quando fica pronto."
    },
    "filename": {
      "type": "string",
      "description": "Nome do arquivo (documentos)."
    },
    "duration_seconds": {
      "type": "integer",
      "description": "Duração em segundos (áudio e vídeo), quando o canal informa."
    },
    "width": {
      "type": "integer",
      "description": "Largura em pixels, quando o canal informa."
    },
    "height": {
      "type": "integer",
      "description": "Altura em pixels, quando o canal informa."
    },
    "view_once": {
      "type": "boolean",
      "description": "Visualização única."
    },
    "animated": {
      "type": "boolean",
      "description": "Figurinha animada, ou vídeo que toca como GIF (em loop e sem som)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura JPEG em base64. Vem **só no aviso em tempo real** (webhook e SSE): não é gravada, então a busca e o `GET /status-posts` não a trazem (use o `url`)."
    },
    "transcription": {
      "type": "string",
      "description": "Transcrição (áudio e voz), quando feita com `transcribe` no download. Fica aqui, não em `text`."
    }
  },
  "title": "vídeo redondo"
}
```

## #/components/schemas/MessageContentLiveLocation

```json
{
  "type": "object",
  "properties": {
    "latitude": {
      "type": "number",
      "description": "Latitude."
    },
    "longitude": {
      "type": "number",
      "description": "Longitude."
    },
    "text": {
      "type": "string",
      "description": "A legenda."
    },
    "accuracy": {
      "type": "integer",
      "description": "Precisão em metros, quando informada."
    },
    "sequence": {
      "type": "integer",
      "description": "Número da atualização (cresce a cada nova posição)."
    },
    "thumbnail": {
      "type": "string",
      "description": "Miniatura do mapa, JPEG em base64."
    }
  },
  "required": [
    "latitude",
    "longitude"
  ],
  "x-only": "whatsapp",
  "title": "localização ao vivo"
}
```

## #/components/schemas/MessageContentScheduledCall

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O título da ligação."
    },
    "start_at": {
      "type": "string",
      "format": "date-time",
      "description": "Quando começa. ISO 8601 em UTC com milissegundos."
    },
    "video": {
      "type": "boolean",
      "description": "Chamada de vídeo."
    }
  },
  "required": [
    "start_at"
  ],
  "x-only": "whatsapp",
  "title": "ligação agendada"
}
```

## #/components/schemas/MessageContentAlbum

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O texto que veio junto com as mídias, quando o canal manda."
    },
    "images": {
      "type": "integer",
      "description": "Quantas fotos vêm no álbum."
    },
    "videos": {
      "type": "integer",
      "description": "Quantos vídeos vêm no álbum."
    }
  },
  "description": "Várias fotos e vídeos enviados juntos. Esta mensagem traz a contagem; cada mídia chega como uma mensagem própria, com `album_id` apontando para esta.",
  "title": "álbum"
}
```

## #/components/schemas/MessageContentShare

```json
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "post",
        "reel",
        "story",
        "product",
        "link",
        "music"
      ],
      "description": "O que foi compartilhado: `post`, `reel` ou `story` (Instagram), `link` (Messenger), `music` (WhatsApp)."
    },
    "url": {
      "type": "string",
      "description": "Link."
    },
    "title": {
      "type": "string",
      "description": "Título."
    },
    "shared_id": {
      "type": "string",
      "description": "Id do conteúdo no canal."
    }
  },
  "required": [
    "kind"
  ],
  "title": "compartilhamento",
  "description": "Algo compartilhado na conversa: post, reel ou story (Instagram), link (Messenger) ou música (WhatsApp)."
}
```

## #/components/schemas/MessageContentStoryMention

```json
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "Link do story (pode expirar)."
    },
    "story_id": {
      "type": "string",
      "description": "Id do story."
    }
  },
  "x-only": "instagram",
  "title": "menção em story",
  "description": "O contato marcou a conta num story do Instagram. A mídia do story fica em `url` por pouco tempo."
}
```

## #/components/schemas/MessageContentEvent

```json
{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "O nome do evento."
    },
    "description": {
      "type": "string",
      "description": "Descrição."
    },
    "start_at": {
      "type": "string",
      "format": "date-time",
      "description": "Início. ISO 8601 em UTC com milissegundos."
    },
    "end_at": {
      "type": "string",
      "format": "date-time",
      "description": "Fim. ISO 8601 em UTC com milissegundos."
    },
    "location": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Nome do local."
        },
        "address": {
          "type": "string",
          "description": "Endereço."
        },
        "latitude": {
          "type": "number",
          "description": "Latitude."
        },
        "longitude": {
          "type": "number",
          "description": "Longitude."
        }
      },
      "additionalProperties": false
    },
    "join_link": {
      "type": "string",
      "description": "Link da chamada."
    },
    "canceled": {
      "type": "boolean",
      "description": "Cancelado."
    }
  },
  "required": [
    "text"
  ],
  "x-only": "whatsapp",
  "title": "evento"
}
```

## #/components/schemas/MessageContentReaction

```json
{
  "type": "object",
  "properties": {
    "action": {
      "type": "string",
      "enum": [
        "react",
        "unreact"
      ],
      "description": "Pôs ou tirou a reação."
    },
    "emoji": {
      "type": "string",
      "description": "Emoji (vazio em `unreact`)."
    },
    "target": {
      "$ref": "#/components/schemas/OrkesioMessageRef"
    }
  },
  "required": [
    "action",
    "emoji",
    "target"
  ],
  "title": "reação"
}
```

## #/components/schemas/MessageContentCall

```json
{
  "type": "object",
  "properties": {
    "video": {
      "type": "boolean",
      "description": "Ligação de vídeo."
    },
    "result": {
      "type": "string",
      "enum": [
        "missed",
        "answered",
        "answered_elsewhere",
        "rejected",
        "busy",
        "failed",
        "unknown"
      ],
      "description": "Resultado."
    },
    "duration_seconds": {
      "type": "integer",
      "description": "Duração em segundos."
    }
  },
  "required": [
    "result"
  ],
  "title": "ligação"
}
```

## #/components/schemas/MessageContentGroupParticipant

```json
{
  "type": "object",
  "properties": {
    "action": {
      "type": "string",
      "enum": [
        "joined",
        "added",
        "left",
        "removed",
        "promoted",
        "demoted"
      ],
      "description": "`joined` (entrou pelo link), `added` (foi adicionado), `left` (saiu), `removed` (foi removido), `promoted`/`demoted` (virou ou deixou de ser admin)."
    },
    "participants": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/OrkesioParticipant"
      },
      "description": "Participantes afetados."
    },
    "by": {
      "$ref": "#/components/schemas/OrkesioParticipant"
    }
  },
  "required": [
    "action",
    "participants"
  ],
  "x-only": "whatsapp",
  "title": "participantes do grupo"
}
```

## #/components/schemas/MessageContentSystem

```json
{
  "type": "object",
  "properties": {
    "kind": {
      "type": "string",
      "enum": [
        "ephemeral_changed",
        "history_sync",
        "group_status",
        "pin",
        "edit",
        "revoke",
        "poll_result",
        "poll_option_added",
        "status_interaction",
        "other"
      ],
      "description": "O que aconteceu."
    },
    "text": {
      "type": "string",
      "description": "Descrição para exibir."
    }
  },
  "required": [
    "kind"
  ],
  "title": "aviso do sistema"
}
```

## #/components/schemas/MessageContentUnavailable

```json
{
  "type": "object",
  "properties": {
    "reason": {
      "type": "string",
      "enum": [
        "undecryptable",
        "absent",
        "unsupported"
      ],
      "description": "`undecryptable`: o WhatsApp ainda vai reenviar; `absent`: o celular não tem a mensagem; `unsupported`: canal que não repassa esse tipo ou que a api ainda não traduz (API oficial do WhatsApp, Instagram e Messenger: enquete, mídia temporária; Telegram: enquete, dado, cobrança, jogo, story, checklist e mídia paga)."
    },
    "media_type": {
      "type": "string",
      "description": "Tipo esperado, quando se sabe."
    }
  },
  "required": [
    "reason"
  ],
  "x-only": "whatsapp",
  "title": "indisponível"
}
```

## Guias relacionados

[Visão geral](/docs/overview) · [O que funciona em cada canal](/docs/canais) · [O que muda da uazapi](/docs/o-que-muda)
