Guia de envio de mensagens
Este guia mostra como enviar mensagens de WhatsApp pela API do Pilot Status. Todos os envios passam por um único endpoint:x-api-key: ps_... (ou x-api-key-id) com uma chave com escopo de número — veja Autenticação da API. Não há autenticação por Bearer-token.

Você também pode enviar pela página Mensagem do painel — ela chama o mesmo endpoint POST /v1/messages/send e mostra um curl pronto para copiar.
templateId), texto livre (text) e mídia direta (media + mediaType). Referência completa: POST /v1/messages/send.
Pré-requisitos
- Um número de WhatsApp conectado (painel
/numbers). - Uma chave de API para esse número (painel
/api-keys). - Para envios de template: um template criado em
/templates(números Meta exigem aprovação da Meta).
1. Enviar uma mensagem de template
O modo mais confiável — funciona a qualquer momento, inclusive fora da janela de 24h em números Meta.2. Enviar texto livre
Envie texto simples com o campotext (sem templateId).
buttons (e, com botões, um header/footer) às mensagens de texto livre — veja a referência de envio.
3. Enviar mídia direta
Envie uma imagem, vídeo, documento ou áudio isoladamente — forneçamedia + mediaType, sem templateId e sem text. Um caption opcional é suportado para imagem/vídeo/documento (não para áudio nem nota de voz). Use mediaType: "voice" para uma nota de voz (PTT) do WhatsApp em qualquer número; mediaType: "audio" chega como arquivo de áudio em números oficiais (Meta Cloud API) e como nota de voz em números não oficiais — veja Áudio e nota de voz.
URIs de dados Base64 são aceitos em números Meta Cloud API e em números não oficiais (Pilot Status web). Em números não oficiais, a Pilot Status sobe o arquivo decodificado para o próprio armazenamento e envia uma URL ao provedor; se esse upload falhar, a mensagem falha com
MEDIA_REHOST_FAILED. Para figurinhas em números não oficiais, use uma URL http(s) pública. O base64 vai até 50 MiB decodificados para document e 16 MiB para os demais tipos — envie arquivos maiores por URL.4. Acompanhar a entrega
A resposta202 retorna um id. Persista-o e:
- Consulte
GET /v1/messages/{id}paraQUEUED→SENT→DELIVERED→READ→PLAYED(ouFAILED/CANCELED), ou - Consuma webhooks — o
idda resposta corresponde ao campoidnos eventosmessage.sent,message.delivered,message.reademessage.failed.
Próximos passos
- Referência completa de campos e códigos de erro: POST /v1/messages/send
- Agendamento com
deliverAte cancelamento: DELETE /v1/messages/cancel - Diagnóstico de falhas: Códigos de erro de log