Email Verification
Verify email addresses via OTP or magic link. Confirms email ownership and validates deliverability. OTPs expire after 15 minutes with up to 3 retry attempts.
POST
/verifications/emailInitiate an email verification by sending an OTP or magic link to the specified address.
Request Body
| Parameter | Type | Description |
|---|---|---|
emailrequired | string | Email address to verify |
userIdrequired | string | Your internal user identifier |
method | enum | Verification method: OTP (default) or MAGIC_LINK |
redirectUrl | string | Redirect URL after magic link click (required if method is MAGIC_LINK) |
Code Examples
curl -X POST https://api.verifyhq.com/v1/verifications/email \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{
"email": "user@example.com",
"userId": "user_123",
"method": "OTP"
}'Response
201 Createdjson
{
"id": "ev_abc123",
"userId": "user_123",
"email": "user@example.com",
"method": "OTP",
"status": "PENDING",
"expiresAt": "2026-02-18T13:15:00Z",
"createdAt": "2026-02-18T13:00:00Z"
}POST
/verifications/email/:id/verifySubmit the OTP code to complete email verification.
Request Body
| Parameter | Type | Description |
|---|---|---|
coderequired | string | The 6-digit OTP code |
curl -X POST https://api.verifyhq.com/v1/verifications/email/ev_abc123/verify \
-H "X-API-Key: your_api_key" \
-H "Content-Type: application/json" \
-d '{ "code": "739201" }'Response
200 OKjson
{
"id": "ev_abc123",
"status": "VERIFIED",
"email": "user@example.com",
"verifiedAt": "2026-02-18T13:01:45Z"
}GET
/verifications/email/:idRetrieve the current status of an email verification.
curl https://api.verifyhq.com/v1/verifications/email/ev_abc123 \
-H "X-API-Key: your_api_key"Response
200 OKjson
{
"id": "ev_abc123",
"userId": "user_123",
"email": "user@example.com",
"method": "OTP",
"status": "VERIFIED",
"deliverability": "DELIVERABLE",
"disposable": false,
"verifiedAt": "2026-02-18T13:01:45Z",
"createdAt": "2026-02-18T13:00:00Z"
}Verification Statuses
| Parameter | Type | Description |
|---|---|---|
PENDING | status | OTP/link sent, awaiting user action |
VERIFIED | status | Email ownership confirmed |
FAILED | status | Max attempts exceeded or invalid code |
EXPIRED | status | OTP/link expired (15-minute window) |
Webhook Events
| Parameter | Type | Description |
|---|---|---|
email.verified | event | Email address successfully verified |
email.failed | event | Email verification failed |