Universal Fallback

SMS Verification

Universal fallback verification via SMS. Works on any phone that can send a text message. Reverse OTP: the user sends the code to us.

Proof Holdingsproof.holdings · verification api
AttestationNº 2026-0042
subject+370 691 •• •99
channelSMS · inbound
methodReverse OTP
challengeVRF-4821 — sent by the user, not to them
receivedVRF-4821 · 14:02:07 UTC
verdictControl provenno code to intercept or phish
Mintedph_ctl_2f9a…e41 · ES256
How It Works

The option that works on any phone that can send a text

§ 01

Create Request

Call our API with the phone number. We return a challenge code and SMS instructions.

§ 02

User Sends SMS

User sends an SMS with the challenge code to our verification number. Works on any phone that can send a text message.

§ 03

Instant Verification

We verify the SMS sender and return a signed proof token: poll GET /verifications/:id, or wait on its event stream.

API Integration

SMS verification without paying for outgoing texts

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": "phone",
    "channel": "sms",
    "identifier": "+37069199199"
  }'

2. Verify the Proof Token

# Poll for verification status
curl https://api.proof.holdings/api/v1/verifications/VERIFICATION_ID \
  -H "Authorization: Bearer pk_live_YOUR_API_KEY"

Response Example

{
  "id": "507f1f77bcf86cd799439011",
  "type": "phone",
  "channel": "sms",
  "status": "pending",
  "identifier": "+37069199199",
  "challenge": {
    "code": "A7B3X9",
    "expires_at": "2026-03-15T11:00:00Z",
    "send_to": "+37052140180",
    "send_to_formatted": "+37052140180",
    "instruction": "Send 'A7B3X9' to +37052140180 on sms"
  },
  "created_at": "2026-03-15T10:50:00Z"
}