A small, predictable SMS API.
Send a message with one HTTP call. Get the delivery report on your webhook. Check your balance whenever you like. That is the whole surface.
Quick start
- Create an account and get your sender ID and templates approved (or ask us to do it).
- Open API keys in your account and create a key. It is shown once; store it as a secret.
- Send your first message with the request on the right.
- Add a webhook URL under Delivery reports to receive status updates.
Base URL https://api.orionxconnect.com/v1
Authentication Authorization: Bearer <api_key>
Rate limit 20 requests per second per key. The bulk endpoint counts as one request.
# Send one message POST /v1/sms/send { "to": "+919876543210", "sender_id": "ORIONX", "template_id": "tpl_01J8K3…", "variables": ["Rahul", "4521"], "route": "otp", "client_ref": "order-88213" } # 202 Accepted { "id": "msg_01J8K4…", "status": "queued", "parts": 1, "price": 0.35, "balance_after": 1249.65 }
Endpoints
| Method and path | What it does |
|---|---|
POST /sms/send | Send one message. Returns a message id immediately; delivery follows on the webhook. |
POST /sms/bulk | Send up to 1,000 messages in one call. Returns accepted and rejected items with reasons. |
GET /sms/{id} | Current status of a message. |
GET /sms?client_ref= | Look up a message by your own reference. |
GET /balance | Wallet balance and the amount reserved for queued messages. |
GET /sender-ids | Your approved sender IDs. |
GET /templates | Your approved templates with variable counts. |
POST /webhooks | Set the URL and secret for delivery reports. |
Delivery reports
Each status change is posted to your webhook as JSON. The X-OXC-Signature header is an HMAC-SHA256 of the body using your webhook secret; verify it before trusting the payload. We retry five times over 30 minutes if your endpoint does not return 2xx.
Statuses: queued, submitted, sent, delivered, failed, rejected, expired.
# POST to your webhook URL X-OXC-Signature: sha256=3f9a… { "id": "msg_01J8K4…", "client_ref": "order-88213", "to": "+919876543210", "status": "delivered", "delivered_at": "2026-09-02T10:15:42Z", "error_code": null }
Errors
| HTTP | Code | Meaning and fix |
|---|---|---|
| 401 | UNAUTHORIZED | API key missing, wrong or revoked. Create a new key in your account. |
| 403 | TENANT_INACTIVE | Your account is not yet approved or has been suspended. Check the notice on your dashboard. |
| 403 | IP_NOT_ALLOWED | Request came from an IP not on this key's allowlist. |
| 400 | INVALID_MSISDN | Not a valid Indian mobile number. Use +91 followed by 10 digits. |
| 400 | SENDER_ID_NOT_APPROVED | This sender ID is not approved on your account. |
| 400 | DLT_TEMPLATE_MISMATCH | The message text or variables do not match the registered template. The response shows the difference. |
| 400 | PROMO_WINDOW_CLOSED | Promotional messages can only be sent 9 am–9 pm IST. Schedule it or use a transactional template if it qualifies. |
| 402 | INSUFFICIENT_BALANCE | Top up your wallet. |
| 429 | RATE_LIMITED | Slow down or use the bulk endpoint. |
| 503 | UPSTREAM_UNAVAILABLE | Temporary operator-side issue. Retry with backoff; nothing was charged. |
Downloads: OpenAPI specification, Postman collection, and sample code for Node.js, Python and PHP are available inside your account under Developers.
Get an API key in two minutes.
Free account, sandbox sender ID for testing, 50 messages on us.
Create free account