Empieza gratis
NuevoRecorridos por la APIVer

Una clave, un webhook y todos los canales.

WhatsApp, SMS, RCS, email y push con la misma API REST: la misma autenticación, el mismo formato de error y los mismos webhooks firmados para estados y respuestas. Prueba con una clave de sandbox antes de enviar de verdad.

5 US$ de crédito de prueba al registrarte. Las claves de prueba nunca lo gastan.

Documento OpenAPI públicoSDK de TypeScript y CLIWebhooks firmados
Enviar una plantilla 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": "+34…",    "type": "template",    "templateId": "tpl_…",    "templateVars": ["Marina", "4821"],    "metadata": { "pedido": "4821" }  }'
201{ "id": "msg_…", "status": "queued" }
tu-sistema.com/webhooks/ccx
  • message.sentFirmado · 200Enviado a +34 6…
  • message.deliveredFirmado · 200Entregado · metadata.pedido 4821
  • message.readFirmado · 200Leído por el cliente
  • message.receivedFirmado · 200El cliente respondió: «¡Gracias, hasta hoy!»
Ejemplo de petición y de eventos de webhook. Los valores con … son de ejemplo.

Un envío. Una respuesta.

La ruta de WhatsApp recibe el número que envía, el destinatario, el tipo y el contenido. El mensaje entra en la cola al momento, y su estado llega después a tu webhook. Elige un campo para verlo en la llamada.

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": "+34…",    "type": "template",    "templateId": "tpl_…",    "templateVars": ["Marina", "4821"],    "metadata": { "pedido": "4821" }  }'
201{ "id": "msg_…", "status": "queued", … }

Fuera de la ventana de 24 horas, WhatsApp solo acepta plantillas aprobadas. El objeto completo del mensaje está en openapi.json.

Cada canal tiene su ruta. Todo lo demás es igual.

El cuerpo cambia según el canal. La clave, el formato de error y los webhooks funcionan igual en todos.

POST/messagesEnvía un texto, una plantilla, un archivo o un mensaje interactivo.
GET/messagesLista los mensajes que enviaste y recibiste.
GET/messages/{id}Lee un mensaje y su estado, si prefieres consultar.
WhatsAppLa plataforma oficial de WhatsApp Business, a través de Meta.Fuera de la ventana de 24 horas, solo plantillas aprobadas.message.sent, delivered, read, failed y received llegan a tu webhook.
Una clave por organización, con ámbitosCada clave solo puede hacer lo que permiten sus ámbitos, y va en la cabecera Authorization: Bearer.
Idempotency-Key en los envíosEn WhatsApp, SMS y push, repetir un envío con la misma clave devuelve el mensaje original en lugar de crear otro.
Errores como Problem Detailsapplication/problem+json, con un code estable, el status y un traceId para encontrar la llamada.
429 con Retry-AfterSi superas el límite de peticiones, la respuesta te dice cuánto esperar antes de volver a intentarlo.

Los estados y las respuestas te llegan firmados.

Registra una URL y elige los eventos. Antes de activarla, CCX comprueba la dirección y envía un ping firmado.

X-CCX-SignatureHMAC-SHA256 de la marca de tiempo y el cuerpo, con tu secreto, que puedes rotar cuando quieras.
X-CCX-Idempotency-KeyPara que tu sistema descarte entregas repetidas.
32 eventos para suscribirteEntrega, lectura, fallo y respuesta en WhatsApp, SMS, RCS, email e Instagram, además de los avisos de saldo.
Responde en menos de 10 sPon el trabajo en cola y devuelve 2xx al momento. Si tarda más, cuenta como fallo.
Qué pasa cuando tu endpoint responde
Cinco intentos másUn 5xx significa vuelve a intentarlo: tras 5 s, 30 s, 2 min, 10 min y 1 h.
  1. 5 s
  2. 30 s
  3. 2 min
  4. 10 min
  5. 1 h
POST https://tu-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"}

Ejemplo de entrega de webhook, resumido.

Prueba todo lo que quieras. Envía de verdad cuando estés listo.

Una clave de prueba se comporta como una de producción, pero los envíos pasan por un transporte simulado y se descuentan de una cartera de prueba que recargas gratis en el panel. En el playground, cada ruta pública se convierte en un formulario que ejecutas desde el navegador.

