Home / Use cases / KYC & Identity
Tax ID Verification for KYC (Know Your Customer) Workflows
KYC for B2B onboarding requires verifying that counterparty businesses are legitimately registered. Use the TaxID API to validate VAT and Tax ID numbers as part of your KYC workflow, with real-time registry lookup and structured audit records.
Know Your Customer (KYC) for B2B contexts — often called KYB (Know Your Business) — requires confirming the legal existence and registration status of a business entity before onboarding it as a customer, partner, or supplier. A VAT or Tax ID number is one of the most reliable identifiers available: it is issued by a government authority, publicly verifiable against an official registry, and changes only when the business restructures or ceases to trade. The TaxID API provides programmatic access to 31 official registries for this purpose.
The most common KYC use case is B2B SaaS customer onboarding: a business signs up, provides their company name and VAT number, and the platform must verify that the company exists and is currently registered before activating the account for business pricing, extended payment terms, or high-volume usage. The TaxID API call takes under 2 seconds and returns the registry-confirmed company name and address, which can be cross-referenced against the customer's self-declared details.
For regulated industries — financial services, legal, accounting, payment processing — KYB requirements go beyond VAT validation and include beneficial ownership verification, sanctions screening, and adverse media checks. In these contexts, VAT validation is a first-line automated check that screens out clearly invalid entities before they reach the more expensive manual review steps in the KYB pipeline.
The TaxID API is particularly useful for EU-wide KYC because it covers all 27 member states plus UK, Norway, Switzerland, and Australia through a single endpoint. You do not need to integrate with 31 different national registries — the API handles the routing, SOAP-to-JSON translation, and error handling for each country, and returns a consistent response shape regardless of which registry was queried.
Implementation steps
- 1
Collect the Tax ID at onboarding
Add a VAT/Tax ID field to your B2B signup or onboarding form. Label it clearly for each market: 'VAT Number' for EU/UK, 'ABN' for Australia, 'MVA Number' for Norway. Use the country selected in the billing address to determine which label and format to display.
- 2
Validate in real time via the TaxID API
On form submission, call GET /api/v1/validate/:country/:vat from your server. Return a loading state while the API call is in progress (VIES calls can take up to 2 seconds). Confirm the returned company_name matches the declared company name before proceeding — a mismatch is a KYC risk signal.
- 3
Cross-reference company name and address
Compare the company_name and address from the API response against the customer's self-declared details. Use fuzzy matching to handle abbreviations and legal suffix variations (Ltd/Limited, GmbH, SRL). A substantial name mismatch should trigger a manual review step, not automatic rejection — the business may have recently rebranded or be filing under a trading name.
- 4
Store the KYC record at the account level
Persist the full API response — vat_number, company_name, address, status, request_id, validated_at — with the customer account record. This is your KYC documentation showing that identity was verified at onboarding. The request_id ties back to the specific VIES query made at that point in time.
- 5
Schedule periodic re-validation for active accounts
For accounts with elevated risk or regulatory exposure, schedule quarterly re-validation of all VAT numbers. For standard accounts, annual re-validation is typically sufficient. Automate this with the TaxID batch endpoint to process your full customer list in a single API call.
Code example
Node.js
const res = await fetch(
'http://localhost:3000/api/v1/validate/DE/DE123456789',
{ headers: { 'Authorization': 'Bearer YOUR_API_KEY' } }
);
const { valid, status, company_name, company_address } = await res.json();
if (valid) {
console.log(`Valid EU business: ${company_name}`);
} else if (status === 'service_unavailable') {
// VIES is temporarily down — retry or allow with manual check
console.log('VIES unavailable — check back in a few minutes');
} else {
console.log('Invalid VAT number — charge local tax rate');
}Python
import requests
res = requests.get(
"http://localhost:3000/api/v1/validate/DE/DE123456789",
headers={"Authorization": "Bearer YOUR_API_KEY"}
)
data = res.json()
if data["valid"]:
print(f"Valid: {data['company_name']}")
elif data["status"] == "service_unavailable":
print("VIES temporarily unavailable")
else:
print("Invalid VAT number")API response
The TaxID API returns a consistent JSON response for every validation request:
{
"valid": true,
"status": "active",
"country_code": "DE",
"vat_number": "123456789",
"company_name": "Example GmbH",
"company_address": "Musterstraße 1, 10115 Berlin",
"request_date": "2026-05-10T00:00:00.000Z",
"cached": false,
"request_id": "req_01j..."
}Error handling
The API uses a consistent Stripe-style error format. Always handle service_unavailable separately — VIES has occasional downtime and you should not reject valid customers during outages.
activeVAT number is valid and the business is registered
invalidVAT number format is wrong or not registered in VIES
service_unavailableVIES or the national system is temporarily down — retry later
Frequently asked questions
Is VAT validation the same as a KYC check?
VAT validation confirms that a business is registered in an official government tax registry and is currently active. This is equivalent to a business existence check — one component of KYC/KYB. A complete KYB workflow also includes beneficial ownership identification, sanctions screening, and adverse media review. VAT validation automates the first and most reliable component.
Can I use the TaxID API for sole traders and partnerships, not just limited companies?
Yes, with caveats. Sole traders and partnerships can hold VAT registrations in most EU countries and the UK if their taxable turnover exceeds the registration threshold. However, not all VIES member states return company_name for sole traders — some return only the registration status. Australia's ABR covers all entity types including sole traders and trusts.
What should I do when the API returns a valid status but the company name does not match?
A name mismatch between the VIES-registered name and the customer's self-declared name is a KYC risk signal, not necessarily a rejection. Common explanations include trading under a different name, a recent acquisition or rebranding, or simply a data entry error. The safest approach is to flag for manual review rather than automatically rejecting — allow the customer to upload a company registration document to resolve the discrepancy.
Evaluating EU VAT APIs? Compare TaxID vs Vatstack, Vatlayer, Avalara →
Related use cases
Validate EU VAT numbers in Stripe Checkout
Add EU VAT validation to your Stripe checkout flow. Verify customer VAT numbers server-side before a...
UK VAT validation in Shopify B2B
Validate UK VAT numbers for B2B customers in Shopify. Required under UK Making Tax Digital rules for...
WooCommerce Spain NIF/CIF validation
Validate Spanish NIF and CIF numbers in WooCommerce checkout. Automatically apply B2B tax exemptions...