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.
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" } }'
- 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!»
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.
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" } }'
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.
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.
- 5 s
- 30 s
- 2 min
- 10 min
- 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.
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/importListas y segmentos
Listas estáticas y segmentos guardados, para campañas y recorridos.
/v2/lists/v2/segmentsRecorridos y eventos
Crea recorridos, añade contactos y registra compras para la atribución.
/v2/journeys/v2/eventsEmbudo de ventas
Embudos, etapas y tarjetas, con campos, actividades y archivos.
/pipelinesPlantillas y flows
Crea plantillas en borrador y consulta las plantillas y los flows de WhatsApp.
/v2/templates/v2/flowsExportaciones, 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}/walletLas 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 usas | Precio | 1000 mensajes |
|---|---|---|
| Llamadas a la APITodas las rutas, todas las claves | Sin coste | Sin coste |
| WhatsApp de utilidadA España | 0,0216 € | 21,60 € |
| EmailCualquier destino | 0,00037 € | 0,37 € |
| Notificación pushAPNs, FCM o Web Push | 0,00018 € | 0,18 € |
| Plan mensualTodo tu equipo, sin cuota por usuario | desde 39 €/mes | Fijo, 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.