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.
Create your API key
Sign up, complete KYC, then generate a scoped eksms_ key from the dashboard. Revoke it anytime.
Send a message
POST to /v1/messages with X-API-Key. Same endpoint for OTP and bulk.
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"
}'
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.