Criar conta grátis
NovoJornadas pela APIVer

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.

Documento OpenAPI públicoSDK TypeScript e CLIWebhooks assinados
Enviar um template de WhatsAppPOST /messages
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" }  }'
201{ "id": "msg_…", "status": "queued" }
seu-sistema.com/webhooks/ccx
  • 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!”
Exemplo de chamada e de eventos de webhook. Valores com … são exemplos.

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.

POST /messages
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" }  }'
201{ "id": "msg_…", "status": "queued", … }

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.

POST/messagesEnvia texto, template, mídia ou mensagem interativa.
GET/messagesLista as mensagens que você enviou e recebeu.
GET/messages/{id}Lê uma mensagem e o status dela, se você preferir consultar.
WhatsAppA plataforma oficial do WhatsApp Business, pela Meta.Fora da janela de 24 horas, só template aprovado.message.sent, delivered, read, failed e received chegam ao seu webhook.
Chave por organização, com escopoCada chave só faz o que os escopos dela permitem, e vai no cabeçalho Authorization: Bearer.
Idempotency-Key nos enviosNo WhatsApp, no SMS e no push, repetir o envio com a mesma chave devolve a mensagem original em vez de criar outra.
Erros no formato Problem Detailsapplication/problem+json, com code estável, status e traceId para você achar a chamada.
429 com Retry-AfterPassou do limite de requisições, a resposta diz quanto esperar antes de tentar de novo.

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.

X-CCX-SignatureHMAC-SHA256 do carimbo de tempo e do corpo, com o seu segredo, que você troca quando quiser.
X-CCX-Idempotency-KeyPara o seu sistema descartar entregas repetidas.
32 eventos para assinarEntrega, leitura, falha e resposta no WhatsApp, SMS, RCS, e-mail e Instagram, além dos avisos de saldo.
Responda em até 10 sEnfileire o processamento e devolva 2xx na hora. Passou disso, conta como falha.
O que acontece quando o seu endpoint responde
Mais cinco tentativasUm 5xx quer dizer tente de novo: depois de 5 s, 30 s, 2 min, 10 min e 1 h.
  1. 5 s
  2. 30 s
  3. 2 min
  4. 10 min
  5. 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.

A chave de teste nunca toca a Meta nem o seu saldo.
No playground, ligar uma chave de produção pede que você confirme que os envios serão de verdade.
O documento OpenAPI fica público em ccxmessages.com/openapi.json.
SDK TypeScript e CLI no npm: @ccx-messages/sdk e @ccx-messages/cli.
Para onde vai a chamada
Sua chamadaMesmas rotas, cabeçalhos e erros
TransporteSimulado
CarteiraCarteira de teste, recarga grátis
Chega aNinguém
Nada chega a cliente nenhum e nada é debitado de verdade.

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/import

Listas e segmentos

Listas estáticas e segmentos salvos, para campanhas e jornadas.

/v2/lists/v2/segments

Jornadas e eventos

Crie jornadas, ponha contatos nelas e registre compras para a atribuição.

/v2/journeys/v2/events

Funil de vendas

Funis, etapas e cards, com campos, atividades e arquivos.

/pipelines

Templates e flows

Crie templates em rascunho e consulte templates e flows do WhatsApp.

/v2/templates/v2/flows

Exportaçã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}/wallet
Ver a referência de cada rota

A 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ê usaPreçoA cada 1.000 mensagens
Chamadas à APIToda rota, toda chaveSem custoSem custo
WhatsApp de utilidadePara números do Brasila partir de R$ 0,065a partir de R$ 65,00
E-mailQualquer destinoR$ 0,0026R$ 2,60
Notificação pushAPNs, FCM ou Web Pusha partir de R$ 0,0008a partir de R$ 0,80
Plano mensalO time inteiro, sem cobrança por usuárioa partir de R$ 129,90 por mêsFixo, 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.

O que o time técnico pergunta

Travou em alguma rota? Fale com quem mantém a API.

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.