Developer preview

Thai company verification.
Free for everyone.

Send a 13-digit registration number together with the company name. ThaiData checks the match against our company records and returns the result, registration status and verification time. We don't echo the registered name. Verification uses our stored records, not a live refresh on every call.

Explore the API

Completely free. No paid tiers, no credit card — just fair rate limits so the shared service stays fast for everyone.

POST /v1/verify-company
# request
{ "registration_number": "0105556012345",
  "company_name": "Example Trading Co., Ltd." }

# response
{ "result": "matched",
  "company_verified": true,
  "registration_status": "Active",
  "matched_on": "registered_name_en",
  "source": "ThaiData",
  "source_updated_at": "2026-11-02",
  "checked_at": "2026-11-03T09:14:07Z" }

Illustrative response. Fields are a preview draft.

What ThaiData verifies

Company verification by ThaiData: match a registration number and company name, with clear results and record dates.

Registration number → ThaiData verification

ThaiData matches the registration number and company name against our company records, returning the match result and recorded registration status without returning the registered name.

Two timestamps, not one

source_updated_at is the registry’s publish date when we have it; checked_at is when we verified it. When source_updated_at is omitted or null, that date wasn’t obtained — you judge freshness, not us.

Honest result states

A clean match returns matched; a name that doesn't line up returns mismatch. No matching record yet, or a privacy-withheld name, returns pending; a source error or timeout returns source_unavailable — never a silent pass. Where the registry has a publish date we return it in source_updated_at; on invalid_input, source_unavailable, or a not-found pending it is omitted or null, meaning not obtained — we report the date, we do not judge freshness for you.

Capability boundaries we won't blur
  • A registration existing is not proof the person submitting it is authorized to act for that company.
  • Business-licence document extraction and comparison is a planned feature — not something this preview does yet.
  • Directors, personal contact details and financial statements are not exposed through this API.

How a verification runs

Normal matches are processed automatically. Anything uncertain is surfaced as uncertain — on purpose.

  1. 1

    You submit a registration number

    Provide the 13-digit registration number and the company name to match — both are required.

  2. 2

    ThaiData checks the company

    ThaiData compares the number and name with our company record, including its registration status and available record date.

  3. 3

    You get a decided — or deferred — answer

    A confident match resolves immediately. If there is no matching record yet or the name is privacy-withheld you get pending; if the source errors or times out you get source_unavailable, each with a reason — so your flow can wait or escalate instead of wrongly passing or failing someone. Where the registry has a publish date we return it in source_updated_at; on invalid_input, source_unavailable, or a not-found pending it is omitted or null, meaning not obtained — we report the date, we do not judge freshness for you.

matched

The number resolves and the company name you provided matches the registered name.

mismatch

The number resolves but the company name you provided does not match the registered name.

pending

No matching record yet, or the registered name is privacy-withheld — never treated as "does not exist" and never auto-approved. A source error or timeout returns source_unavailable instead.

API reference preview / proposed

The developer-preview endpoint is live. Request and response fields may change before a stable production release.

POSThttps://thaidata.com/open-verify/v1/verify-company

Current base URL: https://thaidata.com/open-verify. Developer portal: https://open.thaidata.com. Call from your registered origin — no API key.

Request body

registration_numberrequired13-digit Thai company registration number.
company_namerequiredName to match against the registered name (EN or TH).

Response fields

resultenummatched · mismatch · pending · invalid_input · source_unavailable
company_verifiedbooleantrue only when result is matched.
registration_statusstringRegistry status, e.g. Active / dissolved.
matched_onstring?Which registered name matched (registered_name_en / registered_name_th).
sourcestringVerification provider: ThaiData.
source_updated_atdateRegistry publish date, when available; omitted or null if not obtained.
checked_atdatetimeWhen ThaiData verified it (UTC).
reasonstring?Present on pending / invalid_input / source_unavailable — why it wasn't decided.

Privacy note: when a company has an approved hide or correction request on record, the API response reflects that — withheld (pending) — rather than the raw source value. Directors, contacts and financials are never returned.

Open the full API reference →

Example request
curl -X POST https://thaidata.com/open-verify/v1/verify-company \
  -H "Content-Type: application/json" \
  -d '{
    "registration_number": "0105556012345",
    "company_name": "Example Trading Co., Ltd."
  }'

Example values shown against the live developer-preview endpoint — no API key required.

Demo sandbox

Illustrative demo — runs locally, not a real lookup

Pick a scenario to see the shape of each result. These responses are generated in your browser from fixed examples — nothing is sent anywhere, and no value here is a real registration result.

200 OK · illustrative response

FAQ

Is it really free?

Yes. The verification API is completely free — there are no paid tiers, usage fees, upgrades or credit-card requirements. To keep a shared service fast and available, access has fair rate limits.

What are the rate limits?

Limits are set at a level meant to cover normal product use during the developer preview and are tuned to protect the shared service. Exact numbers are shared with your access confirmation rather than fixed here, since the preview is still being calibrated.

Is this production-ready?

No. This is a developer preview. The endpoint, request and response fields are a proposed draft and may change. We are not publishing an SLA, a launch date, usage statistics, success-rate figures or customer names — and you shouldn't build critical flows against the preview assuming they are final.

What does pending mean?

It means there is no matching registry record yet, or the registered name is privacy-withheld. It is deliberately distinct from "does not exist" and is never treated as an automatic pass — your flow should wait or escalate. A source error or timeout is reported separately as source_unavailable. Where the registry has a publish date we return it in source_updated_at; on invalid_input, source_unavailable, or a not-found pending it is omitted or null, meaning not obtained — we report the date, we do not judge freshness for you.

Does a match mean the person is authorized?

No. Verifying that a company is registered is not the same as verifying that whoever submitted it is authorized to act on that company's behalf. Authorization is a separate question this API does not answer.

Can I get directors, contacts or financials?

Not through this API. It returns registration-level facts only. Directors, personal contact details and financial statements are out of scope here.

How do privacy hide / correction requests work?

When a company has an approved request on record, the API reflects it: a withheld field is withheld, a corrected value is corrected. The API return honours those requests rather than echoing the raw source.