REST API · VERSION 1

VATFind API.
Built to integrate.

Run checks, resolve company candidates, inspect country capabilities, schedule company-record monitoring, and track usage through one explicit VATFind contract.

Contract reviewReviewed 6 October 2026OpenAPI 3.1 · JSON Schema 2020-12Current REST namespace: /v1

Start with a vf_test_… key. Sandbox calls return deterministic sample companies and use no credits. Switch to a vf_live_… key only when your integration handles all four result statuses independently.

const response = await fetch("https://vatfind.com/v1/checks", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.VATFIND_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID()
  },
  body: JSON.stringify({
    identifier_type: "vat_number",
    identifier: "GB123456789",
    country_code: "GB"
  })
});

const check = await response.json();
if (!response.ok) throw new Error(check.detail);
console.log(check.registry_match_status);
Sandbox API · deterministic sample data

Agent quickstart · Markdown API reference · Supplier onboarding integration guide

Authentication and environments

Create and revoke keys in Dashboard → API & MCP. Send a key only in the HTTP Authorization header; never put it in a URL, browser bundle, or source repository. Both environments use one base URL; the key prefix selects deterministic sandbox or live processing.

VATFind API environments
EnvironmentBase URLKey prefix
Sandboxhttps://vatfind.com/v1vf_test_…
Livehttps://vatfind.com/v1vf_live_…

Sandbox operations remain available without a paid subscription. Billable live operations require an active or trialling subscription, or the three-day grace period after a failed renewal. Existing prepaid balances remain usable only for workspaces that have not adopted the subscription. When paid access is unavailable, live billable endpoints return 402 with subscription_required or payment_required; read-only dashboard data and stored API resources remain available.

Authorization: Bearer vf_test_…
Content-Type: application/json

Checks

POST/v1/checks

A check requires identifier_type, identifier, and an ISO alpha-2 country_code. Use tax_identifier only for a United States EIN; use vat_number for VAT-like identifiers outside the US. The optional company_name is compared with the matched legal name. client_reference and short string metadata are stored with the result.

Every create request must include an Idempotency-Key containing 8–128 URL-safe characters. Retrying the same body and key within 24 hours returns the original result without charging again; using the same key for a different body returns 409.

Check request fields
FieldRequiredDescription
identifier_typeYesvat_number, tax_identifier (US EIN only), or registration_number.
identifierYes1–128 characters. VATFind retains the input and returns a normalized value.
country_codeYesTwo-letter country code, such as GB, DE, or US.
company_nameNoProduces a warning if it does not resemble the returned legal name.
client_referenceNoYour reference, up to 128 characters.

Company search

POST/v1/companies/search

Provide country_code and at least one of name, registration_number, vat_number, or tax_identifier. Use tax_identifier only for a United States EIN; use vat_number outside the US, and never send both. VATFind returns up to 100 candidates and never silently chooses a fuzzy name result. If has_more is true, refine the query.

Company searches require an Idempotency-Key, just like checks. Company IDs begin cmp_, are scoped to the authenticated workspace and environment, and do not expose a source-system identifier. Company search is one billable unit in live and free in sandbox. Newly stored company snapshots share the environment's documented daily storage allowance and retention window; refreshing an existing company ID does not consume another storage slot.

The sources array describes the delivered record conservatively. Company records delivered by VATFind through licensed data services are labelled licensed_data_provider, even when the source-reported context names a public register, because optional identity, address, and contact sections can have different upstream lineage.

Country capabilities

The country endpoints distinguish VATFind format rules from company-record coverage. not_verified means VATFind has no verified country-level coverage guarantee for that dimension, so registry search and company-status retrieval are best-effort. It does not mean a country search is disabled. not_supported means VATFind does not offer that capability.

Company-record monitoring

The current company-monitoring API reruns the same identifier check against company-record sources on a daily, weekly, or monthly target cadence. It compares only the configured company fields with the last usable snapshot. Source outages do not overwrite the snapshot or create false company-change events.

