Start free
Solutions by teamProduct & engineering

Messaging inside your product, behind one API.

WhatsApp, SMS, email and push through the same REST API, with signed webhooks for statuses and replies, idempotent sends and test keys that never touch your balance. Your team ships features, not carrier integrations.

Public OpenAPI documentTypeScript SDK and CLISigned webhooks

Sign up through the site and get a US$5 test credit.

Send a WhatsApp template
curl -X POST https://api.messages.ccxcompany.co/messages \  -H "Authorization: Bearer $CCX_API_KEY" \  -H "Content-Type: application/json" \  -H "Idempotency-Key: order-4821" \  -d '{    "numberId": "num_…",    "to": "+14155550123",    "type": "template",    "templateId": "tpl_…",    "templateVars": ["Marina", "4821"],    "metadata": { "order": "4821" }  }' → 201 Created{ "id": "msg_…", "status": "queued" }
message.sentSent to the customerSigned
message.deliveredDelivered · metadata.order 4821Signed
message.readRead by the customerSigned
message.receivedCustomer replied: “Thanks, see you today!”Signed
Sample request and webhook events. Values with … are placeholders.

What changes for the product team.

Four pieces of the public contract. The reference and the quickstart have the details.

One contract for every channel

The same key, the same Problem Details errors and the same webhooks for WhatsApp, SMS, email and push. The body changes by channel; nothing else does.

Explore the API

Webhooks you can trust

Each delivery is signed with HMAC-SHA256. Your endpoint has 10 seconds to answer, and a 5xx, 408, 429 or timeout is retried after 5 s, 30 s, 2 min, 10 min and 1 h.

Read about webhooks

Test without spending

A ccx_test_ key behaves like a production key, but sends go through a simulated transport and a test wallet you top up for free.

See test keys

Journeys from your events

Post an event from your product and a journey takes it from there: waits, conditions, A/B tests and a signed webhook back to you.

Explore journeys

From the first key to production.

The path most teams take, in the order the docs walk through it.

  1. Key

    Create a test key

    Scoped to what it can do, and sent as a Bearer token.

  2. Send

    Send the first message

    POST /messages answers 201 with the message queued.

  3. Webhook

    Subscribe a URL

    CCX checks the address and sends a signed ping before it goes live.

  4. Retry

    Make it safe to repeat

    On WhatsApp, SMS and push, an Idempotency-Key returns the original message instead of sending twice.

  5. Live

    Switch to a live key

    The key stored on our side decides the environment, not the request body.

Core.IATech company

Teams that build on the API.

Core.IA embeds messaging in its own product through the API. Rumo.tv sends its subscribers' access codes by SMS over SMPP.

We wanted to stop maintaining integrations and get back to writing product. The API delivered that: one contract, one webhook, and Meta stopped being our problem.

Engineering team, Core.IA
Read the customer story
Rumo.tvStreaming platform
2.4 sfrom send to carrier confirmation, at the median
Measured in production, September and October 2026.

API calls are free. You pay for messages.

Each message goes out at its channel's published price. Test keys and the sandbox cost nothing, and the plan covers your whole team.

API callsNo charge
WhatsApp · utilityUS$0.0270
SMSBrazilian numbers, on request
EmailUS$0.40 per 1,000
PushUS$0.20 per 1,000
Test keys and sandboxNo charge
Plansfrom US$39/mo

International price list in US dollars. WhatsApp prices are for messages to the United Kingdom; each destination country has its own price.

What 1,000 messages costMessages to the United States, in US dollars
WhatsApp · utilityUS$27.00
WhatsApp · authenticationUS$27.00
EmailUS$0.40
PushUS$0.20
Published prices per 1,000, at the current price list.

What engineers ask before they integrate

Still unsure? Talk to the team that runs the platform.

Is there an SDK?

Yes: a TypeScript SDK and a CLI on npm, @ccx-messages/sdk and @ccx-messages/cli. The OpenAPI document is public, so you can generate a client in any language.

How do I test without sending real messages?

Use a ccx_test_ key. Sends go through a simulated transport and a test wallet you top up for free, and nothing reaches a customer.

What happens if my webhook is down?

A 5xx, 408, 429 or no answer within 10 seconds is retried after 5 s, 30 s, 2 min, 10 min and 1 h. Any other 4xx is final, and a 410 cancels the subscription.

Can I retry a send safely?

Yes, on WhatsApp, SMS and push: the same Idempotency-Key within 24 hours returns the original message, and the same key with a different body returns 409.

Do you support SMPP?

Yes, SMPP over TLS for teams that already run an SMPP client. SMS goes to Brazilian numbers; international routes are on request.

How much does it cost?

API calls are free. You pay the monthly plan, from US$39, plus each message at its channel's published price.

Get a test key and send your first message.

Sign up through the site and get a US$5 test credit.