Choosing the right route for Ukrainian (+380) verification codes

Calling code +380OTP Gateway from $0.20 per codeDedicated numbers: US & Canada onlyAPI id: ua
Quick answer

OTP Route lets you receive Ukrainian (+380) SMS verification codes on single-use numbers from the OTP Gateway, delivered to the dashboard or to your backend via REST polling and HMAC-signed webhooks. Each code costs from $0.20 per code, and an activation that gets no SMS within 20 minutes is refunded in full.

Do Ukrainian test cases need a one-time number or a long-term line?

Start with this question, because it decides everything else. A one-time OTP Gateway number receives one verification code and then closes. A long-term line is something you keep and log in with again months later.

For Ukraine the answer is simple: the OTP Gateway is the self-serve option. There is no self-serve dedicated Ukrainian number. Long-term Dedicated Numbers exist only in the US and Canada, from $1.95/month, and suit staging accounts that must keep logging in or a shared team recovery line. If you specifically need a lasting +380 line, email [email protected]; availability depends on local rules and is not promised.

So the practical split is: use a +380 one-time number for sign-up and phone-step QA, and, if a test account must survive re-verification, consider whether a US or Canadian line fits the test. The comparison in temporary vs dedicated numbers walks through the trade-offs.

Why do engineering teams test with +380 numbers?

Ukraine has a large software engineering community, and many international product teams include Ukrainian developers and testers. Beyond that, a few situations come up repeatedly:

  • Ukrainian-language QA: Ukrainian is the state language, and teams localizing onboarding want to see the real phone step with Cyrillic text around it.
  • Diaspora users: people with +380 numbers now live across Poland, Germany and other European countries, so an app launched elsewhere still meets Ukrainian numbers at sign-up.
  • Messaging-heavy flows: Telegram and Viber are widely used in Ukraine, which makes them common test targets for products that integrate with either.

The verification text itself may arrive in Ukrainian, English or another language depending on the service and the account settings, so extract the digits with a pattern rather than matching fixed words.

How should +380 numbers be normalized?

Domestically, Ukrainian numbers are written with a trunk 0 followed by nine digits, for example in the shape 0XX XXX XX XX. In international form the zero is dropped: +380 plus the nine-digit national number. Note that the country code itself ends in 0, which confuses some hand-written validators.

Guidelines:

  • Persist the E.164 string only; format with spaces or the trunk zero at display time.
  • If a user types 0… after choosing +380, remove exactly one leading zero.
  • Watch for +3800…, a sign that the trunk prefix was not stripped.
  • Validate length with a maintained library rather than regexes copied from elsewhere.

Which services can a Ukraine verification number receive?

The live snapshot counts more than 1,500 services for Ukraine. Among the popular ones are Telegram, Viber, WhatsApp, Signal, Google (Gmail & YouTube), Facebook, Instagram, TikTok, Discord, LinkedIn, Microsoft & Outlook, Uber, ChatGPT (OpenAI) and Claude.

What is offered changes through the day, so treat this as an example and let the API tell you what is currently available.

How do the Ukraine OTP API calls fit together?

Requests for +380 numbers go to https://otproute.com/api/v1, signed with an or_live_ Bearer key generated in the Developer console. Ukraine's country id is ua.

A clean sequence: look up ids with GET /api/v1/services and GET /api/v1/countries; read cost and availability from GET /api/v1/prices?country=ua&service=<id>; confirm funds with GET /api/v1/balance; then send POST /api/v1/activations with {"service": "viber", "country": "ua"}. The reply holds the +380 number and an activation id.

For delivery, choose between polling GET /api/v1/activations/{id} and a webhook subscribed to activation.sms_received, activation.expired and activation.cancelled. Every webhook carries X-OTPRoute-Signature: t=<unix>,v1=<hex>; verify it as HMAC-SHA256 over <t>.<raw body> with the endpoint secret, reject stale timestamps, and process each activation id once. An account allows 10 keys, 5 endpoints and 300 requests per minute. Full details are in the docs.

What's the dashboard path for non-developers?

Support and growth staff can skip the API entirely. Open the OTP Gateway in the dashboard, select Ukraine and the service, check the displayed price, and order. Enter the +380 number in the app, request the SMS, and the code appears on the activation page when it lands.

What if the code doesn't arrive, and how is billing handled?

An activation stays open for 20 minutes, and you pay only when a code arrives. If the window closes empty, or you call POST /api/v1/activations/{id}/cancel, the full amount goes back to the wallet.

If a code is missing, wait for the window to finish, then retry later or with another service route. Check whether the service rejects virtual numbers, and don't fire repeated orders in a tight loop.

Funds come from one prepaid USD wallet with no monthly fee. Card payments and USDT/USDC both work for topping up, and a PDF invoice lands in your inbox after each one. On request, a development account can run in sandbox mode with simulated numbers and codes, useful when wiring up CI pipelines. OTP Route is for your own legitimate products and accounts: follow each service's terms and the Acceptable Use Policy.

Frequently asked questions

Can I receive Ukraine SMS OTP codes without a Ukrainian SIM?

Yes. Order a +380 number from the OTP Gateway and read the code in the dashboard or through the API.

What country id does OTP Route use for Ukraine?

Use ua in price lookups and in the body of POST /api/v1/activations.

Is the trunk 0 part of a +380 number?

Only in domestic dialling. In E.164 you store +380 followed by nine digits with no extra zero.

How much does a Ukraine verification number cost?

Prices start from $0.20 per code, and the API returns the exact live figure for each service.

Can I keep a +380 number for later logins?

There is no self-serve long-term Ukrainian line. Dedicated Numbers are a US and Canada product; email [email protected] to ask about anything else.

Will I lose money if Telegram never sends the code?

No. Without a code inside the 20-minute window, the charge returns to your wallet automatically.

Can I test my Ukrainian-language onboarding end to end in CI?

Yes, by calling the API from your test suite, and a sandbox account lets you rehearse the flow with simulated codes first.

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.

Route your first OTP in minutes

Create a free account, top up your USD wallet and order a number from the dashboard or the API. No monthly fee.