Status da Mensagem
id (por exemplo, msg_abc) de POST /v1/messages/send, consulte seu status atual.
Para listar e filtrar muitas mensagens (enviadas e recebidas), veja GET /v1/messages.

Detalhes do Log no painel — a mensagem renderizada, o template, o status ao vivo (Lida) e o mesmo messageId que você consulta pela API.
{messageId} aceita o id interno da mensagem retornado pelo endpoint de envio, o correlationId ou o ID de mensagem do WhatsApp do provedor (wamid).Em número oficial (Meta) este
id também volta dentro do status nativo da Meta, em statuses[].biz_opaque_callback_data, então dá para ligar o status ao seu envio sem chamar este endpoint.Exemplo
Resposta (200)
Um envio que falhou num número oficial
Uma mensagem livre enviada a um número oficial (Meta) depois que a janela de atendimento de 24 horas fechou. A Meta aceita a requisição e falha a mensagem depois, então ela tem wamid esentAt. Não há a chave template porque o envio não usou template.
string | null
Motivo da falha legível por máquina, de um conjunto listado em Códigos de Erro do Log. É o mesmo valor que
GET /v1/messages devolve para a mesma mensagem. null quando não há erro, e sempre null em DELIVERED, READ, PLAYED e CANCELED.Ramifique pelo errorCode, nunca pelo errorMessage. O errorMessage é texto para pessoas, e a redação dele não é contrato. O conjunto de códigos cresce, então trate um código que você não reconhece como “precisa de revisão”, e não como erro.Se o webhook de um envio nunca chegou, consulte este endpoint pelo id, pelo correlationId ou pelo wamid e classifique o resultado pelo errorCode.string | null
O id da mensagem no provedor — num número oficial, o wamid da Meta.
null até o provedor aceitar a mensagem, então continua null numa mensagem ainda QUEUED ou recusada antes de sair.string
Nome do template com que a mensagem foi enviada. A chave é omitida, não
null, quando o envio não usou template.string | null
Por onde a mensagem saiu:
API, MCP, CHATWOOT, CHAT, DASHBOARD, SYSTEM, ou null. Três tipos de mensagem enviada só aparecem em GET /v1/messages e não têm detalhe aqui (404), porque não foi a Pilot Status que as enviou: APP (app WhatsApp Business no celular, ou outra ferramenta na mesma WABA), LAYER (um cliente da camada Meta) e respostas CHATWOOT enviadas de uma inbox nativa WhatsApp Cloud. Uma resposta CHATWOOT vinda de uma inbox de espelho por API tem detalhe aqui.⚠️ null não significa “recebida”. Para isso, leia direction em GET /v1/messages. Um null numa linha OUT é saída não classificada — contá-la como entrada subconta os próprios envios num relatório de cobrança.object | null
O veredito da própria Meta sobre o que foi cobrado nesta mensagem —
conversationId, originType, category e type. null enquanto a Meta não reportar.type distingue regular (cobrada) de free_entry_point (janela aberta por clique em anúncio) e free_customer_service (dentro da franquia de serviço).Não infira a categoria pelo template que enviou. A Meta recategoriza templates (
template_category_update), e o mesmo envio cai como free_entry_point ou free_customer_service conforme a janela tenha aberto. Use o metaPricing acima.A mesma informação chega em tempo real no webhook, em pricing.category / pricing.type dentro de value.statuses[] do envelope nativo. O externalMessageId (o wamid) é o campo que junta os dois.Status
Confirmações de leitura: o status
READ e readAt só estão disponíveis quando o contato que recebeu a mensagem tem as confirmações de leitura ativadas no WhatsApp (Configurações > Privacidade > Confirmações de leitura). Caso contrário, o ciclo de vida pode parar em DELIVERED. O mesmo se aplica aos Logs e ao webhook message.read.PLAYED é um valor novo. Ele é retornado em números oficiais (Meta Cloud API) para
notas de voz (mediaType: "voice") quando o destinatário as ouve, e tem precedência
acima de READ: uma mensagem que chega a PLAYED não volta para READ. Se a sua
integração ramifica no status com um switch exaustivo ou uma lista fixa, inclua
PLAYED antes que ele comece a aparecer — código que trata status desconhecido como
erro vai encontrar um. Em números oficiais, mediaType: "audio" chega como arquivo de
áudio, não como nota de voz, e não chega a PLAYED. Em números não oficiais, uma nota
de voz ouvida aparece como READ.Erros comuns
401— cabeçalho de chave de API ausente/inválido (x-api-key/x-api-key-id).404— mensagem não encontrada dentro do escopo da chave.