# Introduction

vatcheckapi.com is a JSON REST API that validates VAT numbers — format and checksum — and looks up their registration details from the official registries, for all supported countries (opens new window). All endpoints are served over HTTPS from https://api.vatcheckapi.com and return JSON.

# Your first request

Register a free API key at the developer portal (opens new window), then check a VAT number:

curl "https://api.vatcheckapi.com/v2/check?vat_number=LU26375245" \
    -H "apikey: YOUR-APIKEY"

The Validate VAT Number (opens new window) page describes the parameters and the response format in detail.

# Official libraries

Building with an AI assistant? The full API is available as a machine-readable OpenAPI 3.1 specification (opens new window), and the documentation is published as llms.txt (opens new window) / llms-full.txt (opens new window). There is also a hosted MCP server (opens new window) at https://api.vatcheckapi.com/mcp that AI agents can connect to directly.

Language Code Repository
Python https://pypi.org/project/vatcheckapi/ (opens new window)
PHP https://github.com/everapihq/vatcheckapi-php (opens new window) https://packagist.org/packages/vatcheckapi/vatcheckapi-php (opens new window)
JavaScript ES6 module https://www.npmjs.com/package/vatcheckapi-js (opens new window)
Ruby https://rubygems.org/gems/vatcheckapi (opens new window)
C# https://www.nuget.org/packages/VatCheckApi/ (opens new window)
Rust https://crates.io/crates/vatcheckapi (opens new window)
Go https://github.com/everapihq/vatcheckapi-go (opens new window) https://pkg.go.dev/github.com/everapihq/vatcheckapi-go (opens new window)
R https://github.com/everapihq/vatcheckapi-r (opens new window) https://cran.r-project.org/web/packages/vatcheckapi/index.html (opens new window)

# Authentication & API key Information

vatcheckapi.com uses API keys to allow access to the API. You can register a new API key at our developer portal (opens new window).

Multiple API keys

While our free plan only allows one API key at a time, our paid plans offer multiple API keys.
By using separate keys for different use cases you can track individual usage and make key rotations affect only certain parts of your application.

# Authentication methods

To authorize, you can use the following ways:

# GET query parameter

You can pass your API key along with every request by adding it as a query parameter apikey

WARNING

This method could expose your API key in access logs and such. Sending the API key via a header parameter as specified below circumvents this problem.

# HTTP Header

You can set a request header with the name apikey

# Rate limit and quotas

You can use a certain number of requests per month, defined by your plan. Once you go over this quota, the API returns a 429 HTTP status code, and you either need to upgrade your plan or wait until the end of the month.

We enforce a minute rate limit for specific plans. If you exceed this, the API returns a 429 HTTP status code. You then have to wait until the end of the minute to make more requests.

Not every request counts

Only successful calls count against your quota. Any error on our side or validation errors (e.g., wrong parameter) will NOT count against your quota or rate limit.

# Response Headers

We attach specific headers to tell you your current monthly/minute quota and how much you have remaining in the period.

X-RateLimit-Limit-Quota-Minute: 10
X-RateLimit-Limit-Quota-Month: 300

X-RateLimit-Remaining-Quota-Minute: 5
X-RateLimit-Remaining-Quota-Month: 199

The monthly headers (X-RateLimit-Limit-Quota-Month / X-RateLimit-Remaining-Quota-Month) are attached on every plan.

Paid plans do not receive the minute headers

The minute headers (X-RateLimit-Limit-Quota-Minute / X-RateLimit-Remaining-Quota-Minute) are only sent on plans with a minute rate limit (e.g. the free plan); paid plans do not receive them. You can always monitor your remaining quota with the Status endpoint (opens new window) — it works on every plan and does not count against your quota.

Successful validation responses (/v2/check) also include an X-Cost header stating how many requests the call counted against your quota (0 for sandbox API keys).

# Sandbox API keys

Sandbox API keys let you develop and test your integration without consuming your quota. On plans that allow more than one API key, you can create a sandbox key on the API-keys page of the dashboard (opens new window). Sandbox keys start with vat_dev_, live keys with vat_live_.

Requests made with a sandbox key behave as follows:

  • Calls to /v2/check do not query the official registries. They return fixed fake data: every VAT number with a valid format and checksum comes back as registered to GOOGLE IRELAND LIMITED, 3RD FLOOR, GORDON HOUSE, BARROW STREET, DUBLIN 4.
  • The Austrian VAT number ATU00000006 is the designated negative test case: it comes back as not registered (is_registered: false, with name and address set to null).
  • Sandbox calls cost nothing — the X-Cost response header is always 0 and nothing counts against your quota.

# API versions

The current API version is v2, which all endpoints in this documentation belong to. The legacy endpoint GET /v1/validate/{vatId} remains available for existing integrations but returns a different response format; new integrations should use /v2/check (opens new window) instead.