Miss OTP · missed-call verification
Miss OTP. India’s best alternative to SMS & WhatsApp OTP.
Ready in minutes. Not days.
Simply give a missed call and get your number verified. The network hands us the caller ID, and that is the proof — no SMS to be delayed, no DLT registration to sit through, no WhatsApp Business account to get approved. Two HTTP calls and you are done.
Try it on your own phone — sign up free and test it in two minutes
What your user sees
One POST with the number your user typed. You get back a request id and the number to display.
From the handset they are claiming. They can cut it the second it rings — we hang up anyway.
Poll the status endpoint, or take our signed webhook. Typically two to four seconds after they press dial.
Lovable, Bolt, Cursor, Replit, v0, Claude Code
Built your app with an AI coding tool? Need to verify mobile numbers?
Sign up, get a key, paste one prompt into your AI tool — it writes the server calls, the screen and the voice fallback. Live in minutes: no DLT, no SMS templates, no approval wait.
Why teams switch
The paperwork is the product
Everyone’s OTP works once it is live. The difference is what stands between you and live — and what happens to the codes that never arrive.
| SMS OTP | WhatsApp OTP | Missed call | |
|---|---|---|---|
| Time to first verification | Days — DLT cycle | Days — BSP onboarding | Minutes |
| DLT entity + header registration | Required | — | Not required |
| Template approval | Required | Required | Not required |
| Works with zero balance / no data | Yes | No | Yes |
| Can be delayed in a queue | Yes | Yes | No — it is a live call |
| Code the user can be tricked into reading out | Yes | Yes | There is no code |
| You pay for failed attempts | Usually | Usually | Never |
| Cost per attempt | ₹0.12–0.22 | ~₹0.12 | ₹0.10–0.20 |
One row goes against us, and we are leaving it in: per message, direct-route Indian SMS is cheaper than we are. It is also the row that matters least, because it prices the attempts that arrive — not the days you spend blocked on DLT, and not the users you lose to a code that never lands. Most teams put missed call first and keep SMS underneath as the fallback.
Ten seconds, start to finish
What your user actually does
Create account
Your server
POST /verify/start
status: "pending"
status: "verified"
← verification.verified
- Your app asks for a missed callOne POST to start. Show the number we send back.
- The user rings, and we hang upWe reject the call before it connects, so it costs them nothing.
- The number is verifiedThe caller ID from the network matches your pending request.
- Your server finds outPoll the status endpoint, or get our signed webhook.
The whole integration
Two calls. No SDK to install.
One POST to start, one GET to check. Anything that speaks HTTP is supported, which is why there is no SDK — it would be longer than the integration.
Start on our shared verification line. Move to a number of your own when volume justifies it.
Set an HTTPS callback and we POST the moment a number verifies, HMAC-signed so you can prove it came from us.
Five-minute windows, one request per attempt, per-number throttling. A verification cannot be replayed or read across accounts.
User can’t give a missed call? Voice OTP rings them and reads a code — same key, same webhook, billed only when they answer.
// 1 — start a verification
const start = await fetch("https://api.nacaller.com/api/verify/start", {
method: "POST",
headers: {
"Authorization": "Bearer " + process.env.NACALLER_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ phone: "9876543210" }),
}).then(r => r.json());
// Show start.callNumber to the user: "Give a missed call to this number."
// 2 — poll until it flips (or receive our webhook instead)
const { verified } = await fetch(
`https://api.nacaller.com/api/verify/status/${start.requestId}`,
{ headers: { "Authorization": "Bearer " + process.env.NACALLER_KEY } },
).then(r => r.json());Full request/response reference in the developer docs; your API key and webhook secret live in your dashboard once you sign up.
Pricing
You pay for numbers that verify
A request nobody calls costs us no telephony, so it costs you nothing. Credits are prepaid, they never expire, and there is no monthly fee underneath them.
Also chasing leads by hand? NaCaller calls your Facebook and Instagram leads within seconds, in Telugu, and hands you the warm ones.
See NaCaller₹199
1,000 verifications · ₹0.20 each
- Credits never expire
- Only verified numbers count
- Failed attempts are free
- Webhooks included
- No DLT, no templates, no waiting
₹749
5,000 verifications · ₹0.15 each
- Credits never expire
- Only verified numbers count
- Failed attempts are free
- Webhooks included
- No DLT, no templates, no waiting
₹2,999
25,000 verifications · ₹0.12 each
- Credits never expire
- Only verified numbers count
- Failed attempts are free
- Webhooks included
- No DLT, no templates, no waiting
₹9,999
1,00,000 verifications · ₹0.10 each
- Credits never expire
- Only verified numbers count
- Failed attempts are free
- Webhooks included
- No DLT, no templates, no waiting
25 free verifications and 5 voice calls per account, with your first key — real ones on the live line, no card.GST applicable as per Indian regulations. Higher volumes: tell us your number.
Where it fits
Anywhere a number has to be real
Signup and login
Verify at the moment of account creation, before a fake number becomes a row in your users table.
High-drop-off forms
Loan applications, admissions, KYC starts. The wait for an SMS is where these forms are abandoned.
Delivery and service
Confirm the number a rider or technician will actually reach before the job is dispatched.
For the developer wiring this in
The questions you'd ask before your first commit
18questions, answered without a sales call. Where an answer is “that part is on you”, we say so.
How does missed-call OTP verification actually work?
Can I send OTP SMS in India without DLT registration?
How long does DLT registration actually take?
How does this compare to MSG91, 2Factor, SMSCountry or Twilio?
Are there other missed-call verification providers in India?
Why do OTP SMS messages fail to arrive in India?
Does it improve completion rate, or just cost?
Is this secure enough for my app?
What stops someone spoofing the caller ID?
Do I have to poll, or can you send me a webhook?
What does it cost, and what am I charged for?
Does my user pay for the missed call?
How do I integrate it with React Native, Flutter, Laravel or Django?
Can I keep my existing SMS provider?
Is there a sandbox or a free trial?
Does it work for landlines or international numbers?
What happens if the user calls from a different number?
What are your uptime and support commitments?
Miss OTP for developers
Phone verification questions developers ask
12questions, answered without a sales call. Where an answer is “that part is on you”, we say so.
How do I add phone number verification to a Lovable, Bolt, v0 or Replit app?
How do I add phone OTP verification to a Next.js app?
What should I tell Cursor, Claude Code or Copilot to add missed call verification?
How do I verify phone numbers in India without DLT registration?
Is there an alternative to Firebase phone auth for Indian numbers?
Is there an alternative to Twilio Verify or MSG91 for OTP in India?
How much does missed call OTP verification cost per number?
Can a user be tricked into sharing a missed call verification like an OTP code?
How do I verify the Miss OTP webhook signature?
What if my user can't give a missed call?
Is there a free phone number verification API I can test in India?
What does the Miss OTP start endpoint return, and what errors can it send?
Live today
Your first verification is about ten minutes away.
Sign up, issue a key, paste two fetch calls. 25 verifications on us while you wire it in.