Retrieve all EU VAT Rates using an IP Address or Country Code.
Convert currencies to GBP & EUR from any other currency.
Validate VAT Numbers to determine if your customer is a valid business customer.
Easily generate VAT invoice data or use our handy auto generated invoices.
API Functions:
<?php
$apikey = '0800fc577294c34e0b28ad2839435945';
$ip_address = '212.58.246.90';
$endpoint = 'https://vatapi.com/v1/ip-check?address='.$ip_address;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Apikey: '.$apikey));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 40);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
{
"status": 200,
"country_code": "LU",
"country": "Luxembourg",
"vat_applies": true,
"rates": {
"standard": {
"value": 17
},
"reduced": {
"value": 8,
"applies_to": false
},
"reduced_alt": {
"value": null,
"applies_to": false
},
"super_reduced": {
"value": 3,
"applies_to": "ebooks"
},
"parking": {
"value": 14,
"applies_to": false
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<status>200</status>
<country_code>LU</country_code>
<country>Luxembourg</country>
<rates>
<standard>
<value>17</value>
</reduced>
<reduced>
<value>8</value>
<applies_to />
</reduced>
<reduced_alt>
<value>null</value>
<applies_to />
</reduced_alt>
<super_reduced>
<value>3</value>
<applies_to>ebooks</applies_to>
</super_reduced>
<parking>
<value>14</value>
<applies_to />
</parking>
</rates>
</xml>
<?php
$apikey = '0800fc577294c34e0b28ad2839435945';
$code = 'LU';
$endpoint = 'https://vatapi.com/v1/country-code-check?code='.$code;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Apikey: '.$apikey));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 40);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
{
"status": 200,
"country_code": "LU",
"country": "Luxembourg",
"vat_applies": true,
"rates": {
"standard": {
"value": 17
},
"reduced": {
"value": 8,
"applies_to": false
},
"reduced_alt": {
"value": null,
"applies_to": false
},
"super_reduced": {
"value": 3,
"applies_to": "ebooks"
},
"parking": {
"value": 14,
"applies_to": false
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<status>200</status>
<country_code>LU</country_code>
<country>Luxembourg</country>
<rates>
<standard>
<value>17</value>
</reduced>
<reduced>
<value>8</value>
<applies_to />
</reduced>
<reduced_alt>
<value>null</value>
<applies_to />
</reduced_alt>
<super_reduced>
<value>3</value>
<applies_to>ebooks</applies_to>
</super_reduced>
<parking>
<value>14</value>
<applies_to />
</parking>
</rates>
</xml>
<?php
$apikey = '0800fc577294c34e0b28ad2839435945';
$endpoint = 'https://vatapi.com/v1/vat-rates';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Apikey: '.$apikey));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 40);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
{
"status": 200,
"countries": [
{
"AT": {
"country": "Austria",
"rates": {
"standard": {
"value": 20
},
"reduced": {
"value": 10,
"applies_to": false
},
"reduced_alt": {
"value": null,
"applies_to": false
},
"super_reduced": {
"value": null,
"applies_to": false
},
"parking": {
"value": 12,
"applies_to": false
}
}
}
},
{
"BE": {
"country": "Belgium",
"rates": {
"standard": {
"value": 21,
}
<?xml version="1.0" encoding="utf-8"?>
<xml>
<status>200</status>
<countries>
<country>
<AT>
<country>Austria</country>
<rates>
<standard>
<value>20</value>
</standard>
<reduced>
<value>10</value>
<applies_to>0</applies_to>
</reduced>
<reduced_alt>
<value/>
<applies_to>0</applies_to>
</reduced_alt>
<super_reduced>
<value/>
<applies_to>0</applies_to>
</super_reduced>
<parking>
<value>12</value>
<applies_to>0</applies_to>
</parking>
</rates>
</AT>
</country>
<country>
<BE>
<country>Belgium</country>
<rates>
<standard>
<value>21</value>
</standard>
etc etc...
<?php
$apikey = '0800fc577294c34e0b28ad2839435945';
$vat_number = 'GB198332378';
$endpoint = 'https://vatapi.com/v1/vat-number-check?vatid='.$vat_number;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Apikey: '.$apikey));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 40);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
{
"status": 200,
"countryCode": "GB",
"vatNumber": 198332378,
"requestDate": "2017-10-30+01:00",
"valid": true,
"name": "DIGITAL GOODS STORE LTD",
"address": "GRESHAM HOUSE\n24 HOLBORN VIADUCT\nLONDON\n\n\nEC1A 2BN"
}
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<status>200</status>
<countryCode>GB</countryCode>
<vatNumber>333289454</vatNumber>
<requestDate>2014-10-30+01:00</requestDate>
<valid>1</valid>
<name>BRITISH BROADCASTING CORPORATION</name>
<address>FAO ALEX FITZPATRICK
BBC GROUP VAT MANAGER
THE LIGHT HOUSE (1ST FLOOR)
MEDIA VILLAGE, 201 WOOD LANE
LONDON
W12 7TQ</address>
</xml>
<?php
$apikey = '0800fc577294c34e0b28ad2839435945';
$currency_from = 'EUR';
$currency_to = 'GBP';
$amount = 39.99;
$endpoint = 'https://vatapi.com/v1/country-code-check?currency_from='.$currency_from.'¤cy_to='.$currency_to.'&amount='.$amount;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Apikey: '.$apikey));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 40);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
{
"status": 200,
"currency_from": "EUR",
"currency_to": "GBP",
"amount_from": 39.99,
"amount_to": 31.56,
"rate": 1.2673
}
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<status>200</status>
<currency_from>EUR</currency_from>
<currency_to>GBP</currency_to>
<amount_from>39.99</amount_from>
<amount_to>31.56</amount_to>
<rate>1.2673</rate>
</xml>
<?php
$apikey = '0800fc577294c34e0b28ad2839435945';
$invoice_id = 3023;
$endpoint = 'https://vatapi.com/v1/invoice/'.$invoice_id;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Apikey: '.$apikey));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 40);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
{
"status": 200,
"invoice": {
"id": 3023,
"invoice_number": 46,
"date": "2014-11-10 15:38:29",
"tax_point": "2014-11-10 15:38:29",
"type": "sale",
"currency_code": "GBP",
"currency_code_conversion": null,
"conversion_rate": null,
"business_name": "Digital Goods Store Ltd",
"business_address": "International House, \n24 Holborn Viaduct, \nCITY OF LONDON, \nLondon EC1A 2BN",
"customer_name": null,
"customer_address": "John Smith\n23 Oakland Drive\nLondon\nL1 A33\nUnited Kingdom\n\nCountry: GB \nIP Address: 86.14.62.178",
"vat_number": "198 3323 78",
"subtotal": 19.99,
"vat_total": 4,
"discount_rate": null,
"discount_total": 0,
"total": 23.99,
"logo_url": "https://vatapi.com/images/logo-invoice.jpg",
"invoice_url": "https://vatapi.com/invoice/1/1c5a88",
"notes": null,
"items": [
{
"description": "Subscription Payment Standard",
"quantity": 1,
"price_each": 19.99,
"vat_rate": 20
}
]
}
}
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<status>200</status>
<invoice>
<id>3023</id>
<invoice_number>46</invoice_number>
<date>2014-11-10 15:38:29</date>
<tax_point>2014-11-10 15:38:29</tax_point>
<type>sale</type>
<currency_code>GBP</currency_code>
<currency_code_conversion/>
<conversion_rate/>
<business_name>Digital Goods Store Ltd</business_name>
<business_address>
International House,
24 Holborn Viaduct,
CITY OF LONDON,
London EC1A 2BN</business_address>
<customer_name/>
<customer_address>
John Smith
23 Oakland Drive
London
L1 A33
United Kingdom
Country: GB
IP Address: 86.14.62.178</customer_address>
<vat_number>198 3323 78</vat_number>
<subtotal>19.99</subtotal>
<vat_total>4.00</vat_total>
<discount_rate/>
<discount_total>0.00</discount_total>
<total>23.99</total>
<logo_url>https://vatapi.com/images/logo-invoice.jpg</logo_url>
<invoice_url>https://vatapi.com/invoice/1/1c5a88</invoice_url>
<notes/>
<items>
<item>
<description>Subscription Payment Standard</description>
<quantity>1</quantity>
<price_each>19.99</price_each>
<vat_rate>20</vat_rate>
</item>
</items>
</invoice>
</xml>
Are you selling digital services to other EU countries? From Jan 1st 2015 changes to the VAT place of supply are coming into effect.
One acceptable way to prove where your customer resides is their IP address. We have removed the headache and cost of you having to geo locate your customers IP address, and workout what VAT rate they should be charged.
Simply pass your customers IP address from your application to our API and we'll return a JSON or XML object of all the current EU VAT rates for that country, or if you already know their country you can lookup the rates from the 2 digit country code.
Validating VAT numbers in realtime is a useful way to determine if a customer is who they say they are, and is essential in determining if your selling to a consumer i.e. a B2C transaction or business B2B. Information returned is based on the European Commission VIES service therefore is realtime and up-to date.
Although this applies to UK business it may apply to other member states. If you are invoicing in any other currency other than your local currency it is a requirement to show the converted amount in your local currency on your VAT invoices, read here for clarification.
We keep an up-to-date record of the current currency conversion rates that the HMRC and European Central Bank publish, via the currency conversion API function you are able to convert any currency to UK Sterling or Euro.
Our VAT compliant invoice API service was developed out of necessity in order for our own business to comply with the new EU law on the sale of digital services, effective Jan 1st 2015. We have developed the service strictly in accordance with the requirements for VAT compliant invoicing published by the HMRC.
This API will save our business and quite possibly yours a big headache as it gives us a centralised invoicing system with sequential invoice numbering, and can accept invoices from any one of our companies different trading names.
It couldn't be any simpler to use, you simply send it your invoice data and it generates a secure url which you can then view the invoice from, for example:
You also get back all the generated invoice data allowing you to do whatever suits your businesses needs.
Flexible pricing plans to meet demand.
All plans include full API features and all data is delivered over SSL.
Free Plan
50
requests per month
FREE
Starter
500
requests per month
£5.99/mth
Basic
2,000
requests per month
£11.99/mth
Standard
10,000
requests per month
£35.99/mth
Professional
50,000
requests per month
£119.99/mth
Premium
200,000
requests per month
£299.99/mth
Custom plan
Need more?
Get in touch!
All data that we make available via the VAT API and store at vatapi.com is hosted on secure UK servers and accessed over the SSL secure sockets layer protocol. Our company is registered with the UK data protection act, registration reference:- ZA335680