OTP routing infrastructure

The smart route for every OTP & number

One REST API to order temporary verification numbers by service and country, capture one-time passwords through HMAC-signed webhooks, and run dedicated US & Canada lines — billed from a single prepaid USD wallet with automatic refunds.

Pay as you go · no monthly fee Full refund if no SMS arrives Card or USDT/USDC top-ups
POST /api/v1/activations
# Order a temporary verification number
curl -X POST https://otproute.com/api/v1/activations \
  -H "Authorization: Bearer or_live_…" \
  -H "Content-Type: application/json" \
  -d '{"service":"telegram","country":"us","max_price":0.50}'
201 Created
{
  "id": "act_9f2c41d0b7e3a6158c24",
  "status": "pending",
  "service": "telegram",
  "country": "us",
  "phone_number": "+15550142231"
}
Webhook → your endpoint
X-OTPRoute-Signature: t=1793318400,v1=5f1c9a…
{ "type": "activation.sms_received",
  "data": { "id": "act_9f2c41d0b7e3a6158c24", "status": "received", "code": "482913" } }
How routing works

From API call to captured OTP in four steps

Every activation follows the same deterministic path. You request, we route, you receive — or you are refunded.

01 · Request

You call the API

Send POST /v1/activations with a service, a country and an optional max_price ceiling.

02 · Route

We pick the route

The request is matched by service and country against live inventory, and the current price is debited from your wallet.

03 · Issue

A number is issued

You get an activation ID and an E.164 phone number with status pending and an activation window of about 20 minutes.

04 · Capture

OTP pushed — or refunded

The code is parsed and pushed as activation.sms_received. If nothing arrives, the activation expires and the full amount returns to your wallet.

Prefer to pull? Poll GET /v1/activations/{id} instead. Read the OTP gateway primer or how country routing works.

Two products, one wallet

Short-lived verification or long-lived lines

Use temporary numbers when you need a single code, and dedicated numbers when a line has to stay yours.

⚡

OTP Gateway

Temporary verification numbers per service and country, built for automated flows.

  • Order by service + country through one endpoint
  • OTP extracted and delivered via signed webhook or polling
  • From $0.20 per code, with a max_price guard
  • Automatic full refund when no SMS arrives
Explore the OTP Gateway →
☎️

Virtual Numbers

Dedicated United States and Canada numbers for ongoing verification and operational lines.

  • Inbound SMS to dashboard and number.sms_received webhook
  • From $1.95/month, renewed from your wallet, release any time
  • Outbound SMS from the dashboard or API
  • Browser calling — no softphone or SIP setup
Explore Virtual Numbers →
Built for engineers

Everything your integration needs, nothing it doesn't

A predictable REST surface, a console that shows what happened, and controls that keep spend and access in check.

🔑

Scoped API keys

Issue multiple or_live_ keys per account and revoke any of them independently.

🪝

Signed webhooks

HMAC-SHA256 signatures with a timestamp on every delivery, per-endpoint secrets and rotation.

🧪

Test-send

Fire a test event at any endpoint from the console before you go live.

📜

Delivery log

Inspect each webhook attempt with status code and response excerpt, then fix and retry.

📈

Usage analytics

Per-day API calls and errors plus your top endpoints, so you can spot regressions early.

🧭

Live price discovery

GET /v1/prices returns current price and availability per service and country.

🧰

Sandbox mode

Simulated numbers and codes with no wallet spend, enabled on request for development accounts.

🚦

Clear rate limits

300 requests per minute on every account, with 429 and Retry-After when you exceed them.

Tour the developer console

Webhook security

Verify every delivery in a few lines

Each webhook carries X-OTPRoute-Signature: t=<unix>,v1=<hex>. Recompute HMAC-SHA256 over <t>.<raw body> with your endpoint secret, compare in constant time and reject stale timestamps.

  • Per-endpoint secrets with rotation from the console
  • Timestamp binding blocks replayed payloads
  • Events for activations and dedicated numbers

Read: Securing OTP webhooks with HMAC →

verify_signature
import hmac, hashlib, time