Una clave de prueba nunca toca Meta ni tu saldo.
En el playground, conectar una clave de producción te pide confirmar que los envíos serán reales.
El documento OpenAPI es público en ccxmessages.com/openapi.json.
SDK de TypeScript y CLI en npm: @ccx-messages/sdk y @ccx-messages/cli.
A dónde va la llamada
Tu llamadaLas mismas rutas, cabeceras y errores
TransporteSimulado
CarteraCartera de prueba, recarga gratis
Llega aNadie
No llega nada a ningún cliente y no se cobra nada de verdad.

Contactos, listas, recorridos y embudo, con la misma clave.

El contrato público tiene 125 operaciones, todas en el documento OpenAPI.

Contactos y bajas

Crea, actualiza, importa en lote y registra quién pidió no recibir mensajes.

/contacts/contacts/import

Listas y segmentos

Listas estáticas y segmentos guardados, para campañas y recorridos.

/v2/lists/v2/segments

Recorridos y eventos

Crea recorridos, añade contactos y registra compras para la atribución.

/v2/journeys/v2/events

Embudo de ventas

Embudos, etapas y tarjetas, con campos, actividades y archivos.

/pipelines

Plantillas y flows

Crea plantillas en borrador y consulta las plantillas y los flows de WhatsApp.

/v2/templates/v2/flows

Exportaciones, saldo y números

Exporta los mensajes de cada canal por periodo y consulta tu saldo y la salud de cada número.

/v2/exports/{channel}/wallet
Ver la referencia de cada ruta

Las llamadas a la API son gratis. Pagas los mensajes.

Cada mensaje sale al precio publicado de su canal. El plan mensual cubre a todo tu equipo, sin cuota por usuario.

Ver todos los precios
Lo que usasPrecio1000 mensajes
Llamadas a la APITodas las rutas, todas las clavesSin costeSin coste
WhatsApp de utilidadA España0,0216 €21,60 €
EmailCualquier destino0,00037 €0,37 €
Notificación pushAPNs, FCM o Web Push0,00018 €0,18 €
Plan mensualTodo tu equipo, sin cuota por usuariodesde 39 €/mesFijo, al mes

Tarifas internacionales en euros para destinos de la zona euro, en dólares para el resto. WhatsApp tiene precio por país de destino y categoría de mensaje. El SMS tiene precio para números de Brasil; las rutas internacionales son bajo consulta.

Lo que pregunta el equipo técnico

¿Atascado en una ruta? Habla con quienes mantienen la API.

¿La API tiene versión en la ruta?

No hay un prefijo único: el envío de WhatsApp es POST /messages y los canales más nuevos viven en /v2, como /v2/sms/messages. El documento OpenAPI público es la referencia de cada ruta.

¿Necesito el SDK?

No. Es REST con JSON, y el cURL de arriba basta. El SDK de TypeScript genera la Idempotency-Key por ti y devuelve errores tipados.

¿Cómo funciona la idempotencia?

Envía la cabecera Idempotency-Key con un valor propio, como el número de pedido. En WhatsApp, la misma clave dentro de 24 horas devuelve el mensaje original; la misma clave con otro cuerpo devuelve 409.

¿Cuál es el límite de peticiones?

Al superarlo, la API responde 429 RATE_LIMITED con la cabecera Retry-After indicando cuándo volver a intentarlo. Si tu volumen necesita más, habla con nosotros.

¿Cómo recibo el estado de entrega?

Por webhooks firmados, con los eventos que elijas. Si prefieres consultar, GET /messages/{id} devuelve el estado del mensaje.

¿Tenéis SMPP para SMS?

Sí, con conexión cifrada por TLS, para equipos que ya tienen un cliente SMPP y no quieren reescribirlo. El SMS de CCX va a números de Brasil.

¿Dónde está la referencia completa?

En el documento OpenAPI público, en ccxmessages.com/openapi.json. Lo que no está en él no es contrato y puede cambiar.

Tu primera llamada empieza con una clave de prueba.

Si creas la cuenta desde la web, recibes 5 US$ de crédito de prueba.