This contract monitors company-record evidence associated with the identifier. It does not monitor live VAT-registration status through VIES, HMRC, the IRS, or another tax authority. An active monitor means scheduled company checks are enabled; it does not mean the VAT registration is active.

Create, update, run, and archive operations require an Idempotency-Key. Reuse the same key and body for a retry within 24 hours. Required create fields are identifier_type, identifier, and country_code; cadence and watched_fields are optional. Supported cadences are daily, weekly, and monthly. Watched fields are registry_match_status, company_legal_status, legal_name, registration_number, vat_numbers, and registered_address.

curl https://vatfind.com/v1/monitors \
  -H "Authorization: Bearer vf_live_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: supplier-18429-monitor-v1" \
  -d '{
    "identifier_type": "vat_number",
    "identifier": "GB123456789",
    "country_code": "GB",
    "cadence": "daily",
    "client_reference": "supplier-18429",
    "webhook_url": "https://example.com/vatfind/events"
  }'

Completed monitor mutations durably bind their exact response to the Idempotency-Key for 24 hours, including the original baseline and any returned webhook signing secret.

Baseline creation and each successful scheduled or manual run use one live check; source failures do not. Daily, weekly, and monthly cadences are estimated at 30, 5, and 1 checks per monitor per month. Use monitoring:read to read monitors, monitoring:write to manage or run them, and monitoring:events to read the event feed.

Signed webhooks

Use a public HTTPS URL without embedded credentials; local, test, internal, localhost, and IP-literal destinations are rejected. VATFind returns the current signing secret whenever a non-null webhook_url is explicitly supplied, sends VATFind-Event-Id, VATFind-Timestamp, and VATFind-Signature, and retries failed or interrupted deliveries up to five attempts. Verify HMAC-SHA256 over timestamp.raw_body, reject stale timestamps, and deduplicate at-least-once delivery by the stable event ID.

Read the result correctly

VATFind intentionally does not return a single valid boolean. Syntax, registry association, tax-authority status, and legal-company status answer different questions.

VATFind check status semantics
FieldWhat it meansTypical values
format_statusWhether the normalized identifier matches a published machine format.valid, invalid, not_supported
registry_match_statusWhether an exact identifier was associated with a company record.matched, not_matched, ambiguous, unavailable
tax_authority_statusOutcome of a live authority check, only where that capability exists.valid, invalid, not_supported, not_applicable
company_legal_statusThe legal-company state returned by available company records.active, inactive, dissolved, unknown

A valid format does not prove issuance. A registry match does not prove an active tax registration. An active company is not the same thing as a tax-authority result.

Rate limits, retries, and errors

Live keys allow 60 requests per minute per key; sandbox keys allow 120. Workspace-level limits prevent multiplying source traffic across many keys. Per UTC day, a workspace can store up to 25,000 live or 2,000 sandbox checks and the same number of new company snapshots, create up to 1,000 live or 100 sandbox monitors, and run up to 25,000 live or 2,000 sandbox monitor refreshes. A monitor can be paused or resumed up to 20 times per UTC day; workspace status-change limits are 500 live or 100 sandbox transitions per day. Responses include X-Request-Id and successful authenticated responses include rate-limit headers.

Sandbox check, company-snapshot, and monitoring artifacts are retained for 90 days; live artifacts are retained for 730 days. VATFind keeps the baseline and latest checks referenced by a non-archived monitor while that monitor remains available.

Operation errors use application/problem+json with type, title, status, detail, code, request_id, and retryable. Retry only when retryable is true, honor Retry-After, and reuse the original idempotency key for any retried operation that requires one. Minute limits report the remaining seconds in the current minute; daily limits report the remaining seconds until 00:00 UTC. Unsupported methods return 405 with the endpoint's exact Allow header. A check-source outage is returned as a completed 201 result with registry_match_status: unavailable, a retryable warning, and zero credits used only after any live credit return is durably recorded.

