Available

Email OTP Verification

Classic one-time password verification via email. User receives a 6-character code and enters it in your app.

Proof Holdingsproof.holdings · verification api
AttestationNº 2026-0051
channelEmail · one-time code
challengeK7Q 2M9 — the code we sent was entered
received14:07:22 UTC
verdictControl proventhe code was read where it landed
Mintedph_ctl_5e1a…b73 · ES256
How It Works

Familiar verification flow users already know

§ 01

Send OTP Email

Call our API with the email address. We send an email with a 6-character code.

§ 02

User Enters Code

User receives the email and enters the OTP code in your application.

§ 03

Instant Verification

Submit the code to our API. We verify and return a cryptographic proof token.

API Integration

Simple OTP verification API

1. Create Verification Request

curl -X POST https://api.proof.holdings/api/v1/verifications \
  -H "Authorization: Bearer pk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "email",
    "channel": "email",
    "identifier": "[email protected]"
  }'

2. Verify the Proof Token

# After user enters the OTP code from their email
curl -X POST https://api.proof.holdings/api/v1/verifications/VERIFICATION_ID/submit \
  -H "Authorization: Bearer pk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "code": "847293"
  }'

Response Example

{
  "id": "507f1f77bcf86cd799439011",
  "type": "email",
  "channel": "email",
  "status": "verified",
  "identifier": "[email protected]",
  "verified_at": "2026-03-15T10:30:00Z",
  "proof": {
    "token": "eyJhbGciOiJFUzI1NiIs...",
    "expires_at": "2027-03-15T10:30:00Z"
  }
}