Pular para o conteúdo principal

Início rápido

Da conta criada à primeira mensagem entregue. Você vai precisar de um número de telefone que não esteja registrado em uma conta WhatsApp comum — apenas não conectado, ou já em uso no WhatsApp Business App (modo coexistência).

1. Conecte um número​

Entre em app.joinotify.com, crie sua conta e clique em Conectar número. O fluxo é o Embedded Signup da própria Meta: você autoriza pela janela do Facebook e volta ao painel com o número já ativo.

Ao final, o painel mostra dois identificadores que aparecem em vários endpoints:

IdentificadorO que é
phone_number_idO número conectado. Usado em envios e no perfil empresarial.
waba_idA conta empresarial (WhatsApp Business Account). Usada em templates.

2. Gere uma chave de API​

Em Chaves de API, clique em Nova chave. O segredo completo aparece uma única vez — copie e guarde em um cofre de segredos.

Resposta de POST /keys
{
"data": {
"id": "key_01J8ZK...",
"name": "producao",
"prefix": "sk_live_AbCdEf",
"environment": "live",
"createdAt": "2026-07-27T14:02:11.482Z",
"secret": "sk_live_AbCdEf0123456789abcdefgh"
},
"warning": "Store the \"secret\" now — it will not be shown again."
}
Guarde o segredo agora

Só o hash da chave fica salvo no nosso banco. Se você perder o segredo, não há como recuperá-lo — só criar uma chave nova e revogar a antiga.

3. Envie a primeira mensagem​

Substitua sk_live_xxx pelo seu token e 5541987111527 por um número que já tenha conversado com você nas últimas 24 horas.

curl
curl -X POST https://api.joinotify.com/messages \
-H 'Authorization: Bearer sk_live_xxx' \
-H 'Content-Type: application/json' \
-d '{
"type": "text",
"to": "5541987111527",
"body": "Olá! Esta é a primeira mensagem enviada pela API do Joinotify."
}'
Node.js
const response = await fetch('https://api.joinotify.com/messages', {
method: 'POST',
headers: {
Authorization: 'Bearer sk_live_xxx',
'Content-Type': 'application/json',
},
body: JSON.stringify({
type: 'text',
to: '5541987111527',
body: 'Olá! Esta é a primeira mensagem enviada pela API do Joinotify.',
}),
});

const payload = await response.json();
console.log(payload.data.messages[0].id); // wamid.HBgN...
Python
import requests

response = requests.post(
"https://api.joinotify.com/messages",
headers={"Authorization": "Bearer sk_live_xxx"},
json={
"type": "text",
"to": "5541987111527",
"body": "Olá! Esta é a primeira mensagem enviada pela API do Joinotify.",
},
timeout=30,
)

print(response.json()["data"]["messages"][0]["id"])

Uma resposta 201 traz o WAMID da mensagem — o identificador que aparece depois nos eventos de status (sent, delivered, read).

4. Receba as respostas​

Envio é metade do trabalho. Para saber quando o cliente responde, cadastre um endpoint de webhook:

curl -X POST https://api.joinotify.com/webhook-endpoints \
-H 'Authorization: Bearer sk_live_xxx' \
-H 'Content-Type: application/json' \
-d '{
"name": "producao",
"url": "https://seu-servidor.com/webhooks/joinotify",
"events": ["messages"]
}'

A resposta traz um segredo whsec_..., também exibido uma única vez, usado para validar a assinatura de cada entrega. O passo a passo está em Webhooks.

E se der erro?​

CódigoO que aconteceu
401 authenticationToken ausente, malformado, desconhecido ou revogado.
409 no_phone_numberNenhum número conectado na conta. Volte ao passo 1.
422 meta_errorA Meta recusou. O corpo traz o erro original dela em error.meta.
429 rate_limitVocê passou do limite da categoria. Veja Limites de uso.

A tabela completa está em Erros.

Fora da janela de 24 horas​

O WhatsApp só permite mensagem livre dentro de 24 horas contadas a partir da última mensagem do cliente. Fora disso, é preciso usar um template aprovado:

curl -X POST https://api.joinotify.com/messages \
-H 'Authorization: Bearer sk_live_xxx' \
-H 'Content-Type: application/json' \
-d '{
"type": "text",
"to": "5541987111527",
"name": "confirmacao_pedido",
"language": "pt_BR"
}'