English
Testing Danish (+45) phone verification: picking the right OTP Route product
Yes, you can receive Denmark (+45) verification codes with OTP Route by ordering a one-time number from the OTP Gateway and reading the code in the dashboard or through the REST API and signed webhooks. Prices start from $0.20 per code, and the charge only stands if the SMS lands inside the 20-minute window. Self-serve long-term Danish lines are not offered, so the Gateway is the route for +45 testing.
Do you need one Danish code or a number you can keep?
Settle this before writing any integration code, because the two OTP Route products solve different problems.
- OTP Gateway gives you a +45 number for a single verification. You order it, trigger the SMS from the app you are testing, read the code, and the number is done. This suits sign-up tests, regression suites and one-off checks of a Danish onboarding screen.
- Dedicated Virtual Numbers are lines you keep while they renew, with inbound and outbound SMS plus browser calling. Those lines exist only for United States and Canadian numbers, priced from $1.95/month.
There is no self-serve long-term Danish number. If your team truly needs a +45 line that stays with you, write to [email protected] and ask; whether one can be arranged depends on local rules, and nothing is promised. For most Danish QA work the Gateway is the correct tool anyway. Our write-up on temporary vs dedicated numbers compares the two for Nordic test plans.
Which apps can a +45 Gateway number verify?
The Danish route currently covers more than 1,800 services. Among the popular ones in today's snapshot are WhatsApp, LinkedIn, Uber, Telegram, Google (Gmail & YouTube), Microsoft & Outlook, Signal, Discord, ChatGPT (OpenAI), Amazon, Airbnb and Netflix.
Availability shifts during the day as carrier partners add and drain capacity, so treat that list as a starting point rather than a contract; good OTP routing means asking for current stock instead of assuming it. The authoritative answer for any given moment comes from the API or the dashboard order screen, which only offer combinations that can be served right now.
How does the Denmark OTP API flow run end to end?
All calls go to https://otproute.com/api/v1 with a Bearer key prefixed or_live_, generated in the Developer console. An account can hold up to 10 keys, which makes it easy to give staging, CI and a local laptop their own credentials and revoke them separately.
A typical run starts with GET /api/v1/balance so a suite fails early on an empty wallet. Next, GET /api/v1/prices?country=dk&service=<id> returns the current price and whether stock exists for that pairing. The order itself is POST /api/v1/activations with a body like {"service": "linkedin", "country": "dk"}; the reply contains an activation id and the +45 number to enter in your product.
For the code, either poll GET /api/v1/activations/{id} or subscribe a webhook endpoint to activation.sms_received. Webhooks carry an X-OTPRoute-Signature header (t=<unix>,v1=<hex>), an HMAC-SHA256 of <t>.<raw body> with the endpoint secret; verify it and drop stale timestamps. If a test aborts, release the order with POST /api/v1/activations/{id}/cancel. The rate limit is 300 requests per minute, and full reference material lives in the docs.
What is specific about Danish numbers and Danish SMS?
Denmark runs a closed numbering plan: subscriber numbers are eight digits and there is no trunk prefix, so the national and international forms differ only by the +45. When you save a Denmark verification number from a test run, store it in E.164 as +45 followed by those eight digits. Danes commonly write them in pairs, such as "12 34 56 78", so your normaliser should strip spaces and dots before validation rather than rejecting the input.
One subtle trap: the Faroe Islands use +298 and Greenland uses +299, even though both are part of the Danish realm. A country picker that maps every Danish-speaking user to +45 will produce broken numbers for those customers. The Faroe Islands route is a separate entry for that reason.
Verification texts usually arrive in Danish when the account locale is Danish, though many international apps fall back to English. Æ, Ø and Å belong to the GSM 7-bit default alphabet, so Danish wording by itself should not push your own templates into a longer Unicode encoding. Teams usually test here when launching in the Nordics, checking Danish translations of onboarding screens, or supporting Danish customers from an operations hub elsewhere.
Can someone without API access order a Danish number?
Yes. Product managers, support leads and agency staff can do the whole thing in the browser:
- Open the OTP Gateway in the dashboard and choose Denmark.
- Pick the service; the live price is shown before you confirm.
- Copy the +45 number into the sign-up or login form you are checking.
- Wait on the activation card, where the code appears once the SMS arrives.
The 20-minute window starts when the order is placed. If nothing arrives in that time, or you cancel first, the full amount returns to the wallet automatically. You pay only when a code is actually delivered.
What should you do when a +45 code never shows up?
Silence usually has an ordinary cause. Some services refuse virtual numbers, some throttle repeated attempts from one device or IP, and some routes are briefly congested. A sensible sequence:
- Let the window run its course before judging the route; early cancellation discards a code that may still be on its way.
- Confirm the service accepts virtual numbers for the action you are testing.
- Retry later, or test the same flow on a neighbouring route such as Sweden.
- Avoid re-ordering in a tight loop. Back off between attempts so your test harness does not hammer the service.
The failed delivery guide covers retry logic in more depth. Danish tests remain bound by each target service's terms, and OTP Route's Acceptable Use Policy covers every +45 order.
How is Danish OTP testing paid for?
There is one prepaid USD wallet and no monthly fee or plan. Top it up by card or with USDT/USDC stablecoins, and each top-up produces a PDF invoice by email, which keeps finance teams happy. The pricing page explains how per-code charges are calculated.
If you are still wiring the integration, ask for your development account to be switched to sandbox: it returns simulated numbers and codes, so the full flow can be exercised without spending wallet funds. When you are ready, create an account with email and a 6-digit code or Google sign-in, and turn on TOTP two-factor for the team login.
Frequently asked questions
Can I test my app's Danish sign-up flow without a local SIM?
Yes. Order a +45 number from the OTP Gateway, enter it in your sign-up form, and read the code in the dashboard or via the API.
What is the country id for Denmark in the OTP Route API?
It is dk. Pass dk as the country parameter to GET /api/v1/prices and inside the JSON you send to POST /api/v1/activations.
Can I buy a +45 number for testing that I keep for months?
Not self-serve. Long-term Dedicated Numbers exist only for the US and Canada; for a Danish line, email [email protected] and the team will say whether anything is possible.
Do Danish phone numbers use a leading zero?
No. Denmark has no trunk prefix, so a valid number is simply +45 plus eight digits.
Am I charged if the Danish SMS never arrives?
No. If no code arrives within 20 minutes, or you cancel, the full amount is returned to your wallet automatically.
Which SMS verification API events should my webhook listen for?
For Gateway orders, handle activation.sms_received, activation.expired and activation.cancelled, keyed on the activation id, after verifying the signature header.
Will every Danish service accept an OTP Route number?
No provider can promise that, because some services reject virtual numbers. That is exactly why unused orders are refunded.
Service names are trademarks of their respective owners. OTP Route is not affiliated with them. Use numbers lawfully, follow each service's terms and our Acceptable Use Policy.