Verification (OTP)
The Verify endpoints handle one-time codes end to end — generation, expiry, attempt limits and validation. You never store the code.
Create a service
A verification service holds the settings for a flow — channel, code length, expiry. Create one with POST /verify/services and reuse its id for every verification.
Start and check
POST /verify/services/{id}/verifications sends a code; POST /verify/services/{id}/checks validates the code the user typed. The code lives on our side only — you send a destination and get back a status.
cURL
curl -X POST https://api.qsendyx.com/api/v1/verify/services/{service_id}/verifications \
-H "Authorization: Bearer $QSENDYX_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "to": "+5511999998888", "channel": "sms" }'cURL
curl -X POST https://api.qsendyx.com/api/v1/verify/services/{service_id}/checks \
-H "Authorization: Bearer $QSENDYX_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "to": "+5511999998888", "code": "481902" }'OTP traffic is a favourite target for pumping fraud — an attacker triggers thousands of verifications to premium destinations and collects a share of the termination fee. Rate-limit by user and by destination on your side too, not only by IP.