Pular para o conteúdo

Enviar mensagem

POST/v1/instances/{id}/messagesdesde M2token da instância ou admin

Quando usar

Valida e grava a mensagem na fila persistente da instância. Sem wait, responde 202 com status: queued. Com ?wait=true, espera o resultado por até timeout (padrão 30s, no máximo 2m): 200 quando enviada, erro quando falhou, ou 202 com o status atual (queued/in_flight) se o tempo acabar; a mensagem continua na fila.

Tipos: text, image, video, audio (media.ptt: true = mensagem de voz), document, reaction. to aceita número com DDI (10 a 15 dígitos) ou JID (@s.whatsapp.net, @g.us, @lid). Mídia por media.url (o servidor baixa, IPs privados bloqueados) ou media.base64. Limites: imagem 16MB, vídeo/áudio 64MB, documento 100MB, corpo 140MB, texto 64KB.

Idempotência: client_message_id (até 128 caracteres) repetido devolve a mesma mensagem; repetido com outro conteúdo responde 409 conflict.

Autenticação

Aceita o token da instância (só a própria instância) ou o token admin. Um token de outra instância recebe 403 forbidden (ou 404 not_found em webhooks de outra instância).

Parâmetros

Caminho

NomeTipoDescrição
idobrigatóriostringId da instância (inst_...).

Query

NomeTipoDescrição
wait"true"true espera o envio terminar (modo síncrono).
timeoutstringDuração Go (30s, 90s, 2m). Padrão 30s, teto efetivo 2m. Só com wait=true.

Corpo (JSON)

NomeTipoDescrição
toobrigatóriostringNúmero com DDI (10 a 15 dígitos) ou JID.
typeobrigatório"text" | "image" | "video" | "audio" | "document" | "reaction"
textstringObrigatório em text (até 64KB).
captionstringLegenda de image, video e document.
mediaMediaInputInforme url ou base64.
media.urlstringhttp(s) público; o servidor baixa (timeout 30s, sem IPs privados).
media.base64string
media.mimestring
media.file_namestringAté 255 bytes.
media.pttbooleanÁudio como mensagem de voz.
media.urlstringhttp(s) público; o servidor baixa (timeout 30s, sem IPs privados).
media.base64string
media.mimestring
media.file_namestringAté 255 bytes.
media.pttbooleanÁudio como mensagem de voz.
reactionobject
reaction.message_idstringId LiteZap ou wa_message_id de uma mensagem do chat.
reaction.emojistringVazio remove a reação.
client_message_idstringChave de idempotência. (até 128)
expires_afterstringDuração entre 1m e 168h (padrão 24h). Não enviada até lá: message_expired.

Exemplo

Janela do terminal
curl -s -X POST "$LITEZAP_URL/v1/instances/$ID/messages?wait=true" \
-H "Authorization: Bearer $LITEZAP_TOKEN" \
-d '{"to":"5511999999999","type":"text","text":"Olá! Seu pedido saiu para entrega.","client_message_id":"pedido-123"}'
Outros corpos de exemplo
Imagem por URL
{
"to": "5511999999999",
"type": "image",
"caption": "Comprovante",
"media": {
"url": "https://exemplo.com/comprovante.jpg"
}
}
Áudio como mensagem de voz (base64)
{
"to": "5511999999999",
"type": "audio",
"media": {
"base64": "T2dnUwACAAAAAAAA...",
"mime": "audio/ogg; codecs=opus",
"ptt": true
}
}
Documento
{
"to": "5511999999999",
"type": "document",
"caption": "Segue o boleto",
"media": {
"url": "https://exemplo.com/boleto.pdf",
"file_name": "boleto.pdf"
}
}
Reação
{
"to": "5511999999999",
"type": "reaction",
"reaction": {
"message_id": "msg_a41c9e07d2b35f68",
"emoji": "👍"
}
}

