Skip to content
All higher-level APIs
Live Higher-level API

Verify

OTP without the boilerplate

Start a verification challenge with one POST, check it with another. Throttling, expiry, attempt limits, and channel fallback are built in. The bits every team rewrites the first time, done once and done right.

How it works

Two POSTs. One verified user.

Step 1 · Start the challenge

curl -X POST https://api.zevsend.com/v1/verify/start \
  -H "Authorization: Bearer zs_live_***" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "sms",
    "to": "+2348100000000",
    "length": 6,
    "expires_in": 300
  }'

We generate the code, send it through the channel you picked, and return a challenge id.

Step 2 · Check the user's input

curl -X POST https://api.zevsend.com/v1/verify/check \
  -H "Authorization: Bearer zs_live_***" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "ver_4t5u6v7w...",
    "code": "482310"
  }'

We match the code, enforce expiry and attempt limits, and return verified or not. You skip the Redis dance.

What you get

6 things you don't have to build.

On by default the moment you mint your first API key. No premium tier, no add-on.

  • One API for SMS, WhatsApp, and email codes
  • Configurable length, format, expiry, attempts
  • Per-recipient throttling out of the box
  • Fallback to another channel if delivery silently fails
  • Localised templates with sensible defaults
  • Per-challenge audit log for compliance reviews

Ready when
you are.

Open the console, verify a domain, and send your first message in under five minutes. Free sandbox, no credit card.