Two calls. That's the whole integration.
Send an OTP, get an otp_id, verify it. No SDK, no sessions, no template setup.
Send and verify SMS OTPs with a clean REST API. Instant delivery, encrypted storage, auto-refunds and prices from just ₹0.40 per OTP.
curl -X POST https://otpflow.in/send-otp \
-H "Authorization: Bearer otpf_…" \
-H "Content-Type: application/json" \
-d '{ "number": "9876543210",
"purpose": "login",
"ttl": 10 }'
# → 200 OK
{
"success": true,
"otp_id": "otp_k3J9xQ2mP0aZ7Vb1",
"expires_at": "2026-01-01T10:10:00.000Z",
"cost": 0.4
}Purpose-built for transactional OTP traffic — nothing you don't need, everything you do.
Send an OTP, get an otp_id, verify it. No SDK, no sessions, no template setup.
Pre-approved routes keep OTPs fast, even at peak hours.
Stored AES-256 encrypted, compared in constant time, gone after one use.
Send your own code, or let us generate a secure one.
Skip the paperwork and approvals. Sign in, add funds, send.
No subscription. Top up with what you already use and pay only for what you send.
If the SMS can't be handed to the carrier, you're never charged. The wallet is refunded instantly.
Balance, OTP history, verification rate, transactions and API keys in one dashboard.
A machine-readable OpenAPI spec and llms.txt let coding assistants integrate OTP Flow correctly on the first try.
Sign in with Google or email, complete your profile and top up your wallet.
Create a Bearer key from your dashboard — rotate or revoke any time.
Call /send-otp, receive an otp_id, then confirm with /verify-otp.
OTP SMS from just
When your largest single deposit is ₹5,000+. The more you deposit at once, the less each OTP costs.
Drag to see the rate for a single deposit.
Payment gateway fees, if any, are shown before you pay.
OTPs are handed to our pre-approved SMS routes the moment your API call is received and typically reach the handset within a few seconds.
When you call /send-otp we return an otp_id. Your user enters the code they receive, and you call /verify-otp with the otp_id and the code. We securely store the OTP encrypted and compare it on our servers — no extra SMS provider calls needed.
Yes. Pass your own numeric otp (3–40 digits), or omit it and we generate a cryptographically secure code of the otp_length you choose (3–40 digits).
UPI, cards and netbanking via Razorpay, Binance Pay (USDT), and crypto via OxaPay.
No. If the SMS provider rejects a message, the charge is refunded to your wallet instantly.
Your per-OTP rate is set by your largest single deposit — two ₹1,000 deposits still count as ₹1,000, and a later smaller deposit never lowers your rate. Custom rates are available for high-volume customers.
Create an account in under a minute. No monthly fees, no minimum commitment.
Create free account