DevelopersOne API for every message.
REST + JSON, API-key auth, and delivery receipts across MTN, Telecel, and AirtelTigo. Create an account, generate a key from your dashboard, and you're sending in minutes.
Get an API keyAuthentication
Every request is authenticated with your app's API key. Send it either as a bearer token or an X-API-KEY header โ both work. Keys are created and rotated from the Apps page in your dashboard.
Base URL: https://api.raviin.app/v1
curl -X POST https://api.raviin.app/v1/sms/send \ -H "X-API-KEY: $API_KEY" \ -H "Content-Type: application/json" \ -d '{"recipient": "+23324xxxxxxx", "message": "Your code is 4821", "sender_id": "RAVIIN"}'
{ "success": true, "status": "queued", "sender_id": "RAVIIN" }Endpoints
Everything the dashboard does, your code can do too.
/sms/sendSend a single SMS to one recipient/sms/send/bulkSend a campaign to many recipients (queued)/otp/sendGenerate and deliver a one-time password/otp/verifyVerify a code your user typed back/sms/balanceCheck your wallet balance and SMS credit/sms/logsQuery delivery logs and receiptsFrom JavaScript
Works from any runtime that can make an HTTP request โ Node, serverless functions, or your backend of choice.
await fetch("https://api.raviin.app/v1/sms/send", { method: "POST", headers: { "X-API-KEY": process.env.RAVIIN_KEY, "Content-Type": "application/json", }, body: JSON.stringify({ recipient: "+23324xxxxxxx", message: "Your order is on the way ๐", }), });
OTPs, handled for you
Don't build code generation, expiry, and retry yourself โ /otp/send creates and delivers the code, /otp/verify checks what your user typed back.
# 1. send the code curl -X POST https://api.raviin.app/v1/otp/send \ -H "X-API-KEY: $API_KEY" \ -d '{"recipient": "+23324xxxxxxx"}' # 2. verify what the user typed curl -X POST https://api.raviin.app/v1/otp/verify \ -H "X-API-KEY: $API_KEY" \ -d '{"recipient": "+23324xxxxxxx", "code": "4821"}'
Ready to ship?
Create an account, grab a key from the Apps page, and send your first message today.