Testing Belgian sign-ups when no one on the team holds a +32 SIM

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

OTP Route receives Belgian (+32) SMS verification codes on single-use numbers from its OTP Gateway and passes them to you in the dashboard or through API polling and signed webhooks. Pricing starts from $0.20 per code, the live figure for each service comes back from the API, and an order that sees no SMS within 20 minutes is refunded to your wallet in full.

Your release targets Belgium, but your test devices are all foreign

A common picture: the product works in its home market, Belgium is next on the roadmap, and the QA lead realises every test phone carries a foreign SIM. Borrowing a Brussels colleague's phone works once, then their personal number is stuck on a staging account, and the regression suite still cannot run unattended.

OTP Route removes that bottleneck with its OTP Gateway. You choose a service and Belgium, receive a +32 number for exactly one verification code, and read the code from the dashboard or from your own code. Nobody's private number ends up attached to a test login, and the same step can run in a pipeline at night. The QA testing guide shows how teams slot this into an existing test plan.

Which services currently deliver codes to +32 numbers?

The Belgian route lists more than 1,700 services at the moment. Popular names in the latest snapshot include WhatsApp, Telegram, Google (Gmail & YouTube), Facebook, Instagram, TikTok, LinkedIn, Microsoft & Outlook, Amazon, Uber, Signal, Viber, Netflix, Airbnb and eBay.

Inventory moves during the day, so treat any list on a web page as a snapshot. Your integration should ask the API what is available at the moment it needs a number rather than hard-coding a service list in a fixture.

How do I plug Belgium OTP routing into an automated test?

Everything goes through 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 separate credentials, and the rate limit is 300 requests per minute.

  1. Fetch GET /api/v1/services and GET /api/v1/countries and cache them; Belgium's id is be.
  2. Read the current price with GET /api/v1/prices?country=be&service=linkedin before the run spends anything.
  3. Create the order with POST /api/v1/activations and the body {"service": "linkedin", "country": "be"}. The response carries the activation id and the +32 number to type into your sign-up form.
  4. Let your Belgian test block on the activation.sms_received event, or poll GET /api/v1/activations/{id} without hammering it.
  5. If the test aborts, call POST /api/v1/activations/{id}/cancel so the funds return straight away.

Webhook deliveries carry X-OTPRoute-Signature: t=<unix>,v1=<hex>. Compute HMAC-SHA256 over "<t>.<raw body>" with the endpoint secret, compare it in constant time, and drop requests whose timestamp is stale. The API reference lists every field.

How should +32 numbers be stored so formatting never breaks a test?

Inside Belgium, mobile numbers are written with a leading trunk 0, typically as 04xx followed by six more digits, and people group them with spaces, slashes or dots. In international form the 0 disappears and +32 takes its place, so 04xx becomes +32 4xx. Some users also type the 0032 prefix used for dialling abroad from Europe.

Save one canonical E.164 string with no separators, and write a test that feeds all three input styles into your phone field and expects the same stored value. That single check catches a surprising number of onboarding bugs before Belgian customers see them.

Language matters too. Dutch, French and German are official languages, and an SMS code usually arrives in whatever language the sending service picks, often based on the app or device setting. Running the flow once with a Dutch interface and once with French confirms your parser does not depend on English wording.

The Belgian code never arrived: what now?

Every activation stays open for 20 minutes, and you pay only if the SMS arrives. If the window closes empty, or you cancel first, the full amount goes back to the wallet automatically and your webhook receives activation.expired or activation.cancelled.

When a code is missing:

  • Let the window run instead of cancelling after a few seconds; some services send late.
  • Confirm the service accepts virtual numbers at all, since some refuse them, which is exactly why the refund exists.
  • Retry later, or with another service route that suits your test case.
  • Do not re-order in a tight loop; add backoff and a retry cap.

The article on reducing failed OTP deliveries covers retry design in more depth.

Can the support or operations team order a +32 number without code?

Yes. The dashboard covers the same flow for people who never touch the API:

  1. Sign up with an email address and a 6-digit email code, or with Google sign-in, then enable TOTP two-factor.
  2. Add funds to the wallet.
  3. Select Belgium and the service, check the price shown on screen, and confirm.
  4. Enter the +32 number in the app you are verifying and watch for the code in the dashboard.

This suits an agency onboarding a client's Belgian business profile or an operations lead who needs one verification without filing a ticket with engineering.

Is there a permanent Belgian line, and how does billing work?

No self-serve long-term number exists for Belgium. Dedicated numbers are a United States and Canada product from $1.95/month. If your team needs a lasting Belgian line, email [email protected] to ask; availability depends on local rules and is not guaranteed.

Billing uses one prepaid USD wallet, pay as you go, with no monthly fee and no plan to choose. Belgian test spend can be funded by card or USDT/USDC, with a PDF invoice emailed after each top-up for your finance team. For integration work, a development account can be switched to sandbox on request so simulated numbers and codes exercise your code without touching wallet funds. Full details sit on the pricing page.

Use Belgian numbers only for your own products and legitimate accounts, follow each service's terms, and keep in mind that the OTP Route Acceptable Use Policy applies.

Frequently asked questions

Can I check our Belgian onboarding flow without buying a local SIM?

Yes. Order a +32 number for the service you are testing, enter it in your sign-up form, and read the code in the dashboard or through the API.

What country id does Belgium use in the API?

Belgium is be, so a typical request is POST /api/v1/activations with {"service": "whatsapp", "country": "be"}.

How much does a Belgium verification number cost?

A +32 code costs from $0.20 per code, and the figure moves with the service you pick. Call GET /api/v1/prices or check the dashboard for the exact figure before ordering.

Will I be charged if the +32 code does not come through?

No. If nothing arrives inside the 20-minute window, or you cancel, the whole amount returns to your wallet automatically.

Should our database keep the leading zero of Belgian mobiles?

Store the E.164 form instead, which drops the trunk 0 and starts with +32. Normalise anything users type into that format before saving.

Can I keep the same Belgian number for later logins?

No. Each OTP Gateway number handles one code. Long-term dedicated numbers are only offered in the US and Canada; for Belgium, email [email protected] to ask.

Is there a way to build the integration without spending wallet funds?

Ask for your development account to be switched to sandbox, which returns simulated numbers and codes for end-to-end tests.

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.