Skip to content
Documentation menu

Documentation

POST /otp/verify

Check a code the user entered against a previously sent otp_id. A correct code approves the verification.

Check a code the user entered against a previously sent otp_id. matched is true only on the correct code. A wrong code keeps the OTP pending until attempts are exhausted, then failed.

Run send first to get an otp_id. In the sandbox, the accepted code is always 123456.

This endpoint works for every channel, WhatsApp included. On WhatsApp the user receives the code over chat (after opening the send’s action_url) and enters it here the same way. The otp.approved webhook fires on approval if you prefer a push signal over this response.

curl -X POST https://api.otp.com/api/v1/otp/verify \
  -H "Authorization: Bearer otp_live_•••" \
  -H "Content-Type: application/json" \
  -d '{"otp_id":"9f3c1b2a-…","code":"123456"}'

Request body

Field Type Required Description
otp_id string yes The id returned by send.
code string yes The code the user entered.

Response

{
  "otp_id": "9f3c1b2a-…",
  "status": "approved",
  "matched": true
}
Field Description
matched true if the code was correct.
status approved on a match; otherwise pending (attempts remain) or failed (exhausted).

Common errors

Status Type When
404 HTTPException otp_id not found, or not on your company.
422 ValidationError Missing or malformed request body.

See Error codes for the full list.