curl --request POST \
--url https://api.ararahq.com/v1/templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "pedido_confirmado",
"category": "UTILITY",
"body": "Oi {{1}}, seu pedido {{2}} foi confirmado. Total: R$ {{3}}."
}
'{
"id": "a7f3c1e2-4b5d-6789-abcd-ef0123456789",
"name": "pedido_confirmado",
"formattedName": "pedido_confirmado",
"category": "UTILITY",
"originalCategory": "UTILITY",
"language": "pt_BR",
"providerName": "GUPSHUP",
"providerTemplateId": "4c1f0e9a-2b3d-4e5f-8a6b-7c8d9e0f1a2b",
"providerStatus": "PENDING",
"rejectionReason": null,
"availableForSending": true,
"unavailableReason": null,
"bodyPreview": "Oi {{1}}, seu pedido {{2}} foi confirmado. Total: R$ {{3}}.",
"structureJson": {},
"usageGuide": {
"message": "Use o objeto 'variables' no envio da mensagem para substituir os placeholders.",
"endpoint": "POST /v1/messages"
},
"variablesSchema": {
"1": "João",
"2": "12345",
"3": "147,90"
},
"createdAt": "2026-09-15T14:30:00Z",
"updatedAt": null
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "O número do recebedor é obrigatório",
"details": {}
}
}{
"timestamp": "2026-09-15T14:30:00.000+00:00",
"status": 401,
"error": "Unauthorized",
"path": "/v1/messages"
}{
"error": {
"code": "PLAN_LIMIT_REACHED",
"message": "Limite de templates do plano atingido.",
"details": {
"feature": "TEMPLATES",
"current": 3,
"max": 3,
"currentPlan": "FREE",
"upgradeTo": "ESSENTIAL"
}
}
}{
"error": {
"code": "CONFLICT",
"message": "Já existe um template com o nome 'pedido_confirmado'.",
"details": {}
}
}{
"error": {
"code": "UNPROCESSABLE_ENTITY",
"message": "O corpo não pode começar nem terminar com uma variável.",
"details": {}
}
}{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Muitas requisições. Tente de novo em instantes.",
"details": {}
}
}Criar template
Cria o template e envia para aprovação da Meta. providerStatus nasce
PENDING; o resultado chega pelo webhook template.updated.
- O nome é único por conta WhatsApp Business. Repetido:
409 CONFLICT. - Em
AUTHENTICATIONo conteúdo é fixo: a Arara envia à Meta o texto{{1}} é o seu código de verificaçãocom um botão de copiar código, empt_BR.body,buttonselanguageenviados não mudam o template aprovado. No envio, passe o código como única variável. - Exige conta ativa (
403 ACCOUNT_NOT_ACTIVATED). - Os planos atuais não têm limite de templates. Contas no plano Free legado
têm teto de 3 templates aprovados e recebem
403 PLAN_LIMIT_REACHED.
Permissão: TEMPLATES_WRITE.
curl --request POST \
--url https://api.ararahq.com/v1/templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "pedido_confirmado",
"category": "UTILITY",
"body": "Oi {{1}}, seu pedido {{2}} foi confirmado. Total: R$ {{3}}."
}
'{
"id": "a7f3c1e2-4b5d-6789-abcd-ef0123456789",
"name": "pedido_confirmado",
"formattedName": "pedido_confirmado",
"category": "UTILITY",
"originalCategory": "UTILITY",
"language": "pt_BR",
"providerName": "GUPSHUP",
"providerTemplateId": "4c1f0e9a-2b3d-4e5f-8a6b-7c8d9e0f1a2b",
"providerStatus": "PENDING",
"rejectionReason": null,
"availableForSending": true,
"unavailableReason": null,
"bodyPreview": "Oi {{1}}, seu pedido {{2}} foi confirmado. Total: R$ {{3}}.",
"structureJson": {},
"usageGuide": {
"message": "Use o objeto 'variables' no envio da mensagem para substituir os placeholders.",
"endpoint": "POST /v1/messages"
},
"variablesSchema": {
"1": "João",
"2": "12345",
"3": "147,90"
},
"createdAt": "2026-09-15T14:30:00Z",
"updatedAt": null
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "O número do recebedor é obrigatório",
"details": {}
}
}{
"timestamp": "2026-09-15T14:30:00.000+00:00",
"status": 401,
"error": "Unauthorized",
"path": "/v1/messages"
}{
"error": {
"code": "PLAN_LIMIT_REACHED",
"message": "Limite de templates do plano atingido.",
"details": {
"feature": "TEMPLATES",
"current": 3,
"max": 3,
"currentPlan": "FREE",
"upgradeTo": "ESSENTIAL"
}
}
}{
"error": {
"code": "CONFLICT",
"message": "Já existe um template com o nome 'pedido_confirmado'.",
"details": {}
}
}{
"error": {
"code": "UNPROCESSABLE_ENTITY",
"message": "O corpo não pode começar nem terminar com uma variável.",
"details": {}
}
}{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Muitas requisições. Tente de novo em instantes.",
"details": {}
}
}Authorizations
Chave de API da Arara (ara_live_...), enviada no header Authorization: Bearer ara_live_.... Crie e gerencie as chaves no painel: https://app.ararahq.com/dashboard/apikeys. O valor completo aparece uma única vez, na criação.
Body
Nome do template. Único por conta WhatsApp Business.
"pedido_confirmado"
Categoria avaliada pela Meta. Em AUTHENTICATION o conteúdo é fixo (veja a descrição do endpoint).
MARKETING, UTILITY, AUTHENTICATION Texto com variáveis {{1}}, {{2}}... Não pode começar nem terminar com variável.
Idioma do template.
Cabeçalho: texto simples ou URL de mídia.
Tipo do cabeçalho.
text, media, document Rodapé.
Até 10 botões, com no máximo 2 de link (URL + SMART_LINK), 1 de telefone e 1 de formulário.
Show child attributes
Show child attributes
Exemplo por número da variável ({"1": "João"}). A Meta usa na revisão. Precisa ser objeto: array responde 400 INVALID_JSON.
Show child attributes
Show child attributes
Legado. Prefira samples.
Carrossel, de 2 a 10 cards. Todos os cards precisam ter a mesma estrutura de botões.
2 - 10 elementsShow child attributes
Show child attributes
Response
Template criado
ID do template (UUID).
Categoria atual. A Meta pode mudar a categoria na revisão.
"GUPSHUP"
Status de aprovação:
PENDING: em revisão.APPROVED: pronto para enviar.REJECTED: reprovado. VejarejectionReason.PAUSED: pausado pela Meta ou pela proteção automática da Arara. O envio responde422 TEMPLATE_PAUSED.DISABLED: desativado. O envio responde422 TEMPLATE_NOT_SENDABLE.
"APPROVED"
false quando o template foi aprovado em um número que a organização não usa mais. Recrie o template no número ativo.
Categoria pedida na criação.
Corpo do template, com os marcadores de variável.
Exemplos por número da variável.
Show child attributes
Show child attributes