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

  1. Create an account and get your sender ID and templates approved (or ask us to do it).
  2. Open API keys in your account and create a key. It is shown once; store it as a secret.
  3. Send your first message with the request on the right.
  4. 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 pathWhat it does
POST /sms/sendSend one message. Returns a message id immediately; delivery follows on the webhook.
POST /sms/bulkSend 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 /balanceWallet balance and the amount reserved for queued messages.
GET /sender-idsYour approved sender IDs.
GET /templatesYour approved templates with variable counts.
POST /webhooksSet 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

HTTPCodeMeaning and fix
401UNAUTHORIZEDAPI key missing, wrong or revoked. Create a new key in your account.
403TENANT_INACTIVEYour account is not yet approved or has been suspended. Check the notice on your dashboard.
403IP_NOT_ALLOWEDRequest came from an IP not on this key's allowlist.
400INVALID_MSISDNNot a valid Indian mobile number. Use +91 followed by 10 digits.
400SENDER_ID_NOT_APPROVEDThis sender ID is not approved on your account.
400DLT_TEMPLATE_MISMATCHThe message text or variables do not match the registered template. The response shows the difference.
400PROMO_WINDOW_CLOSEDPromotional messages can only be sent 9 am–9 pm IST. Schedule it or use a transactional template if it qualifies.
402INSUFFICIENT_BALANCETop up your wallet.
429RATE_LIMITEDSlow down or use the bulk endpoint.
503UPSTREAM_UNAVAILABLETemporary 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