So i'm trying to check VAT Numbers using the REST Service the EU provides.
Here is some documentation about it:
https://ec.europa.eu/taxation_customs/vies/#/technical-information
I'm using Postman for a check. Using this URL:
https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-test-service
The request body JSON example:
{
"countryCode": "DE",
"vatNumber": "DE129273398",
"requesterMemberStateCode": "DE",
"requesterNumber": "DE811115368",
"traderName": "Bayerische Motoren Werke Aktiengesellschaft",
"traderStreet": "Petuelring 130",
"traderPostalCode": "80809",
"traderCity": "München",
"traderCompanyType": "AG"
}
I always (for over a week) get the answer the service is not available:
{
"actionSucceed" : false,
"errorWrappers" : [ {
"error" : "SERVICE_UNAVAILABLE"
} ]
}
When using this URL:
https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number
with the same request body i always get:
{
"countryCode": "DE",
"vatNumber": "DE811115368",
"requestDate": "2023-11-04T14:19:45.180Z",
"valid": false,
"requestIdentifier": "",
"name": "---",
"address": "---",
"traderName": "---",
"traderStreet": "---",
"traderPostalCode": "---",
"traderCity": "---",
"traderCompanyType": "---",
"traderNameMatch": "NOT_PROCESSED",
"traderStreetMatch": "NOT_PROCESSED",
"traderPostalCodeMatch": "NOT_PROCESSED",
"traderCityMatch": "NOT_PROCESSED",
"traderCompanyTypeMatch": "NOT_PROCESSED"
}
Am i doing something wrong?
CodePudding user response:
Afaik detailed information on the holder is not available for German VAT numbers. If you omit the "DE" prefix from the fields vatNumber
and requesterNumber
, you will get a result for valid
from https://ec.europa.eu/taxation_customs/vies/rest-api/check-vat-number though.
If you test with a Austrian VAT#, for example, you'll get more information.
{
"countryCode": "AT",
"vatNumber": "U18522105",
"requesterMemberStateCode": "DE",
"requesterNumber": "811115368"
}
results in
{
"countryCode": "AT",
"vatNumber": "U18522105",
"requestDate": "2023-11-04T15:00:25.677Z",
"valid": true,
"requestIdentifier": "WAPIAAAAYua2Xl4O",
"name": "KSR Group GmbH",
"address": "Im Wirtschaftspark 15\nAT-3494 Gedersdorf",
"traderName": "---",
"traderStreet": "---",
"traderPostalCode": "---",
"traderCity": "---",
"traderCompanyType": "---",
"traderNameMatch": "NOT_PROCESSED",
"traderStreetMatch": "NOT_PROCESSED",
"traderPostalCodeMatch": "NOT_PROCESSED",
"traderCityMatch": "NOT_PROCESSED",
"traderCompanyTypeMatch": "NOT_PROCESSED"
}
CodePudding user response:
The test service isn't intended to validate actual VAT numbers and more to test how your application responds to the various possible returns from the api. If you read the WSDL it has
Specific disclaimer for this service -----------------------------------------
Here is the list of VAT Number to use to receive each kind of answer :
100 = Valid request with Valid VAT Number
200 = Valid request with an Invalid VAT Number
201 = Error : INVALID_INPUT
202 = Error : INVALID_REQUESTER_INFO
300 = Error : SERVICE_UNAVAILABLE
301 = Error : MS_UNAVAILABLE
302 = Error : TIMEOUT
400 = Error : VAT_BLOCKED
401 = Error : IP_BLOCKED
500 = Error : GLOBAL_MAX_CONCURRENT_REQ
501 = Error : GLOBAL_MAX_CONCURRENT_REQ_TIME
600 = Error : MS_MAX_CONCURRENT_REQ
601 = Error : MS_MAX_CONCURRENT_REQ_TIME
For all the other cases, The web service will responds with a "SERVICE_UNAVAILABLE" error.
So it would expect a vat number something like
"vatNumber": "100",
would give a test result of something like
{
"countryCode": "DE",
"vatNumber": "100",
"requestDate": "2023-11-04T14:51:52.596Z",
"valid": true,
"requestIdentifier": "",
"name": "John Doe",
"address": "123 Main St, Anytown, UK"
}
and as the wsdl states
For all the other cases, The web service will responds with a "SERVICE_UNAVAILABLE" error.
As for the actual service, the VAT numbers shouldn't start with DE, removing those should give some validation. Not sure about the field values or the test service though.