VATFind API errors
StatusMeaning
400Malformed request, cursor, or idempotency key.
401Missing, invalid, or revoked credential.
402A subscription payment is required for this billable live operation.
403The credential is not permitted for this operation.
404The requested VATFind resource does not exist.
405The method is not supported; inspect the Allow header.
409Idempotency conflict or an identical request is still running.
413 / 415Request body is too large or uses the wrong media type.
422JSON was valid but one or more fields failed validation.
429Rate or usage allowance reached; inspect retryable before retrying.
500VATFind encountered an unexpected internal error.
502 / 503A company-search source or VATFind service is unavailable.

Endpoint reference

GET /v1/usage reports completed usage events for supported operations by channel and operation. Its requests counters are a usage ledger, not a count of every HTTP transport attempt, rejected request, health check, or rate-limit probe.

VATFind API endpoints
MethodPathPurpose
GET/v1Discover the current API version and documentation links.
POST/v1/checksRun a VAT, tax-ID, or registration-number check.
GET/v1/checksList checks in the current environment.
GET/v1/checks/{check_id}Retrieve one check by its opaque ID.
POST/v1/companies/searchFind company candidates by name or identifier.
GET/v1/companies/{company_id}Retrieve a company snapshot returned by VATFind.
GET/v1/countriesList country and identifier capabilities.
GET/v1/countries/{country_code}Read one country capability record.
GET/v1/usageRead this environment's current-period usage.
POST/v1/monitorsCreate a monitor and baseline.
GET/v1/monitorsList monitors.
GET/v1/monitors/{monitor_id}Retrieve one monitor.
PATCH/v1/monitors/{monitor_id}Pause, resume, or update monitor settings.
DELETE/v1/monitors/{monitor_id}Archive a monitor.
POST/v1/monitors/{monitor_id}/runRun an idempotent manual recheck.
GET/v1/monitoring-eventsList change and health events.
GET/v1/monitoring-events/{event_id}Retrieve one monitoring event.

The machine-readable contract is OpenAPI 3.1 and uses JSON Schema 2020-12. Treat additive response fields as non-breaking and pin your own generated client version.

Current tax-authority capability

As reviewed on 29 August 2026, VATFind REST does not call a live tax-authority service. VAT and tax-ID checks return tax_authority_status: not_supported; company-registration checks return not_applicable. The field remains separate so clients cannot mistake a format or company-record match for an authority response. Use VIES, HMRC or the relevant national service separately when your workflow requires current authority evidence.

REST API QUESTIONS

Common VAT API implementation questions.

Authentication, VAT checks, errors, retries, idempotency, monitoring webhooks, and OpenAPI.

How do I authenticate with the VATFind REST API?

Send a VATFind API key as a bearer credential from a server-side environment. Keep test and live keys separate, store them in a secret manager, and revoke any key that may have been exposed.

Should I use a VATFind test key or live key?

Use a vf_test_ key for deterministic sandbox fixtures and integration tests. Use a vf_live_ key only when production result handling, credits, retries, and exception controls are ready.

How do I check a VAT number through the API?

Submit the supported identifier, country, and check type to the checks endpoint, then read the separate format, registry-match, authority, and company-status fields. Do not infer a single valid or invalid result from HTTP success.

How do I find a VAT number by company name through REST?

Use the company-search endpoint with the legal company name and jurisdiction, review returned candidates, and retrieve the selected company when needed. Compare more than name similarity before attaching an identifier to your record.

What does a 401 VATFind API response mean?

A 401 response normally indicates a missing, malformed, expired, revoked, or wrong-environment credential. Check bearer authentication and create or rotate the key in the developer workspace if required.

What does a 403 VATFind API response mean?

A 403 response means the authenticated credential or connection lacks permission for the requested action. Review the key capability or OAuth scope rather than retrying the same unauthorized request.