OTP Reseller API · Instant · Refundable

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.

80+ services
From $0.10 / activation
Full refund on cancel
20-min activation window

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.

Private per order, not shared
Every OTP number is assigned exclusively to the order that requested it — never a shared public inbox.
Refund on cancel, always
Cancel an activation before the code arrives and the full amount returns to your wallet automatically.
Seconds from request to code
Numbers assign instantly and SMS delivery is typically seconds away — poll the endpoint or wait for the webhook.

From order to verified code

Four calls cover the entire OTP lifecycle.

01

Check the catalog

GET /otp-catalog for live services, countries, and prices — apply your markup before showing customers.

02

Order a number

POST /otp-numbers with a service, country, and Idempotency-Key. A number returns immediately.

03

Get the code

GET /otp-numbers/:id live-checks for the SMS, or wait for the otp.completed webhook event.

04

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.

GET/api/v1/otp-catalog
POST/api/v1/otp-numbers
GET/api/v1/otp-numbers
GET/api/v1/otp-numbers/:id
POST/api/v1/otp-numbers/:id/resend
POST/api/v1/otp-numbers/:id/cancel
GET / PUT/api/v1/webhook
GET/api/v1/balance

Full 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.

Comparing OTP number providers?