Enviar mensagem
POST /messages
Envia uma mensagem de qualquer tipo. Passo a passo, exemplos e limites: Enviar mensagens.
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 emmessage.status. Com o intervalo padrão da inbox, a fila não espera 1 a 3 s entre as mensagens. Para esperar o envio, mandeoptions.async: false(respondependingou o erro). Quando usar cada um:options.async. Na API oficial o envio já é na hora. - Erros do pedido (campo faltando,
toinválido, tipo que o canal não tem) respondem antes da fila: 400invalid_request, ou 501unsupported_for_channel(por exemplotemplateno Web, oueventepaymentna oficial). Inbox desconectada responde 503 (disconnected). - Placeholders (
{{name}}...) valem nos textos. - Responder em particular:
tona pessoa ereply_tonuma mensagem de outra conversa. No WhatsApp Web,reply_tonuma 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_tonum 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 (oauthor.iddo comentário; no Instagram, outrotorespondeinvalid_request), e a resposta vem na conversa direta que a Meta indicar. - Comentar num post (Instagram e Messenger):
tono post (<id>@instagram_post,<id>@facebook_post), sótext; comreply_to, responde ao comentário em público. - As rotas
/send/*continuam iguais (formato v1).
Autenticação
[
{
"token": []
}
]
{
"token": {
"name": "token",
"type": "apiKey",
"in": "header"
}
}
Corpo da requisição
{
"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
{
"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. |
| 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: a mensagem que saiu
{
"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: sent, delivered, read ou failed
{
"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: só se o envio falhar
{
"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:
typediz o tipo, e os campos dele vão soltos no corpo, como na uazapi (text,latitude,choices), igual à mensagem recebida. - Destino em
to(antesnumber): 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 eraasync: 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 emoptions(options.delay_ms,options.read_chat);reply_to;mentionscomo lista;track_sourceetrack_idiguais. - 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_ctavirabutton_text; o cabeçalho vai na primeira linha dotext, como nos botões e na lista.
Texto
uazapi, pedido:
{
"number": "5511999999999",
"text": "Seu pedido saiu para entrega.",
"track_source": "crm",
"track_id": "42"
}
uazapi, resposta:
{
"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:
{
"to": "5511999999999",
"type": "text",
"text": "Seu pedido saiu para entrega.",
"track_source": "crm",
"track_id": "42"
}
Orkesio, resposta:
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"type": "object",
"required": [
"contacts"
],
"properties": {
"contacts": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OrkesioContactCard"
},
"description": "Contatos compartilhados."
}
},
"title": "contatos"
}
#/components/schemas/OrkesioContactCard
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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
{
"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 · O que funciona em cada canal · O que muda da uazapi