{
"sid": "VE6650c3a1b2c3d4e5f6a7b8c9",
"channel": "verify",
"status": "approved",
"to": "+14155552671",
"cost": "0.04",
"metadata": {
"user_id": "usr_1042"
},
"error": null,
"date_created": "2026-09-26T10:15:01.873Z",
"date_updated": "2026-09-26T10:15:40.530Z"
}Status webhook
OTPBay sends a POST to your callback URL when an SMS is sent or fails, when a Telegram code’s delivery status changes, and when a verification finishes. Every channel sends the same body. Respond with any 2xx status within 15 seconds.
{
"sid": "VE6650c3a1b2c3d4e5f6a7b8c9",
"channel": "verify",
"status": "approved",
"to": "+14155552671",
"cost": "0.04",
"metadata": {
"user_id": "usr_1042"
},
"error": null,
"date_created": "2026-09-26T10:15:01.873Z",
"date_updated": "2026-09-26T10:15:40.530Z"
}Body
sid of the verification (VE…), SMS (SM…) or Telegram code (TG…).
"VE6650c3a1b2c3d4e5f6a7b8c9"
Which API the event is about.
verify, sms, telegram New status. verify: approved, expired, failed. sms: sent, failed. telegram: sent, delivered, read, expired, revoked, failed.
"approved"
Destination phone number in international format. OTPBay normalizes it to E.164, so +1 (415) 555-2671 becomes +14155552671.
"+14155552671"
What the object costs at the time of the event, after refunds.
^\d+\.\d{2}$"0.02"
Error message when the status is a failure, otherwise null.
Response
Return any 2xx status to acknowledge the event. The response body is ignored.