eSMS Verify
eSMS Verify
Managed phone verification and OTP across Africa - generate, send, rate-limit, expire and check one-time codes in two API calls.
eSMS Verify runs the whole one-time-passcode (OTP) flow for you. It generates the code, sends it on a priority route, stores it hashed, expires it, rate-limits it and validates the user's input. You call two endpoints - start and check - and never store or compare codes yourself.
Why Verify
- Two calls to ship.
POST /v1/verify/startsends the code;POST /v1/verify/checkvalidates it. That is the entire integration. - You are never charged for a code that didn't send. A gateway rejection refunds
automatically and returns
502 otp_send_failed- never a silent "pending" you can't complete. - Test keys work end-to-end.
esms_test_keys don't send real SMS; the response returns asandbox_codeand the fixed code000000always passescheck. - Safe retries. An
Idempotency-Keyheader makes a repeatedstartreturn the original verification instead of sending a second code. - Verify Apps. Bundle your brand, template, allowed countries and OTP policy into an
app and pass its
app_id- see Verify Apps. - 54-country coverage on direct operator routes, with priority routing for fast delivery.
Quickstart
# 1. Start - eSMS generates and sends the code
curl -X POST https://sms.esmsafrica.io/v1/verify/start \
-H "Authorization: Bearer esms_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "to": "+254712345678", "app_id": "vera_ab12cd34ef56gh78ij90" }'
# 2. Check - validate the code the user typed
curl -X POST https://sms.esmsafrica.io/v1/verify/check \
-H "Authorization: Bearer esms_live_your_api_key" \
-H "Content-Type: application/json" \
-d '{ "verification_id": "ver_9f8c1234ab", "code": "482193" }'Create a free account at auth.esmsafrica.io,
grab an API key, and try it with a esms_test_ key first - no SMS is sent and there is no charge.