Uma chave, um webhook e todos os canais.
WhatsApp, SMS, RCS, e-mail e push pela mesma API REST: a mesma autenticação, o mesmo formato de erro e os mesmos webhooks assinados para status e respostas. Teste com uma chave de sandbox antes de enviar de verdade.
R$ 10 de crédito de teste no cadastro. A chave de teste nunca gasta esse crédito.
curl -X POST https://api.messages.ccxcompany.co/messages \ -H "Authorization: Bearer $CCX_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: pedido-4821" \ -d '{ "numberId": "num_…", "to": "+5511…", "type": "template", "templateId": "tpl_…", "templateVars": ["Marina", "4821"], "metadata": { "pedido": "4821" } }'
- message.sentAssinado · 200Enviada para +55 11 9…
- message.deliveredAssinado · 200Entregue · metadata.pedido 4821
- message.readAssinado · 200Lida pelo cliente
- message.receivedAssinado · 200O cliente respondeu: “Obrigada, até hoje!”
Um envio. Uma resposta.
A rota de WhatsApp recebe de qual número sai, para quem vai, o tipo e o conteúdo. A mensagem entra na fila na hora, e o status chega depois, no seu webhook. Escolha um campo para vê-lo na chamada.
curl -X POST https://api.messages.ccxcompany.co/messages \ -H "Authorization: Bearer $CCX_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: pedido-4821" \ -d '{ "numberId": "num_…", "to": "+5511…", "type": "template", "templateId": "tpl_…", "templateVars": ["Marina", "4821"], "metadata": { "pedido": "4821" } }'
Fora da janela de 24 horas, o WhatsApp só aceita template aprovado. O objeto completo da mensagem está no openapi.json.
Cada canal tem a sua rota. O resto é igual.
O corpo muda conforme o canal. A chave, o formato de erro e os webhooks funcionam do mesmo jeito em todos.
Status e respostas chegam até você, assinados.
Inscreva uma URL e escolha os eventos. Antes de valer, a CCX confere o endereço e manda um ping assinado.
- 5 s
- 30 s
- 2 min
- 10 min
- 1 h
POST https://seu-sistema.com/webhooks/ccxX-CCX-Signature: t=1791300000,v1=5f2c…X-CCX-Event: message.deliveredX-CCX-Delivery-Id: …X-CCX-Idempotency-Key: … { "event": "message.delivered", "messageId": "msg_…", "channel": "whatsapp", "metadata": { "pedido": "4821" }, "occurredAt": "2026-10-06T14:02:11Z"}
Exemplo de entrega de webhook, resumido.
Teste à vontade. Envie de verdade quando quiser.
Uma chave de teste responde igual à de produção, mas o envio passa por um transporte simulado e debita uma carteira de teste que você recarrega de graça no painel. No playground, cada rota pública vira um formulário que você executa do navegador.
Contatos, listas, jornadas e funil, com a mesma chave.
São 125 operações no contrato público, todas no documento OpenAPI.
Contatos e opt-out
Crie, atualize, importe em lote e registre quem pediu para não receber.
/contacts/contacts/importListas e segmentos
Listas estáticas e segmentos salvos, para campanhas e jornadas.
/v2/lists/v2/segmentsJornadas e eventos
Crie jornadas, ponha contatos nelas e registre compras para a atribuição.
/v2/journeys/v2/eventsFunil de vendas
Funis, etapas e cards, com campos, atividades e arquivos.
/pipelinesTemplates e flows
Crie templates em rascunho e consulte templates e flows do WhatsApp.
/v2/templates/v2/flowsExportação, saldo e números
Exporte as mensagens de cada canal por período, consulte o saldo e a saúde de cada número.
/v2/exports/{channel}/walletA API não cobra por chamada. Você paga as mensagens.
Cada mensagem sai pelo preço publicado do canal. O plano mensal cobre o time inteiro, sem cobrança por usuário.
Ver todos os preços| O que você usa | Preço | A cada 1.000 mensagens |
|---|---|---|
| Chamadas à APIToda rota, toda chave | Sem custo | Sem custo |
| WhatsApp de utilidadePara números do Brasil | a partir de R$ 0,065 | a partir de R$ 65,00 |
| E-mailQualquer destino | R$ 0,0026 | R$ 2,60 |
| Notificação pushAPNs, FCM ou Web Push | a partir de R$ 0,0008 | a partir de R$ 0,80 |
| Plano mensalO time inteiro, sem cobrança por usuário | a partir de R$ 129,90 por mês | Fixo, por mês |
Tabela em reais. WhatsApp e push ficam mais baratos conforme o volume do mês; o "a partir de" é a última faixa. O preço do WhatsApp para outros países está na página de preços.
A API tem versão no caminho?
Não existe um prefixo único: o envio de WhatsApp é POST /messages e os canais mais novos vivem em /v2, como /v2/sms/messages. O documento OpenAPI público é a referência de cada rota.
Preciso do SDK?
Não. É REST com JSON, e o cURL acima basta. O SDK de TypeScript gera a Idempotency-Key sozinho e devolve erros tipados.
Como funciona a idempotência?
Mande o cabeçalho Idempotency-Key com um valor seu, como o número do pedido. No WhatsApp, a mesma chave dentro de 24 horas devolve a mensagem original; a mesma chave com outro corpo dá 409.
Qual é o limite de requisições?
Ao passar do limite, a API responde 429 RATE_LIMITED com o cabeçalho Retry-After dizendo quando tentar de novo. Se o seu volume pede mais, fale com a gente.
Como recebo o status de entrega?
Por webhook assinado, com os eventos que você escolher. Se preferir consultar, GET /messages/{id} devolve a situação da mensagem.
Tem SMPP para SMS?
Tem, com conexão cifrada por TLS, para quem já tem um cliente SMPP e não quer reescrever a integração. O SMS da CCX é para números do Brasil.
Onde está a referência completa?
No documento OpenAPI público, em ccxmessages.com/openapi.json. O que não está nele não é contrato e pode mudar.
Sua primeira chamada começa com uma chave de teste.
Criando a conta pelo site, você ganha R$ 10 de crédito de teste.