Testing Thai (+66) phone verification: checklist, steps and fixes

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

Yes, OTP Route can receive Thailand (+66) verification codes for you: the OTP Gateway assigns a one-time Thai number to a single activation, and the code appears in the dashboard or is pushed to your system by signed webhook or REST polling. Pricing starts at $0.20 per code, the live figure depends on the service, and the charge is reversed if nothing arrives within 20 minutes.

Before you start: a +66 testing checklist

Thai sign-up flows have a few traps that are cheaper to catch on paper than in a failed CI run. Confirm each item first:

  • Credentials. A Bearer key prefixed or_live_ from the Developer console, scoped to the environment that will use it.
  • Identifiers. Thailand's country id is th; take the service id from GET /api/v1/services rather than guessing it.
  • Delivery choice. Either a webhook endpoint with its signing secret saved, or a polling job that respects the 300 requests per minute limit.
  • Number handling. Decide how your code strips the domestic 0 before you store anything (see the formatting section).
  • Message parsing. Make sure the parser copes with Thai script around the digits.
  • Budget. A topped-up wallet, or a sandbox account if you only need to prove the integration.

Which Thai sign-up flows can the OTP Gateway cover?

Thailand is one of the broader routes, with more than 1,800 services in the live snapshot. Messaging and commerce dominate local usage, so teams usually start with LINE, Shopee, Lazada, TikTok, WhatsApp, Facebook, Instagram and Telegram. Others on the list include Google (Gmail & YouTube), Microsoft & Outlook, ChatGPT (OpenAI), Discord, Viber, Netflix, Amazon and Airbnb.

Availability per service changes as numbers come and go, so read the price endpoint before each run instead of hard-coding assumptions.

Ordering a Thailand verification number through the API

The base URL is https://otproute.com/api/v1.

  1. Request GET /api/v1/prices?country=th&service=<id>; an empty or unavailable answer means you should pick another time or route.
  2. Send POST /api/v1/activations with a body such as {"service": "line", "country": "th"}. Save the returned activation id alongside your test run.
  3. Type the +66 number into the app under test and trigger the SMS.
  4. Collect the code from the activation.sms_received event, or from GET /api/v1/activations/{id} if you poll.
  5. Release unneeded orders with POST /api/v1/activations/{id}/cancel.

Verify the X-OTPRoute-Signature header (t=<unix>,v1=<hex>) on every delivery and drop events whose timestamp is too old. Events are keyed on the activation id, which makes duplicate deliveries easy to ignore. Full request examples live in the developer docs.

Thai number formats, the trunk zero and Thai-script messages

Domestically, Thai mobile numbers are written with a leading 0 and nine further digits, usually beginning 06, 08 or 09. That 0 is a trunk prefix: in international form it disappears, so 08x xxx xxxx becomes +66 8x xxx xxxx. Store the E.164 version and normalize any user input that still carries the zero, or your deduplication will treat one handset as two people.

Codes from Thai-facing apps often arrive inside a Thai-language sentence. Extract the code by pattern (a run of digits of the expected length) instead of anchoring on English words, and remember that Thai-script SMS uses Unicode encoding, so messages split into shorter segments. Localization QA is the other reason teams test here: date fields in Thai interfaces commonly show the Buddhist Era year, and length limits on fields for Thai names and addresses are easy to get wrong. Product launches in Southeast Asia, marketplace seller onboarding and Thai-speaking support desks round out the usual list.

How do support and ops staff use the dashboard instead?

Not every check needs a script. Someone on the operations team can sign up, add funds, open the OTP Gateway, choose a service and Thailand, review the quoted price, and receive the number. The code lands on the activation card in the browser. The same 20-minute window applies, and the refund happens on its own if the window closes empty.

Troubleshooting codes that never reach the +66 number

When an activation stays empty, work down this list:

  • Give it the full window before cancelling; delayed resends are common.
  • Confirm the service accepts virtual numbers for Thailand. Some do not, and that is what the automatic refund covers.
  • Try again later, or switch to another country route if your test case allows it. The country routing article explains how teams choose fallbacks.
  • Space out retries. Re-ordering in a tight loop rarely helps and clutters your logs.

No money is lost on a failed attempt: an expired or cancelled activation puts the full amount back in the wallet.

Long-term lines, wallet and sandbox for Thai projects

OTP Route does not sell a self-serve long-term number in Thailand. Teams that need a persistent Thai line can email [email protected] to ask; local rules decide whether anything is possible. Dedicated numbers that you keep and renew are available only in the US and Canada, from $1.95/month.

Everything else runs on a prepaid USD wallet with no subscription. Top up with a card or USDT/USDC, and a PDF invoice is emailed for each top-up. For integration work, a development account can be moved to sandbox so simulated numbers and codes flow through your code at no cost. See pricing for current rates, keep to each service's terms, and remember OTP Route's Acceptable Use Policy covers every activation.

Frequently asked questions

Can I verify my app's Thai sign-up without a Thai SIM card?

Yes. Order a +66 number from the OTP Gateway, enter it in your app, and read the code in the dashboard or through the API and webhooks.

Should I keep the leading 0 when storing a Thai mobile number?

No. Drop the trunk 0 and store the number as +66 followed by the remaining nine digits.

Which id does the API expect for Thailand?

Use th as the country value, for example in GET /api/v1/prices?country=th&service=<id>.

Why does the LINE or Shopee message arrive in Thai?

Many services localize their SMS template by the number's country or the account language, so parse digits rather than English keywords.

What does a failed Thailand activation cost?

Nothing. If the 20-minute window ends without an SMS, or you cancel, the full amount returns to your wallet automatically.

Is there a way to run Thai OTP tests in CI without spending money?

Yes, request sandbox mode for a development account. It returns simulated numbers and codes so the pipeline can be tested end to end, as covered on the CI/CD solution page.

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.