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.
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.
Completely free. No paid tiers, no credit card — just fair rate limits so the shared service stays fast for everyone.
# 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.
Company verification by ThaiData: match a registration number and company name, with clear results and record dates.
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.
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.
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.
Normal matches are processed automatically. Anything uncertain is surfaced as uncertain — on purpose.
Provide the 13-digit registration number and the company name to match — both are required.
ThaiData compares the number and name with our company record, including its registration status and available record date.
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.
The number resolves and the company name you provided matches the registered name.
The number resolves but the company name you provided does not match the registered name.
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.
The developer-preview endpoint is live. Request and response fields may change before a stable production release.
Current base URL: https://thaidata.com/open-verify. Developer portal: https://open.thaidata.com. Call from your registered origin — no API key.
registration_number | required | 13-digit Thai company registration number. |
company_name | required | Name to match against the registered name (EN or TH). |
result | enum | matched · mismatch · pending · invalid_input · source_unavailable |
company_verified | boolean | true only when result is matched. |
registration_status | string | Registry status, e.g. Active / dissolved. |
matched_on | string? | Which registered name matched (registered_name_en / registered_name_th). |
source | string | Verification provider: ThaiData. |
source_updated_at | date | Registry publish date, when available; omitted or null if not obtained. |
checked_at | datetime | When ThaiData verified it (UTC). |
reason | string? | 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.
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."
}'
// Call from your registered origin (browser). No API key.
const res = await fetch("https://thaidata.com/open-verify/v1/verify-company", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
registration_number: "0105556012345",
company_name: "Example Trading Co., Ltd.",
}),
});
const data = await res.json();
console.log(data.result, data.company_verified, data.checked_at);
import requests
res = requests.post(
"https://thaidata.com/open-verify/v1/verify-company",
json={
"registration_number": "0105556012345",
"company_name": "Example Trading Co., Ltd.",
},
)
data = res.json()
print(data["result"], data["company_verified"], data["checked_at"])
Example values shown against the live developer-preview endpoint — no API key required.
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.
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.
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.
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.
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.
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.
Not through this API. It returns registration-level facts only. Directors, personal contact details and financial statements are out of scope here.
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.
Free developer preview — no API key is issued. We verify the company you represent (registered name vs registration number) using ThaiData's existing company records and their dates (not a live refresh per submit). Only a verified match binds your site domain; then you call the API from that exact origin. Access is bound to the browser Origin — it is not proof of domain ownership and is not strong authentication.