{
"notification_id": "<string>",
"organization_id": "<string>",
"template_id": "<string>",
"channel": "WHATSAPP",
"recipient_full_name": "<string>",
"recipient_tax_id": "<string>",
"recipient_tax_id_type": "CPF",
"recipient_phone": "<string>",
"recipient_email": "<string>",
"contact_id": "PBD_CNT_01J9Z2Q8XK3M7WPTV6RB4CYH0N",
"line_id": "PBD_WALN_01J9Z2Q8XK3M7WPTV6RB4CYH0N",
"parameters": {
"{{1}}": "Maria"
},
"message": "<string>",
"content_sha256": "3b1c8d6e4f2a0b9c7d5e3f1a8c6d2b0e9f7a5c3d1e8f6b4a2c0d9e7f5a3b1c8d",
"message_format": "html",
"notification_status": "DRAFT",
"notification_delivery_status": "PENDING",
"sender": {
"name": "<string>",
"tax_id": "<string>",
"tax_id_type": "CPF"
},
"sender_phone": "5511952134898",
"sender_email": "ola@pombo.digital",
"created_by_type": "api_key",
"created_by_user_id": "PBD_APIKEY_01J9Z2Q8XK3M7WPTV6RB4CYH0N",
"idempotency_key": "<string>",
"batch_id": "<string>",
"batch_item_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"sent_at": "2023-11-07T05:31:56Z",
"delivered_at": "2023-11-07T05:31:56Z",
"failed_at": "2023-11-07T05:31:56Z",
"attachments": [
{
"attachment_id": "<string>",
"filename": "<string>",
"mime_type": "application/pdf",
"size_bytes": 123,
"hash": "9f2c1d7a4b6e8f0c2a4d6e8f0b1c3d5e7f9a1b3c5d7e9f1a3b5c7d9e1f3a5b7c",
"hash_algorithm": "SHA-256",
"hash_encoding": "hex"
}
]
}Enviar uma notificação
Emite uma notificação extrajudicial certificada a partir de um modelo preenchido.
{
"notification_id": "<string>",
"organization_id": "<string>",
"template_id": "<string>",
"channel": "WHATSAPP",
"recipient_full_name": "<string>",
"recipient_tax_id": "<string>",
"recipient_tax_id_type": "CPF",
"recipient_phone": "<string>",
"recipient_email": "<string>",
"contact_id": "PBD_CNT_01J9Z2Q8XK3M7WPTV6RB4CYH0N",
"line_id": "PBD_WALN_01J9Z2Q8XK3M7WPTV6RB4CYH0N",
"parameters": {
"{{1}}": "Maria"
},
"message": "<string>",
"content_sha256": "3b1c8d6e4f2a0b9c7d5e3f1a8c6d2b0e9f7a5c3d1e8f6b4a2c0d9e7f5a3b1c8d",
"message_format": "html",
"notification_status": "DRAFT",
"notification_delivery_status": "PENDING",
"sender": {
"name": "<string>",
"tax_id": "<string>",
"tax_id_type": "CPF"
},
"sender_phone": "5511952134898",
"sender_email": "ola@pombo.digital",
"created_by_type": "api_key",
"created_by_user_id": "PBD_APIKEY_01J9Z2Q8XK3M7WPTV6RB4CYH0N",
"idempotency_key": "<string>",
"batch_id": "<string>",
"batch_item_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"sent_at": "2023-11-07T05:31:56Z",
"delivered_at": "2023-11-07T05:31:56Z",
"failed_at": "2023-11-07T05:31:56Z",
"attachments": [
{
"attachment_id": "<string>",
"filename": "<string>",
"mime_type": "application/pdf",
"size_bytes": 123,
"hash": "9f2c1d7a4b6e8f0c2a4d6e8f0b1c3d5e7f9a1b3c5d7e9f1a3b5c7d9e1f3a5b7c",
"hash_algorithm": "SHA-256",
"hash_encoding": "hex"
}
]
}Authorizations
Sua credencial de API no cabeçalho Authorization: Bearer sk_live_.... Crie e revogue credenciais no painel, em Conta → API Keys. O segredo aparece uma única vez, na criação.
A credencial identifica a organização: organization_id não é aceito em nenhuma requisição.
Headers
Chave de idempotência do envio. Letras, dígitos, sublinhados e hifens.
Com a mesma chave:
- tudo igual, mesmo corpo e, se houver, mesmo arquivo:
200com o corpo original e o cabeçalhoIdempotent-Replayed: true - qualquer diferença, no corpo ou no arquivo:
409 IDEMPOTENCY_KEY_REUSED
O arquivo faz parte da chave, para que dois documentos diferentes nunca sejam confundidos com a mesma notificação. Na prática: para repetir um envio com anexo, reenvie os mesmos bytes.
A chave nunca é liberada. Para repetir um envio que falhou, use uma chave nova.
Até 255 caracteres. Uma chave mal formada é recusada com 400, sem error_code, mas não antes de tudo: o formato do corpo, o channel, file_transfer_id, attachment_id e organization_id são conferidos primeiro, e num multipart/form-data as partes já foram lidas antes disso.
^[A-Za-z0-9_-]+$"cobranca-2026-08-31-0001"
Body
Com anexo, tudo vai numa chamada só: sem anexo, application/json; com anexo, multipart/form-data com as partes notification e file. Não existe endpoint separado para subir o arquivo.
O modelo a usar. Em WhatsApp precisa estar APPROVED.
"PBD_TPL_01J9Z2Q8XK3M7WPTV6RB4CYH0N"
Em maiúsculas. Qualquer outro valor é recusado com 400 Invalid request: channel must be WHATSAPP or EMAIL.
WHATSAPP, EMAIL 1CPF (11 dígitos) ou CNPJ (14 dígitos), só dígitos.
^([0-9]{11}|[0-9]{14})$Um valor fora de CPF e CNPJ é recusado com 400.
CPF, CNPJ As variáveis do modelo. As chaves são o marcador literal, entre chaves duplas, como "{{1}}". Não é o índice 1 e não é o nome da variável.
As chaves vêm de variables em GET /templates/{id}. Envie {} se o modelo não tiver variáveis. Uma chave faltando é recusada com 400 INVALID_PARAMETERS: Missing required parameter: {{1}}.
Os marcadores do rodapé do remetente não estão entre elas e não devem ser enviados. São as três últimas variáveis do modelo, chamadas __sender_name, __sender_tax_id e __sender_phone, e o Pombo as preenche a partir do sender. Mandar o marcador de qualquer uma delas em parameters faz a chamada ser recusada.
{ "{{1}}": "Maria" }
Quem aparece como remetente da notificação. Permite enviar em nome próprio ou em nome de um cliente. Em ambos os casos o Pombo mantém o registro de qual credencial emitiu.
Não existe remetente padrão da organização nesta API: o sender é declarado em cada envio.
contact_phone e contact_email são independentes: declare um, o outro ou os dois. Nenhum dos dois é obrigatório sozinho, mas em WhatsApp, num modelo que carrega o rodapé do remetente, pelo menos um dos dois precisa estar presente, e um envio que não declara nenhum é recusado. Em e-mail nada muda: o rodapé é montado no momento do envio e simplesmente omite a linha de contato.
Hide child attributes
Hide child attributes
Razão social ou nome do remetente. No máximo 200 caracteres: acima disso a chamada é recusada com 400 INVALID_SENDER e a mensagem sender.name must be at most 200 characters.
Só texto simples. Os caracteres <, > e " e os caracteres de controle (quebras de linha incluídas) são recusados com 400 INVALID_SENDER e a mensagem sender.name must be plain text. O nome é reproduzido literalmente no rodapé do e-mail e no laudo, e uma quebra de linha forjaria uma segunda linha de rodapé.
1 - 200CPF (11 dígitos) ou CNPJ (14 dígitos), só dígitos.
A quantidade de dígitos não basta: o documento é conferido pelo dígito verificador (MOD-11) e precisa corresponder ao tax_id_type declarado: um CNPJ declarado como CPF é recusado. A recusa é 400 INVALID_SENDER, com a mensagem sender.tax_id must be a valid CPF ou sender.tax_id must be a valid CNPJ.
^([0-9]{11}|[0-9]{14})$CPF, CNPJ Um telefone para onde o destinatário pode responder, impresso no rodapé da mensagem. Não é o número de origem: esse é sender_phone, e o Pombo é quem o resolve.
Opcional. Em WhatsApp, num modelo que carrega o rodapé do remetente, é preciso declarar este campo ou contact_email: omitir os dois é recusado. Em e-mail os dois podem faltar.
Formato internacional, começando por +, com 10 a 15 dígitos. Fora desse formato a chamada é recusada com 400 INVALID_SENDER e a mensagem sender.contact_phone must be in format +CODE_PHONE with 10-15 digits (e.g., +5511999998888).
Declarando também contact_email, os dois são impressos, o telefone primeiro. Ausente, o rodapé usa o e-mail. Não há queda para o telefone da organização: o rodapé mostra apenas o que este sender declarou.
^\+[0-9]{10,15}$"+5511999998888"
Um e-mail para onde o destinatário pode responder, impresso no rodapé da mensagem, depois de contact_phone quando os dois são declarados e sozinho quando é o único.
Opcional. Em WhatsApp, num modelo que carrega o rodapé do remetente, é preciso declarar este campo ou contact_phone: omitir os dois é recusado. Em e-mail os dois podem faltar.
Precisa ser um endereço válido. Fora disso a chamada é recusada com 400 INVALID_SENDER e a mensagem sender.contact_email must be a valid email address.
Não é o endereço de origem da mensagem: esse vem do domínio verificado da organização.
"contato@empresa.com.br"
Formato internacional, começando por +. Ausente num envio de WhatsApp, a chamada é recusada com 400 e error_code igual a INVALID_RECIPIENT.
^\+[0-9]{10,15}$"+5511999998888"
Ausente num envio de e-mail, a chamada é recusada com 400 e error_code igual a INVALID_RECIPIENT.
Response
Repetição idempotente. O mesmo Idempotency-Key com o mesmo corpo (e, quando há anexo, o mesmo arquivo) devolve 200 com o corpo original da primeira chamada. Nenhuma notificação nova foi criada e nenhum envio foi descontado.
O 200 é o sinal de repetição: a primeira chamada devolve 201.
A notificação devolvida pelo envio.
A organização dona da conta e do saldo. Não confunda com sender, que é em nome de quem a notificação sai.
WHATSAPP, EMAIL CPF, CNPJ O contato do destinatário no Pombo. Os contatos são unificados pelo tax_id, então o mesmo CPF devolve o mesmo contact_id nos dois canais. É por isso que dados divergentes produzem 409 CONTACT_CONFLICT.
"PBD_CNT_01J9Z2Q8XK3M7WPTV6RB4CYH0N"
A linha de WhatsApp usada no envio. null em EMAIL.
"PBD_WALN_01J9Z2Q8XK3M7WPTV6RB4CYH0N"
O registro do que foi substituído na mensagem: as variáveis que você enviou mais os valores do rodapé do remetente que o Pombo preencheu a partir do sender. É por isso que o registro se descreve sozinho.
Não copie este mapa para um envio novo. Os três valores do rodapé não são seus para enviar, e a chamada é recusada. Reaproveite apenas as chaves que estão em variables do modelo.
{ "{{1}}": "Maria" }
A mensagem já renderizada, com parameters aplicados ao modelo. É o artefato que o carimbo do tempo cobre. Existe só na resposta: não há campo message de envio.
O resumo SHA-256 da mensagem renderizada, em hexadecimal. É a impressão digital do texto que consta no laudo: o equivalente, para a mensagem, do que hash é para o anexo.
"3b1c8d6e4f2a0b9c7d5e3f1a8c6d2b0e9f7a5c3d1e8f6b4a2c0d9e7f5a3b1c8d"
Se message é HTML ou texto simples. Sempre em minúsculas.
html, text O processamento interno no Pombo. Não indica entrega. Uma mensagem já lida foi observada aqui como PENDING. Para saber se a pessoa recebeu, use notification_delivery_status.
DRAFT, PENDING, PROCESSING, COMPLETED, FAILED O campo que responde se a mensagem chegou. Caminho normal: PENDING → ENQUEUED → SENT → DELIVERED → READ.
No envio, um EMAIL foi observado em ENQUEUED e um WHATSAPP em SENT.
Nunca retrocede, e FAILED é terminal. Você pode não observar todos os estados intermediários. Em e-mail não espere READ.
PENDING, ENQUEUED, SENT, DELIVERED, READ, FAILED O remetente como a notificação o devolve. São os dados que identificam a parte no laudo.
Os contatos de resposta não voltam aqui. Eles são declarados no envio e entregues no rodapé da mensagem, e não ficam guardados em nenhuma coluna da notificação.
O número de origem do WhatsApp, resolvido pelo Pombo a partir do pool de linhas. null em EMAIL. É o endereço de onde a mensagem realmente saiu, e é o que vai certificado no laudo. Não é sender.contact_phone, que é para onde o destinatário responde.
"5511952134898"
O endereço de origem do e-mail, resolvido pelo Pombo. null em WHATSAPP. É o endereço de onde a mensagem realmente saiu, e é o que vai certificado no laudo. Não é sender.contact_email, que é para onde o destinatário responde.
Se a sua organização não tem endereço próprio verificado (o caso comum), a mensagem sai do endereço compartilhado do Pombo, e é ele que aparece aqui.
"ola@pombo.digital"
Quem criou a notificação: api_key quando ela veio desta API, user quando alguém a criou pelo painel.
É o campo que qualifica created_by_user_id, e o único jeito correto de saber o que ele traz. Não deduza pelo formato do identificador.
api_key, user O nome engana. Quando created_by_type é api_key, este campo traz o identificador da credencial que fez o envio, PBD_APIKEY_..., e não um identificador de usuário. Com mais de uma credencial, é assim que você sabe qual delas enviou o quê.
Quando created_by_type é user, a notificação foi criada no painel e o campo traz o identificador interno de quem a criou, PBD_USR_.... É opaco de propósito: o nome e o e-mail dessa pessoa não são devolvidos por esta API.
"PBD_APIKEY_01J9Z2Q8XK3M7WPTV6RB4CYH0N"
A chave que você enviou no cabeçalho Idempotency-Key, devolvida aqui para que o registro se descreva sozinho. Só existe na resposta: no envio a chave vai no cabeçalho, nunca no corpo.
O lote a que a notificação pertence, quando veio de um envio em massa.
O item do lote correspondente a esta notificação.
Quando o Pombo entregou a mensagem ao provedor. null até o envio ocorrer.
Quando o provedor confirmou a entrega ao destinatário. null enquanto não houver confirmação.
Quando o envio falhou em definitivo. null quando não houve falha.
O anexo que viajou nesta chamada, já validado, guardado e com a sua impressão digital. Vazio quando o envio não levou arquivo.
Confira aqui, sem uma segunda chamada. Como o arquivo entra na mesma requisição, o hash já existe quando o envio responde: compare-o com o resumo do arquivo que você tinha e a verificação termina aqui.
Hide child attributes
Hide child attributes
O identificador do arquivo guardado, opaco: é o mesmo que aparece no laudo, e serve para citar um anexo específico num chamado de suporte. Não há endpoint para resolvê-lo: tudo o que você precisa conferir já está nos campos ao lado.
O nome já normalizado pelo Pombo, e o nome que o destinatário recebeu. Compare com o que você enviou: pode não ser igual.
application/pdf, image/png, image/jpeg A impressão digital do arquivo, a mesma que consta no laudo.
"9f2c1d7a4b6e8f0c2a4d6e8f0b1c3d5e7f9a1b3c5d7e9f1a3b5c7d9e1f3a5b7c"
Literalmente SHA-256, com hífen e em maiúsculas. Compare a string exata.
"SHA-256"
"hex"

