REST API Reference

Sendora Developer API

The Sendora REST API gives developers direct programmatic control over high-throughput SMS delivery, sub-second 2FA OTP codes, balance checks, scheduled broadcast drops, and automated two-way STOP opt-out compliance.

Production Base URLhttps://api.sendora.com/api/v1
Response FormatJSON (UTF-8 Encoded) with standard HTTP status

Authentication

Authenticate all requests by including your secret API key in the HTTP request headers. Sendora supports both the standard Authorization: Bearer <API_KEY> header and the custom api-key: <API_KEY> header.

// Standard Bearer Token Authorization
Authorization: Bearer sk_live_sendora_9f82d1c7e4a10
// Alternative API Key Header
api-key: sk_live_sendora_9f82d1c7e4a10
Keep your secret keys secure: Never expose your secret API keys in client-side code, mobile applications, or public GitHub repositories. Always make API calls from your secure backend servers.
POST/api/v1/send

Dispatch an SMS message immediately or schedule it for a future timestamp.

curl -X POST https://api.sendora.com/api/v1/send \
  -H "Authorization: Bearer sk_live_sendora_9f82d1c7e4a10" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+233241234567",
    "body": "Your Sendora verification OTP is 849201. Valid for 10 minutes.",
    "from": "Sendora"
  }'

Request Body Parameters

FieldTypeRequiredDescription
tostringRequiredDestination phone number in international E.164 format (e.g. +233241234567) or local format (0241234567).
bodystringRequiredThe text message content. Automatically segmented based on GSM-7 (160 chars) or Unicode (70 chars).
fromstringOptionalAlphanumeric Sender ID (up to 11 characters, e.g. Sendora). Defaults to your verified organization Sender ID.
schedulestringOptionalISO 8601 timestamp (e.g. 2026-10-20T10:00:00Z) for future scheduled delivery.

Sample 200 OK Response

{
  "id": "msg_1729000182_a8f9",
  "direction": "outbound",
  "from": "Sendora",
  "to": "+233241234567",
  "status": "delivered",
  "segments": 1,
  "cost": 0.0800,
  "currency": "GHS",
  "provider": "telecom_gateway",
  "created_at": "2026-10-16 23:15:00"
}
GET/api/v1/balance

Query your remaining prepaid wallet balance and estimated SMS units.

curl -X GET https://api.sendora.com/api/v1/balance \
  -H "Authorization: Bearer sk_live_sendora_9f82d1c7e4a10"

Sample 200 OK Response

{
  "status": "success",
  "data": {
    "currency": "GHS",
    "currency_symbol": "GH₵",
    "balance_ghs": 2450.50,
    "sms_units_remaining": 30631,
    "plan": "Pay-As-You-Go",
    "rates": {
      "mtn": 0.0800,
      "telecel": 0.0800,
      "airteltigo": 0.0800,
      "international": 0.3500
    }
  }
}

Inbound SMS & TCPA Opt-Out Webhook

Sendora automatically listens for inbound recipient replies and handles TCPA opt-out compliance. When a customer replies with STOP, CANCEL, or UNSUBSCRIBE, our system automatically adds them to your suppression list and triggers an inbound webhook.

Inbound Webhook Payload Format
{
  "event": "sms.received",
  "from": "+233241234567",
  "to": "Sendora",
  "body": "STOP",
  "action_taken": "opted_out",
  "timestamp": "2026-10-16T23:18:22Z"
}

HTTP Status Codes & Errors

The Sendora API uses standard HTTP response codes to indicate success or failure.

Status CodeMeaningRemediation
200 OKSuccessRequest processed successfully.
400 Bad RequestMissing ParametersEnsure to and body are present in JSON body.
401 UnauthorizedInvalid API KeyCheck that your Authorization: Bearer token is active.
402 Payment RequiredInsufficient Wallet CreditsTop up your wallet via Paystack or GHIPSS Bank Transfer.
429 Too Many RequestsRate LimitedExceeded 100 req/sec quota. Implement exponential backoff.

Ready to integrate Sendora into your application?

Generate free developer API keys in seconds, top up with pure Pay-As-You-Go pricing, and enjoy 99.98% delivery SLA across West Africa and globally.