Nos exemplos, LITEZAP_URL é a URL base (ex.: http://localhost:8787) e o token vem deLITEZAP_TOKEN (instância) ou LITEZAP_ADMIN_TOKEN.

Resposta

200 Enviada (com ?wait=true). Traz wa_message_id.

Campos de Message
idstring
client_message_idstring
wa_message_idstring
chatstring
senderstring
from_meboolean
source"contact" | "api" | "device" | "history"
typestring
textstring
mediaMediaInfo
media.idstringId da mídia recebida.
media.kindstring
media.mimestring
media.sizeinteger
media.file_namestring
media.secondsinteger
media.pttboolean
media.urlstringCaminho da API para baixar (mídia recebida).
reaction_tostring
status"queued" | "in_flight" | "sent" | "delivered" | "read" | "played" | "failed" | "received" | "pending"
attemptsinteger
errorstringÚltimo erro (codigo: detalhe) de item não enviado.
timestampstring
{
"id": "msg_a41c9e07d2b35f68",
"client_message_id": "pedido-123",
"wa_message_id": "3EB0A1B2C3D4E5F6A7B8C9",
"chat": "5511999999999@s.whatsapp.net",
"from_me": true,
"source": "api",
"type": "text",
"text": "Olá! Seu pedido saiu para entrega.",
"status": "sent",
"timestamp": "2026-10-17T13:50:03Z"
}

202 Na fila (queued) ou em envio (in_flight).

Campos de Message
idstring
client_message_idstring
wa_message_idstring
chatstring
senderstring
from_meboolean
source"contact" | "api" | "device" | "history"
typestring
textstring
mediaMediaInfo
media.idstringId da mídia recebida.
media.kindstring
media.mimestring
media.sizeinteger
media.file_namestring
media.secondsinteger
media.pttboolean
media.urlstringCaminho da API para baixar (mídia recebida).
reaction_tostring
status"queued" | "in_flight" | "sent" | "delivered" | "read" | "played" | "failed" | "received" | "pending"
attemptsinteger
errorstringÚltimo erro (codigo: detalhe) de item não enviado.
timestampstring
{
"id": "msg_a41c9e07d2b35f68",
"client_message_id": "pedido-123",
"chat": "5511999999999@s.whatsapp.net",
"from_me": true,
"source": "api",
"type": "text",
"text": "Olá! Seu pedido saiu para entrega.",
"status": "queued",
"timestamp": "2026-10-17T13:50:00Z"
}

Erros

CódigoHTTPRetentávelO que fazer
validation_failed400nãoCorrija o corpo ou os parâmetros; a message diz o campo.
invalid_number400nãoO número não tem WhatsApp. Não reenvie; confira com check-numbers.
unauthorized401nãoEnvie Authorization: Bearer <token> válido.
forbidden403nãoUse o token certo (admin, ou o da própria instância).
instance_not_found404nãoConfira o id da instância.
conflict409nãoO recurso está num estado que não permite a operação; veja a message.
instance_not_connected409dependeConfira o estado da instância; se logged_out, pareie de novo.
instance_banned409nãoNúmero banido: apague a instância.
message_expired410nãoNão saiu antes de expires_after; envie de novo se ainda fizer sentido.
media_too_large413nãoReduza o arquivo (imagem 16MB, vídeo/áudio 64MB, documento 100MB).
media_fetch_failed422simConfira se a URL é pública e responde; tente de novo.
worker_error502simTente de novo com backoff; se persistir, veja o log do servidor.
rate_limited503simEspere e tente de novo com backoff.
shutting_down503simO servidor está reiniciando; tente de novo em alguns segundos.
worker_timeout504simTente de novo; a instância pode estar sobrecarregada ou reconectando.

Todo erro usa o envelope {"error":{"code","message","retryable"}}. Tabela completa em Erros.

Eventos gerados

Equivalente na Z-API: Enviar texto, imagem, áudio, vídeo, documento, reação. Veja Migrar da Z-API.

Outras operações de Mensagens: Consultar mensagem · Listar a fila · Esvaziar a fila · Cancelar item da fila · Favoritar mensagem