curl --request POST \
--url https://{instance}/wapi/v1/conversations/{ticketId}/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"body": "Já te retorno, um momento."
}
'
{
"requestId": "req_77a1c9",
"ticketId": 4821,
"messages": [
{
"id": "wamid.HBgN...",
"status": "queued",
"ack": 0,
"createdAt": "2026-09-23T09:15:02.000Z"
}
]
}{
"error": "Informe texto, mídia ou template para envio",
"code": "ERR_MISSING_CONTENT"
}{
"error": "Token não fornecido",
"code": "ERR_TOKEN_MISSING"
}{
"error": "Token sem permissão para esta ação",
"code": "ERR_SCOPE_MISSING"
}{
"error": "ERR_NO_TICKET_FOUND",
"code": "ERR_NO_TICKET_FOUND"
}{
"error": "Limite de requisições excedido",
"code": "ERR_RATE_LIMITED"
}Mensagens
Enviar mensagem numa conversa existente
Responde numa conversa (ticket) já aberta, usando a mesma conexão do ticket. Envie pelo menos um entre body (texto), medias (multipart, um ou mais arquivos) ou templateData (template aprovado, obrigatório fora da janela de 24h do WABA — depois que o contato responde, a janela reabre por mais 24h; sem isso, apenas templates aprovados são entregues). Use quotedMsgId pra responder citando uma mensagem anterior daquela conversa. Nenhum conteúdo enviado devolve 400 ERR_MISSING_CONTENT; ticketId inexistente ou de outra conta devolve 404 ERR_NO_TICKET_FOUND. Requer escopo messages:send.
POST
/
v1
/
conversations
/
{ticketId}
/
messages
curl --request POST \
--url https://{instance}/wapi/v1/conversations/{ticketId}/messages \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"body": "Já te retorno, um momento."
}
'
{
"requestId": "req_77a1c9",
"ticketId": 4821,
"messages": [
{
"id": "wamid.HBgN...",
"status": "queued",
"ack": 0,
"createdAt": "2026-09-23T09:15:02.000Z"
}
]
}{
"error": "Informe texto, mídia ou template para envio",
"code": "ERR_MISSING_CONTENT"
}{
"error": "Token não fornecido",
"code": "ERR_TOKEN_MISSING"
}{
"error": "Token sem permissão para esta ação",
"code": "ERR_SCOPE_MISSING"
}{
"error": "ERR_NO_TICKET_FOUND",
"code": "ERR_NO_TICKET_FOUND"
}{
"error": "Limite de requisições excedido",
"code": "ERR_RATE_LIMITED"
}Authorizations
Token criado em API → Tokens no painel. Prefixo wtx_live_ (ou wtx_test_).
Path Parameters
Body
application/jsonmultipart/form-data
Pelo menos um entre body, medias (multipart) e templateData é obrigatório.