OTP Verification API
for Resellers
Resell single-use SMS verification numbers from $0.10 through one REST API. Instant provisioning, full refund on unused activations, and signed webhooks — build your own OTP platform on top of real carrier numbers.
One API for every one-time SMS verification you need
Free public SMS inboxes are publicly readable and already flagged by every major platform. Building your own carrier relationships for single-use numbers is expensive to set up for something customers use once and discard.
The VRNUM OTP API gives you a live, private pool of real-carrier numbers on demand. Provision one, receive the code, and the number is never shown to anyone else — with your markup already applied to every price you display.
From order to verified code
Four calls cover the entire OTP lifecycle.
Check the catalog
GET /otp-catalog for live services, countries, and prices — apply your markup before showing customers.
Order a number
POST /otp-numbers with a service, country, and Idempotency-Key. A number returns immediately.
Get the code
GET /otp-numbers/:id live-checks for the SMS, or wait for the otp.completed webhook event.
Resend or refund
No code yet? Try /resend, or /cancel for an instant full refund to your wallet.
Order an OTP number in one request
clientReference is your own opaque ID — attach it to reconcile orders against your internal customer records.
curl -X POST https://vrnum.com/api/v1/otp-numbers \
-H "Authorization: Bearer vrnum_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: otp-5521" \
-d '{
"service": "whatsapp",
"countryCode": "us",
"clientReference": "otp-5521"
}'A complete OTP order lifecycle
Catalog, ordering, resend, cancel/refund, and webhooks — one consistent JSON API.
/api/v1/otp-catalog/api/v1/otp-numbers/api/v1/otp-numbers/api/v1/otp-numbers/:id/api/v1/otp-numbers/:id/resend/api/v1/otp-numbers/:id/cancel/api/v1/webhook/api/v1/balanceFull request/response docs and your keys live in your dashboard after you sign in.
Who builds on the OTP verification API
Any product that needs a real phone number for a single verification step.
SMS verification platforms
Resell OTP numbers to your own customers under your brand, with your own markup on every service.
QA & test automation
Create disposable test accounts on production services without burning personal phone numbers.
Bot & agency tooling
Provision numbers programmatically for account-creation workflows built for clients.
Developer tools
Offer 'verify with SMS' as a feature in your own app or SDK without owning telecom infrastructure.
Reliable enough to bill your own customers on
Idempotency keys
Retry safely on timeouts — the same Idempotency-Key always returns the original order, never a duplicate.
Signed webhooks
otp.completed, number.provisioned, and number.provisioning_failed events, signed with X-VRNUM-Signature.
Automatic retries
Failed webhook deliveries retry on a backoff schedule (5min, 30min, 2h, 6h, 24h) before we give up.
Transparent rate limits
60 requests/minute per key with X-RateLimit-* headers on every response.
Wallet-funded billing
No invoices or subscriptions — orders and refunds post to your balance the instant they happen.
Stable error codes
Every error returns a normalized JSON code your integration can switch on reliably.
Frequently asked questions
Can I resell OTP numbers through the VRNUM API?
Yes. The otp-catalog and otp-numbers endpoints return your resale price only. Set your own margin per service and country — your customers never see VRNUM's internal cost.
What happens if the OTP code never arrives?
Call POST /otp-numbers/:id/cancel on a still-waiting activation for a full refund to your wallet. You can also call the resend endpoint first.
How long does an OTP activation stay valid via the API?
Each activation stays live for 20 minutes from creation. Cancel before it expires for a full refund if no code arrives.
How do I avoid double-charging a customer on retry?
Send an Idempotency-Key header on POST /otp-numbers. Retrying the same request with the same key returns the original order instead of creating a new one.
Can I get real-time delivery events instead of polling?
Yes. Register a webhook endpoint and receive signed otp.completed events the moment they happen, instead of polling.
Which services are supported through the API?
80+ services including WhatsApp, Telegram, Google, Instagram, Facebook, Discord and more. Call GET /otp-catalog for the live list.
Start reselling OTP numbers today
Create a free account, generate your API key, and provision your first OTP number in minutes.