Skip to main content
Use this guide when you want OTP.ID to verify a user through a missed call. Send channel: "misscall" to POST /v3/request. OTP.ID places a call, disconnects it, and the OTP is taken from the last digits of the caller ID shown in the user’s call log. Missed Call OTP is different from WhatsApp, SMS, and Email:
  • There is no message body.
  • The user does not read an OTP from chat, SMS, or email.
  • The user opens their phone call log and enters the trailing digits from the number that called them.
  • OTP.ID returns verification.prefix and verification.otp_length so your UI can guide the user.

Flow overview

1

Create the Missed Call transaction

Use POST /v3/request with channel: "misscall". Missed Call does not support POST /v3/send because the OTP comes from the caller ID, not from a client-supplied code.
2

OTP.ID places the call

OTP.ID calls the destination number and disconnects. The user should not answer the call.
3

Show the prefix hint

Render verification.prefix as read-only context and create verification.otp_length digit boxes after it.
4

User checks the call log

Ask the user to open the call log and find the recent number that starts with the displayed prefix.
5

User enters the trailing digits

The user enters only the final digits of the caller ID, for example the last 4 digits.
6

Verify the digits

Call POST /v3/verify with the otp_id and the collected trailing digits.
Do not build a normal six-digit OTP screen for Missed Call. This channel needs a caller-ID UI that explains where the code comes from.

Create the Missed Call transaction

Request

brand is optional and usually omitted because there is no message body.

Success response

Use data.otp_id for verification. Use data.verification.prefix and data.verification.otp_length to render the UI.
Missed Call is request-only. Do not call POST /v3/send for this channel. Trust the verification object returned by OTP.ID and do not try to infer the caller number yourself.

Verify the Missed Call OTP

If the user sees a recent call from 6285592634829, they enter only 4829.

Request

Correct digits response

First wrong attempt response

The first wrong attempt returns HTTP 200 with verified: false. Let the user check the call log and try once more.

Second wrong attempt and later attempts

The second wrong attempt also returns a mismatch response, then OTP.ID locks the transaction. Any later verification request for that otp_id returns HTTP 422 with TOO_MANY_ATTEMPTS.
Missed Call needs a different UI from message-based OTP. The most effective screen makes the caller-ID pattern obvious. Use this reference as a recommended layout for your Missed Call verification screen: Recommended Missed Call OTP verification UI

UI requirements

A good mental model for the user is: “The prefix is already shown. I only need to copy the missing last digits from my call log.”

Security limits

Missed Call OTP uses a short caller-ID-derived code, so OTP.ID applies stricter limits than message-based channels. When the destination request limit is exceeded, OTP.ID returns HTTP 429:
These limits are scoped per merchant and normalized destination number.

Integration checklist

  • Store the otp_id returned by /v3/request.
  • Store the verification.prefix and verification.otp_length with the active UI state.
  • Verify only the trailing digits submitted by the user.
  • Do not expose or reconstruct the full caller number.
  • Stop verification after a TOO_MANY_ATTEMPTS error and require a new transaction.
  • Respect DESTINATION_RATE_LIMITED; do not auto-retry in the background.