Home > OS >  Using EU VIES REST Service to check VAT Number
Using EU VIES REST Service to check VAT Number

Time:11-05

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.

  • Related