Temporary verification numbers and dedicated virtual numbers solve different problems. A temporary number is used for a single activation: you request it for a specific service and country, receive one OTP, and the activation closes, billed per activation with an automatic refund if no SMS ever arrives. A dedicated virtual number is a US or Canada line you hold for a term, with ongoing inbound SMS, outbound SMS and browser calling, which you renew or release on your own schedule.
This guide compares the two models on lifecycle, cost, reliability and operational fit, then closes with a decision table you can drop into an architecture review.
Two models, two different jobs
The simplest way to separate them is to ask one question: will you ever need this exact number again? If the answer is no, a temporary number is almost always the better fit. If the answer is yes — because an account will need re-verification, because a team shares a login, or because customers will text the number back — you want a dedicated line.
Temporary verification numbers
A temporary verification number is the core of the OTP gateway. You call the API with a service and a country, receive a number, trigger the OTP on the target platform, and capture the code either by polling or through a signed webhook. Each request is an activation with a well-defined lifecycle:
- pending — the number is allocated and waiting for an SMS.
- received — an SMS has arrived and the code is available.
- completed — you have consumed the code and the activation is closed.
- expired or cancelled — no usable SMS arrived inside the window, or you cancelled it. Either way the charge is refunded to your wallet.
The typical activation window is 20 minutes. That window is deliberately short: temporary numbers are built for flows that finish in one sitting, such as a sign-up test, a QA regression run or a privacy-preserving registration.
Dedicated virtual numbers
Dedicated virtual numbers are persistent US and Canada lines assigned to your account. They support:
- Inbound SMS delivered to the dashboard and to your webhook (
number.sms_received). - Outbound SMS from the dashboard.
- Browser calling, so a team member can place or take calls without a physical handset.
- Term-based renewal, and release at any time when the line is no longer needed.
Because the number stays yours, it can anchor long-lived identities: an operations mailbox's 2FA, a support line, or a test account that must be re-verified months later.
Lifecycle compared
| Dimension | Temporary verification number | Dedicated virtual number |
|---|---|---|
| Unit of purchase | One activation | One line for a term |
| Duration | Activation window, typically 20 minutes | Until you release it or stop renewing |
| Typical traffic | A single OTP | Ongoing inbound and outbound SMS, calls |
| Coverage | Many services and countries (see /countries) | US and Canada |
| Failure handling | Expired or cancelled activations are refunded | Line remains active; you investigate the sender side |
| Capture method | Poll GET /v1/activations/{id} or webhook activation.sms_received |
Dashboard or webhook number.sms_received |
| Re-verification later | Not suitable | Suitable |
| Calling | No | Browser calling |
Cost model
Both products draw from the same USD wallet, which you can top up by card (processed by Stripe) or with USDT and USDC stablecoins. The difference is in what you pay for.
Temporary numbers are pay-per-activation. You pay for an outcome attempt, not for time. If an activation never receives an SMS, it moves to expired or cancelled and the charge returns to your wallet automatically. That makes cost proportional to successful work, which is why temporary numbers suit bursty workloads such as nightly test suites or bulk verification jobs. Prices vary by service and country, and you can query them before you commit:
curl -s "https://otproute.com/api/v1/prices?service=example_app&country=us" \
-H "Authorization: Bearer or_live_xxxxxxxxxxxxxxxx"
Dedicated numbers are billed per term. You pay to hold the line regardless of how many messages it handles, so the per-message economics improve as usage grows. The cost you need to watch is idle lines: a number that was provisioned for a project and never released keeps renewing. Renewal hygiene is covered in depth in our guide to virtual numbers for 2FA and support lines.
A useful rule of thumb when modelling spend: if a workload needs the same number more than once, compare the term price against the cumulative activations it would replace. If the workload is "one code, then never again", per-activation billing is almost always the cleaner model. Current rates for both are on the pricing page.
Reliability considerations
Reliability means different things for the two products, so measure them differently.
Temporary numbers: reliability per activation
With temporary numbers, the unit of reliability is the activation. An activation either receives an OTP inside the window or it does not, and the refund policy means a failed attempt does not cost you money — only time. Practical implications:
- Design for retry. If an activation expires, cancel or let it lapse and request a new one, optionally in a different country. The country routing guide explains how to order fallbacks.
- Measure time-to-OTP. The interval between creating the activation and receiving
activation.sms_receivedis your key health signal. See measuring OTP delivery latency for instrumentation patterns. - Cancel early when you know it failed. If the target platform rejects the number or errors out, call
POST /v1/activations/{id}/cancelso the wallet is credited immediately instead of waiting for the window to close.
Dedicated numbers: reliability per line
With a dedicated number, the line itself is stable; variability comes from the sender. If a platform's SMS does not arrive, the number is still yours and you can request the code again later. That persistence is the main reliability advantage: you can re-run a login, recover an account or re-verify a device weeks after the original sign-up.
The trade-off is coverage. Dedicated lines are US and Canada only, whereas temporary activations span the countries listed on /countries.
Using both from the API
Temporary activations are driven entirely through the REST API. A minimal Python flow:
import os, time, requests
API = "https://otproute.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['OTPROUTE_API_KEY']}"}
act = requests.post(f"{API}/activations", headers=HEADERS,
json={"service": "example_app", "country": "us"}).json()
activation_id = act["id"] # response fields are illustrative; see /docs for the schema
# Trigger the OTP on the target platform using the allocated number, then poll.
deadline = time.time() + 20 * 60
while time.time() < deadline:
status = requests.get(f"{API}/activations/{activation_id}", headers=HEADERS).json()
if status["status"] == "received":
print("OTP:", status.get("code"))
break
time.sleep(5)
else:
requests.post(f"{API}/activations/{activation_id}/cancel", headers=HEADERS)
For production systems, prefer the activation.sms_received webhook over polling; the webhook-based OTP capture guide walks through the receiver.
Dedicated numbers are listed through the same API, which is handy for inventory scripts and renewal audits:
curl -s https://otproute.com/api/v1/numbers \
-H "Authorization: Bearer or_live_xxxxxxxxxxxxxxxx"
Inbound messages on those lines arrive as number.sms_received events at your configured webhook endpoint, signed with the same X-OTPRoute-Signature scheme used for activations. Full reference material lives in the API docs.
Decision table
Use this table as a starting point. Where a row says "either", the deciding factor is usually whether the number must persist.
| Scenario | Recommended | Why |
|---|---|---|
| Automated sign-up tests in CI | Temporary | One code per run; refunds on failure keep cost tied to outcomes |
| Manual QA of a new verification screen | Temporary | Short-lived, many countries available |
| Privacy-preserving sign-up you never revisit | Temporary | No long-term identity needed |
| Shared team account that needs SMS 2FA | Dedicated | The code must reach the same number every login |
| Customer-facing support line (text and call) | Dedicated | Persistent number, outbound SMS, browser calling |
| Test account re-verified on future releases | Dedicated | Re-verification requires the same number |
| Coverage outside US and Canada | Temporary | Dedicated lines are US/CA only |
| Spiky, unpredictable volume | Temporary | Pay per activation, no idle cost |
| Steady inbound traffic to one number | Dedicated | Term pricing amortises over volume |
| Verifying an app's OTP flow across many markets | Temporary | Country parameter per activation |
Hybrid patterns that work well
Most engineering organisations end up using both:
- QA and CI on temporary numbers. Every test run creates a fresh activation, captures the code and closes it. Nothing persists between runs, which keeps tests isolated. The QA testing solution page and the CI/CD page cover this pattern.
- Operational identities on dedicated numbers. Accounts that humans log in to repeatedly — vendor portals, shared tooling, a support inbox — get a dedicated US or Canada line so 2FA keeps working.
- One wallet, separate API keys. The developer console supports multiple API keys, so you can issue one key per team or pipeline and read usage logs per key. That keeps CI spend visible separately from operations spend.
Responsible use
OTP Route is built for QA and testing, privacy-preserving sign-ups, app verification flows and operational lines. Whichever model you choose, respect the terms of the platforms you verify against and do not use numbers for fraud, evasion of bans, or abuse. If a platform's policies prohibit a particular kind of number for a particular purpose, follow those policies.
Frequently asked questions
What is the difference between a temporary number and a virtual number?
A temporary verification number is used for one activation, typically lasting up to 20 minutes, and is billed per activation with a refund if no SMS arrives. A dedicated virtual number is a US or Canada line you keep for a renewable term, with ongoing inbound SMS, outbound SMS and browser calling.
Can I re-verify an account later with a temporary number?
No. Once an activation completes, expires or is cancelled, the number is no longer tied to your account, so a later re-verification code would not reach you. If you expect to log in again or recover the account, use a dedicated virtual number instead.
Am I charged if a temporary number never receives an OTP?
No. Activations that never receive an SMS end as expired or cancelled, and the charge is refunded to your wallet automatically. You can also cancel an activation early with POST /v1/activations/{id}/cancel when you already know the attempt failed.
Which countries do dedicated virtual numbers cover?
Dedicated virtual numbers are available for the United States and Canada. Temporary verification numbers cover a broader set of countries, which you can list with GET /v1/countries or browse on the countries page.
Can I use both products with one account?
Yes. Temporary activations and dedicated numbers draw from the same USD wallet, use the same Bearer API keys, and deliver events to the webhook endpoint you configure in the developer console, so you can mix them freely by workload.
Route your first OTP in minutes
Pay as you go · no monthly fee · automatic refunds on unused activations.
Topics: temporary phone number · dedicated virtual number · OTP verification number · virtual number for SMS · US virtual number · verification number API