def verify(secret: str, header: str, body: bytes, tolerance=300) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    ts, sig = int(parts["t"]), parts["v1"]
    if abs(time.time() - ts) > tolerance:
        return False
    mac = hmac.new(secret.encode(), f"{ts}.".encode() + body, hashlib.sha256)
    return hmac.compare_digest(mac.hexdigest(), sig)
Billing & trust

Money rules you can reason about

A prepaid USD wallet, deterministic refunds and audit-friendly records — designed so finance and engineering agree on every cent.

💼

Prepaid USD wallet

Top up once and spend across activations, numbers, SMS and calls. No monthly fee and no subscription.

↩️

Automatic refunds

An activation that expires or is cancelled without an SMS is refunded in full to your wallet — exactly once, no ticket required.

🪙

Exact-amount crypto

Pay with USDT or USDC via an on-domain QR. Each payment has an exact amount, so deposits match unambiguously.

💳

Card with 3-D Secure

Card top-ups are processed by Stripe with 3-D Secure authentication. Coupons auto-apply at checkout.

🧾

Automatic invoices

A PDF invoice is emailed for top-ups and renewals, ready for your accounts payable process.

🛡️

Fraud controls

Velocity limits on sign-ups, checkouts and orders, plus account locks on chargebacks, protect the platform for everyone.

Details in our Refund Policy and Acceptable Use Policy.

Country routes

Route OTPs by country

Availability and price are resolved live per service and country. Dedicated long-term numbers cover the United States and Canada.

Browse all countries

Pricing

Pay as you go. No plans, no subscription.

Every account gets the same wallet, the same API and the same limits. You only pay for what you use.

US & Canada

Dedicated numbers

from $1.95 /month
  • Inbound SMS by dashboard and webhook
  • Renewed from your wallet
  • Release any time
Explore Virtual Numbers
Every account

Pay as you go

No monthly fee
  • 300 API requests/min
  • Up to 10 API keys · 5 webhook endpoints
  • Card or USDT/USDC top-ups
Create an account

Live prices per service and country are shown in the dashboard and via GET /api/v1/prices. See full pricing.

FAQ

Frequently asked questions

What is OTP Route?
OTP Route is a developer-first OTP routing and gateway platform. You receive one-time passwords on temporary verification numbers through a REST API and signed webhooks, and you can rent dedicated US and Canada virtual numbers with SMS and browser calling — all from one prepaid USD wallet.
How does billing work?
Every account is pay as you go: you top up one prepaid USD wallet by card or with USDT/USDC stablecoins, with no monthly fee and no subscription. Verification codes start from $0.20 per code with a 20-minute activation window, and you only pay if the code arrives; otherwise the full amount goes back to your wallet automatically. Dedicated US and Canada numbers start from $1.95/month and renew from your wallet.
Are there plans or a monthly fee?
No. There are no plans and no subscription. Every account gets the same API and the same limits: 300 API requests per minute, up to 10 API keys and up to 5 webhook endpoints. Live prices per service and country are shown in the dashboard and returned by GET /api/v1/prices.
How do I receive OTPs programmatically?
Create an API key in the Developer console, call POST /api/v1/activations with a service and country, and either poll GET /api/v1/activations/{id} or register a webhook endpoint. When the SMS lands we POST an activation.sms_received event signed with X-OTPRoute-Signature (HMAC-SHA256).
Which countries are supported?
Temporary verification numbers are available across a wide range of countries; live inventory varies by service and time, so the API returns current availability and price per service and country. Dedicated long-term numbers are offered in the United States and Canada.
Is there a sandbox?
Yes. Sandbox accounts receive simulated numbers and codes so you can build and test your integration end to end without spending wallet funds. Contact support to enable sandbox mode on a development account.
What is OTP Route not for?
OTP Route is built for QA, automated testing, privacy-preserving sign-ups and operational phone lines. Using numbers to commit fraud, evade bans, create fake engagement or breach a platform's terms is prohibited under our Acceptable Use Policy and leads to account termination.

Route your first OTP in minutes

Create an account, generate an API key and make your first call. No monthly fee — you only pay for what you use.