Europe VAT Validation API
Introduction
Signzy’s EU VAT Validation API is designed to validate VAT (Value Added Tax) numbers across European Union jurisdictions. The API verifies VAT numbers against authoritative government sources, including official domestic tax registries and the European Commission’s VIES system.
The API supports both:
- Domestic validation (country-specific government tax databases such as Poland White List and Hungary NAV), and
- Cross-border validation via VIES (EU Commission VAT Information Exchange System).
This unified approach ensures accurate verification of VAT registration status for businesses operating within the EU.
API Details
Request Body
curl --location 'https://api-preproduction.signzy.us/api/v3/eu-vat-validation' \
--header 'Content-Type: application/json' \
--header 'Authorization: <AUTH TOKEN>' \
--data '{
"vatNumber": "79205705XX",
"countryCode": "PL",
"mode": "DOMESTIC"
}'Request Body Parameters
Parameter | Type | Description | Required |
|---|---|---|---|
mode | String | Validation mode. Allowed values: DOMESTIC, VIES | Yes |
countryCode | String | 2-letter uppercase ISO country code (e.g., PL, HU, DE) | Yes |
vatNumber | String | VAT number to validate | Yes |
VAT Number Validation Rules & Country Coverage
Mode | Country Code | Country | VAT Format Requirement |
|---|---|---|---|
DOMESTIC | PL | Poland | Exactly 10 digits (NIP) |
DOMESTIC | HU | Hungary | Exactly 8 digits |
VIES | AT | Austria | ATU + 8 digits |
VIES | BE | Belgium | BE + 9–10 digits |
VIES | BG | Bulgaria | BG + 9–10 digits |
VIES | CY | Cyprus | CY + 8 digits + 1 letter |
VIES | CZ | Czechia | CZ + 8–10 digits |
VIES | DE | Germany | DE + 9 digits |
VIES | DK | Denmark | DK + 8 digits |
VIES | EE | Estonia | EE + 9 digits |
VIES | EL | Greece | EL + 9 digits |
VIES | ES | Spain | ES + 9 alphanumeric characters |
VIES | FI | Finland | FI + 8 digits |
VIES | FR | France | FR + 2 alphanumeric + 9 digits |
VIES | HR | Croatia | HR + 11 digits |
VIES | HU | Hungary | HU + 8 digits |
VIES | IE | Ireland | IE + 7 digits + 1–2 letters |
VIES | IT | Italy | IT + 11 digits |
VIES | LT | Lithuania | LT + 9 digits OR 12 digits |
VIES | LU | Luxembourg | LU + 8 digits |
VIES | LV | Latvia | LV + 11 digits |
VIES | MT | Malta | MT + 8 digits |
VIES | NL | Netherlands | NL + 9 digits + B + 2 digits |
VIES | PL | Poland | PL + 10 digits |
VIES | PT | Portugal | PT + 9 digits |
VIES | RO | Romania | RO + 2–10 digits |
VIES | SE | Sweden | SE + 12 digits |
VIES | SI | Slovenia | SI + 8 digits |
VIES | SK | Slovakia | SK + 10 digits |
VIES | XI | Northern Ireland | XI + 9 digits |
Success Response
{
"result": {
"mode": "VIES",
"countryCode": "BG",
"vatNumber": "1750058X",
"status": "INVALID",
"name": "",
"address": ""
},
"reason": "Request Successful",
"code": "S001"
}Response Body Parameters
Top-Level Result Object
Field | Type | Description |
|---|---|---|
result | Object | Main payload containing lookup results and metadata. |
reason | string | High-level reason or message from the service. |
code | string | Status or error code associated with the response. |
Result Details
Field | Type | Description | Possible Values |
|---|---|---|---|
mode | String | Validation mode used for processing the request | DOMESTIC, VIES |
countryCode | String | 2-letter country code of the VAT number | ISO 2-letter uppercase |
vatNumber | String | VAT / Tax number that was validated | As per country format rules |
status | String | Standardized validation result | VALID, INVALID, NOT_FOUND |
name | String | Registered legal entity name returned from source | String (Empty if unavailable) |
address | String | Registered address returned from source | String (Empty if unavailable) |
Success Codes
HTTP Status Code | Success Code | Description |
|---|---|---|
200 | S001 | Request Successful. |
200 | S003 | Data not Found on source. |
Error Code and Mapping
Sample Error
{
"result": {},
"reason": "Upstream error",
"status": "failure",
"code": "E401"
}Error Response Parameters
Parameter | Description |
|---|---|
result | Empty result object |
reason | Reason for error |
status | Status of the api |
code | Error code from Signzy |
Error Codes
HTTP Status Code | Error Code | Description |
|---|---|---|
400 | E001 | Bad Request |
401 | E1001 | Unauthorized Access |
403 | E201 | Forbidden |
404 | E301 | Data Not Found |
409 | E401 | Upstream error |
429 | E501 | Rate Limit Exceeded |
500 | E601 | Internal Server Error |
503 | E701 | Service Unavailable |
504 | E801 | Timeout |
Getting help
Please feel free to contact us if you have any questions, require clarification, or have ideas for how to make the documents or any of our services better.
You can reach out to us at [email protected]. We strive to provide prompt and reliable assistance, ensuring your queries are addressed effectively.
We value your feedback and are committed to making your experience smooth and enjoyable. Our team is dedicated to assisting you with any needs you may have. Thank you for choosing our services. We look forward to helping you!