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.prefixandverification.otp_lengthso 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.Create the Missed Call transaction
Request
brand is optional and usually omitted because there is no message body.
Success response
Usedata.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 from6285592634829, they enter only 4829.
Request
Correct digits response
First wrong attempt response
The first wrong attempt returns HTTP200 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 thatotp_id returns HTTP 422 with TOO_MANY_ATTEMPTS.
Recommended UI
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:
UI requirements
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:
Integration checklist
- Store the
otp_idreturned by/v3/request. - Store the
verification.prefixandverification.otp_lengthwith 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_ATTEMPTSerror and require a new transaction. - Respect
DESTINATION_RATE_LIMITED; do not auto-retry in the background.

