API Reference
Base URL: https://client.routeon.io/api/v1. All requests are made over HTTPS.
Explore the API interactively in the hosted Swagger UI: https://client.routeon.io/api/v1/swagger-ui/index.html.
The SMS service spans three API contracts. Each is also published as a Swagger 2.0 document you can open in any OpenAPI/Swagger viewer:
| Contract | File | Purpose |
|---|---|---|
| Single messages & OTP | openapi.yaml | Send transactional messages and OTP, read channels/senders/balance/EDRs |
| Campaigns & templates | broadcast.yaml | Bulk SMS campaigns and their templates |
| Contacts | recipients.yaml | Recipients, attributes, tags and filters |
Authentication
Send your API key in the X-API-Key header:
X-API-Key: <API_KEY>
Create keys in the Client portal under API Accesses, scoped to omni-api, Broadcasts and/or Recipients. A key works only for the scopes selected on it — see API keys & scopes. The single-message API also accepts HTTP Basic Auth as a legacy option.
Response envelope
Most responses wrap the result in a standard envelope:
{ "error": false, "data": { "channel": 1, "transactionId": "95e3e0da-…", "messageId": "6719b5f4-…" } }
Errors set error: true and carry a message plus a request id:
{ "error": true, "data": { "message": "something went wrong", "requestId": "af8c5065-5849-455b-ae1a-6a0b9f4b7209" } }
Always log
data.requestId— it is the handle support uses to find your request.
HTTP status codes
| Code | When |
|---|---|
200 |
GET endpoints, verification and revoke |
202 |
Send accepted; processing is asynchronous (status arrives via webhooks) |
400 |
Validation failed, unknown channel, malformed payload |
401 |
Missing/invalid credentials or wrong scope |
404 |
Unknown messageId, or a sender/template not visible to this account |
500 |
Platform-side error — retry with backoff |
Channel-level failures surface after the 202, via the messageStatus webhook (status: failed / undeliverable) and in EDR rows.
Endpoints
Single messages & OTP — openapi.yaml
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/channels |
List available channels |
| GET | /api/v1/senders |
List senders (status: 2 = Active) |
| GET | /api/v1/balance |
Account balances per agreement |
| GET | /api/v1/edrs |
Delivery records (up to 10 messageIds per call, limit ≤ 100) |
| GET | /api/v1/templates |
Stored content templates |
| GET | /api/v1/wa_templates |
WhatsApp (Meta-approved) templates |
| POST | /api/v1/messages |
Send a single message (SMS, OTP, …) |
| POST | /api/v1/omnimessages |
Send a per-recipient multi-channel fallback cascade |
| POST | /api/v1/messages/verification |
Check an OTP the user typed (Telegram Gateway) |
| POST | /api/v1/messages/revoke |
Revoke a verification message |
Campaigns & templates — broadcast.yaml
| Method | Path | Summary |
|---|---|---|
| POST | /api/v1/broadcast/broadcasts |
Launch a campaign |
| GET | /api/v1/broadcast/templates |
List templates |
| POST | /api/v1/broadcast/templates |
Create a template |
| GET | /api/v1/broadcast/templates/{id} |
Get a template |
| PUT | /api/v1/broadcast/templates/{id} |
Update a template |
| DELETE | /api/v1/broadcast/templates/{id} |
Delete a template |
Contacts — recipients.yaml
| Method | Path | Summary |
|---|---|---|
| GET | /api/v1/recipient/recipients |
List recipients |
| POST | /api/v1/recipient/recipients |
Create/import recipients |
| PUT | /api/v1/recipient/recipients |
Update recipients |
| DELETE | /api/v1/recipient/recipients |
Delete recipients |
| GET | /api/v1/recipient/attributes |
List attributes |
| POST | /api/v1/recipient/attributes |
Create an attribute |
| GET | /api/v1/recipient/attributes/types |
List attribute types |
| PUT | /api/v1/recipient/attributes/{id} |
Update an attribute |
| DELETE | /api/v1/recipient/attributes/{id} |
Delete an attribute |
| GET | /api/v1/recipient/filters |
List audience filters |
| GET | /api/v1/recipient/tags |
List tags |