Quickstart
Este guia leva de zero até a primeira mensagem enviada pela API: criar uma chave, fazer a primeira chamada autenticada e enviar um texto por um canal.
Crie a chave
Toda chamada à API precisa de uma credencial. Crie uma chave de API em /painel/chaves. O valor hub_pk_... aparece uma única vez, no momento da criação — se ele se perder, a única saída é revogar a chave e criar outra. Guarde-o num cofre de segredos, nunca em texto plano no repositório.
Toda requisição autenticada por chave envia esse valor no header Authorization, como Bearer hub_pk_....
Primeira requisição
Com a chave em mãos, a chamada mais simples para confirmar que tudo está funcionando é listar os canais da organização:
curl https://crprohub.com/api/v1/channels \ -H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL"
{
"data": {
"channels": [
{
"id": "9f6a9c1e-2f3d-4a5b-8c7d-1e2f3a4b5c6d",
"name": "Atendimento",
"external_id": null,
"type": "whatsapp",
"status": "active",
"waba_id": "109876543210987",
"phone_number_id": "123456789012345",
"display_phone_number": "+55 21 99999-9999",
"verified_name": "Minha Empresa",
"quality_rating": "GREEN",
"coexistence": false,
"subscribed_ok": true,
"created_at": "2026-08-01T12:00:00.000Z",
"updated_at": "2026-08-20T09:30:00.000Z"
}
]
}
}A resposta vem envelopada em {"data": ...}. Se a organização ainda não tem nenhum canal, o array channels volta vazio — crie um canal no painel antes de seguir para o próximo passo.
Envie a primeira mensagem
Enviar uma mensagem exige um header a mais: Idempotency-Key, com um valor novo (um UUID serve bem) a cada envio distinto.
curl -X POST https://crprohub.com/api/v1/channels/CHANNEL_UUID/messages \
-H "Authorization: Bearer hub_pk_EXEMPLO_NAO_REAL" \
-H "Idempotency-Key: 4a50df76-d6c5-49f3-90a4-13907579d924" \
-H "Content-Type: application/json" \
-d '{"to":"5521999999999","type":"text","text":{"body":"Olá"}}'{
"data": {
"message_id": "wamid.EXEMPLO123",
"status": "accepted"
}
}Repetir a mesma Idempotency-Key com o mesmo corpo devolve o resultado da primeira chamada, em vez de enviar a mensagem duas vezes — é seguro repetir a requisição depois de um timeout ou de uma falha de rede sem risco de duplicar o envio. A resposta é 202: a mensagem foi aceita e enfileirada para a Meta, ainda não entregue.
Receba a resposta do cliente
O estado final do envio — entregue, lida, falhou — e qualquer mensagem que o cliente responder chegam de forma assíncrona, por webhook. Configure um endpoint para recebê-los na página de webhooks.
hub_ch_...) também autentica o envio de mensagem, como alternativa à chave de API. Ele serve só para o mesmo canal que o emitiu e nunca autoriza enviar por outro canal da organização.