Documentation version: Latest (v1)
API endpoint
List instant OTP verifications
Returns verification history for analytics and reconciliation.
GET/api/v1/instant-otp/verifications?limit=50
Auth: Bearer public OTP token + X-Otp-Secret header
Required headers
| Header | Required | Value | Description |
|---|---|---|---|
| Authorization | Yes | Bearer <token> | API key, server OTP key, or public OTP token depending on endpoint. |
| X-Otp-Secret | Yes | risu_otp_sec_... | Analytics secret paired with public OTP token. |
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
| limit | number | No | Max records, capped at 100. |
Code examples (all supported languages)
Snippets use placeholder tokens. Replace them with real credentials from your dashboard.
curl -X GET "https://risumail.risu.in/api/v1/instant-otp/verifications?limit=50" \
-H "Authorization: Bearer risu_otp_PUBLIC_TOKEN" \
-H "X-Otp-Secret: risu_otp_sec_ANALYTICS_SECRET"Response schema
Canonical schema inferred from the documented success payload. Copy this block when generating typed clients.
{
"type": "object",
"required": [
"success",
"data"
],
"properties": {
"success": {
"type": "boolean"
},
"data": {
"type": "object",
"required": [
"verifications"
],
"properties": {
"verifications": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"email",
"sentAt",
"verifiedAt"
],
"properties": {
"id": {
"type": "string"
},
"email": {
"type": "string"
},
"sentAt": {
"type": "string"
},
"verifiedAt": {
"type": "string"
}
}
}
}
}
}
}
}Success response example
{
"success": true,
"data": {
"verifications": [
{
"id": "otp_sess_01J...",
"email": "user@example.com",
"sentAt": "2026-04-19T11:45:00.000Z",
"verifiedAt": "2026-04-19T11:45:24.000Z"
}
]
}
}Common error cases
| Status | Code | When |
|---|---|---|
| 401 | UNAUTHORIZED | Missing token or x-otp-secret. |
| 403 | OTP_PUBLIC_IP_NOT_ALLOWED | Token allowlist rejected request. |
Implementation notes
- Use this endpoint in backend jobs for OTP conversion analytics exports.