import requests
url = "https://pombo.digital/api/integrations/v1/templates/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)curl --request GET \
--url https://pombo.digital/api/integrations/v1/templates/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://pombo.digital/api/integrations/v1/templates/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"template_id": "PBD_TPL_01J9Z2Q8XK3M7WPTV6RB4CYH0N",
"organization_id": "PBD_ORG_01J8A1B2C3D4E5F6G7H8J9K0LM",
"name": "cobranca_vencida",
"channel": "whatsapp",
"body": "Prezado(a) {{1}}, consta débito de R$ {{2}} com vencimento em {{3}}.",
"template_type": "TEXT",
"language_code": "pt_BR",
"template_status": "APPROVED",
"template_origin": "ORG",
"declined_reason": null,
"rejected_reason": null,
"updated_at": "2026-08-27T14:31:52.109Z",
"variables": {
"{{1}}": {
"variable_name": "nome",
"variable_example": "Maria Silva"
},
"{{2}}": {
"variable_name": "valor",
"variable_example": "1.250,00"
},
"{{3}}": {
"variable_name": "vencimento",
"variable_example": "10/09/2026"
}
},
"created_at": "2026-08-27T14:03:11.482Z"
}Consulta um modelo.
Devolve um modelo pelo template_id.
Chame antes de cada envio. As chaves de variables são as que parameters precisa preencher em POST /notifications, e é aqui que você confere o template_status.
Não acrescente ?organization_id=: a credencial já diz a organização, e o parâmetro é recusado com 400 ORGANIZATION_ID_FORBIDDEN.
import requests
url = "https://pombo.digital/api/integrations/v1/templates/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)curl --request GET \
--url https://pombo.digital/api/integrations/v1/templates/{id} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://pombo.digital/api/integrations/v1/templates/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"template_id": "PBD_TPL_01J9Z2Q8XK3M7WPTV6RB4CYH0N",
"organization_id": "PBD_ORG_01J8A1B2C3D4E5F6G7H8J9K0LM",
"name": "cobranca_vencida",
"channel": "whatsapp",
"body": "Prezado(a) {{1}}, consta débito de R$ {{2}} com vencimento em {{3}}.",
"template_type": "TEXT",
"language_code": "pt_BR",
"template_status": "APPROVED",
"template_origin": "ORG",
"declined_reason": null,
"rejected_reason": null,
"updated_at": "2026-08-27T14:31:52.109Z",
"variables": {
"{{1}}": {
"variable_name": "nome",
"variable_example": "Maria Silva"
},
"{{2}}": {
"variable_name": "valor",
"variable_example": "1.250,00"
},
"{{3}}": {
"variable_name": "vencimento",
"variable_example": "10/09/2026"
}
},
"created_at": "2026-08-27T14:03:11.482Z"
}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.
Path Parameters
O identificador do modelo.
^PBD_TPL_[0-9A-HJKMNP-TV-Z]{26}$"PBD_TPL_01J9Z2Q8XK3M7WPTV6RB4CYH0N"
Response
O modelo.
whatsapp, email O body com cada marcador substituído pelo variable_example da variável, entre colchetes. Montado pelo Pombo, serve para pré-visualizar o texto sem preencher nada.
O tipo de cabeçalho. DOCUMENT e IMAGE são os que levam arquivo; TEXT é só texto.
VIDEO e LOCATION podem aparecer em modelos antigos e não são aceitos ao criar um modelo novo. Um envio com eles não leva arquivo.
DOCUMENT, IMAGE, LOCATION, TEXT, VIDEO pt_BR, en_US, es_ES Só um modelo APPROVED pode ser usado em um envio de WhatsApp. A aprovação é da Meta, não do Pombo.
Um modelo de whatsapp nasce PENDING: consulte GET /templates/{id} até chegar a APPROVED, e crie os seus modelos com antecedência, porque um envio com modelo não aprovado é recusado com 422.
Um modelo de email nasce APPROVED e serve para enviar na mesma hora.
PENDING, APPROVED, REJECTED, PAUSED, DISABLED, DELETED, IN_APPEAL, FLAGGED, FAILED SYSTEM são modelos do catálogo do Pombo; ORG, os da sua organização.
SYSTEM, ORG Anotação de quem criou o modelo, sem efeito nenhum: nada no envio a consulta, e enviar sem arquivo não é recusado por causa dela. Não a envie.
Um modelo de whatsapp devolve sempre null, tenha você enviado o campo ou não; só um modelo de email devolve o valor como chegou.
Para um modelo que leve arquivo, o campo que importa é template_type, com DOCUMENT ou IMAGE.
As variáveis do modelo. Estas chaves são as de parameters no envio.
Hide child attributes
Hide child attributes
Hide child attributes
Hide child attributes
Um rótulo seu, para se orientar. Não é a chave.
"nome"
Um valor de exemplo. Em whatsapp a Meta o usa para aprovar o modelo.
Em email a marcação é removida antes de armazenar, então um exemplo com HTML volta sem ele em GET /templates/{id}.
"Maria Silva"
Campo histórico, sem efeito: não é o assunto que o destinatário recebe. O assunto de um e-mail é montado no momento do envio a partir do nome da organização.
Sempre null em um modelo criado pela API, nos dois canais: o campo não é gravado na criação. Só traz conteúdo em modelos antigos.
Por que a Meta recusou o modelo, quando template_status é REJECTED ou FAILED. null enquanto não houve recusa.
ABUSIVE_CONTENT e SCAM exigem reescrever o texto. INVALID_FORMAT, TAG_CONTENT_MISMATCH e INCORRECT_CATEGORY são erros de forma. REVIEW_TIMEOUT é falha da própria revisão e um modelo novo com o mesmo texto pode passar.
ABUSIVE_CONTENT, SCAM, INVALID_FORMAT, TAG_CONTENT_MISMATCH, INCORRECT_CATEGORY, REVIEW_TIMEOUT, UNKNOWN, null O motivo em texto livre, como o provedor o enviou. Não é estável e não deve ser comparado em código: para ramificar, use declined_reason.
A última alteração do registro. Muda sem você fazer nada: a Meta atualiza o status e a categoria por webhook, e cada atualização mexe neste campo.

