The EK Message API for Nepal.

EK Message is a REST API: POST /v1/messages with an X-API-Key header sends one OTP or up to 1,000 recipients per request to NTC, Ncell and Smart Telecom, and returns a batch ID with HTTP 201. Signed webhooks report delivery.

Step 1

Create your API key

Sign up, complete KYC, then generate a scoped eksms_ key from the dashboard. Revoke it anytime.

Step 2

Send a message

POST to /v1/messages with X-API-Key. Same endpoint for OTP and bulk.

Step 3

Receive delivery webhooks

Pass a callbackUrl with the send and verify the HMAC signature on each event.

Send your first message.

Authenticate with X-API-Key and post a JSON body. Pick your language, the contract is identical.

curl -X POST https://sms-api.ekrasunya.com/v1/messages \
  -H "X-API-Key: eksms_your_api_key" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-2048-otp" \
  -d '{
    "recipients": ["9800000000"],
    "senderId": "AT_Alert",
    "text": "Your login code is 481920",
    "callbackUrl": "https://your-app.com/webhooks/sms"
  }'
delivery webhook
POST https://your-app.com/webhooks/ek-sms
X-EKSMS-Event: message.delivered
X-EKSMS-Signature: <hex HMAC-SHA256 of the raw body>

{
  "event": "message.delivered",
  "messageId": "3f1c9a52-7d4e-4b8a-9c21-5e6f0a7b8c9d",
  "batchId": "8b2e4f10-1c3d-4e5f-a6b7-c8d9e0f1a2b3",
  "recipient": "9800000000",
  "status": "DELIVERED",
  "deliveredAt": "2026-06-20T10:14:05.000Z",
  "failureReason": null
}

Push delivery, not polling.

When a message is delivered or fails, EK Message posts a message.delivered or message.failed event to the callbackUrl you sent, with up to 3 attempts. The X-EKSMS-Signature header is a hex HMAC-SHA256 of the raw body, keyed with your account's own secret.

Build with EK Message.

Create an account, complete KYC and generate a key. The full reference is in the docs.