Introduction
The ACE SEND API lets your systems — a CRM, a game platform, a payment backend — send WhatsApp and SMS messages through ACE SEND, follow their delivery and keep the contacts of your account up to date.
Everything you do in the API belongs to your account in the console: the balance that pays for messages, the templates your team created, the contacts and the stop lists.
What you can do
| Task | How |
|---|---|
| Send a WhatsApp or SMS message | POST /v1/messages with a template of your account |
| Send a one-time code or an own SMS text | POST /v1/messages with channel: "sms" and text — when your account allows own texts |
| Know what happened to a message | webhooks, or GET /v1/messages/{id} |
| Find messages by your own id, number or status | GET /v1/messages |
| See which templates you can send | GET /v1/templates |
| Keep contacts and their fields in sync for campaigns | POST /v1/contacts |
Campaigns, template editing and moderation, contact imports, reports and billing stay in the console.
The basics
- Base URL:
https://api.ace-send.com/v1. HTTPS only. - Authentication: every request carries an API key:
Authorization: Bearer ak_live_…. See Authentication. - Test and live: a test key (
ak_test_…) sends through a free sandbox that never reaches a phone. Build and test your integration with it, then switch the key. - JSON: send
Content-Type: application/json; answers are JSON. Errors areapplication/problem+jsonwith a stable machine-readablecode— see Errors. - Asynchronous delivery:
POST /v1/messagesanswers202 Acceptedonce the message is queued. Its statuses come later, as webhooks.
Conventions
| What | Format | Example |
|---|---|---|
| Phone numbers | E.164: +, country code, number — no spaces or dashes | +5521998120937 |
| Ids | a type prefix and a random part; treat them as opaque strings up to 64 characters | msg_CgdWeHQN4sPaZnXfh7kP5 |
| Timestamps | ISO 8601 in UTC, seconds precision | 2026-11-02T12:00:04+00:00 |
| Money | an object with a decimal string (6 digits after the point) and an ISO 4217 currency | {"amount": "0.062500", "currency": "USD"} |
| Countries | ISO 3166-1 alpha-2 | BR |
| Template languages | as in the template: en, pt, pt_BR… | pt |
Id prefixes: msg_ message, cnt_ contact, cmp_ campaign, whd_ webhook delivery, whe_ webhook address.
Languages of texts. Error titles, field messages and failure texts follow the Accept-Language header: English (default), Portuguese, Spanish, Turkish or Russian. Codes never change with the language — build your logic on codes, show titles to people. Webhooks are always in English.
Compatibility. Within v1 we add things without notice: new fields in answers and webhook bodies, new endpoints, new optional request fields, new webhook events, error codes, failure codes and enum values. Ignore what you do not know rather than failing on it. Removing or renaming a field, or changing its meaning, would be a new version. See the changelog.
Machine-readable spec
The whole API is described in OpenAPI 3.1, examples and webhooks included: https://docs.ace-send.com/openapi.json. Import it into Postman, Insomnia or a client generator.