VAT Rates API - EU, UK, GST and US State Rates by Country Code or IP
The VAT Rates API returns the current value-added tax and GST rates for any of 125+ countries from a single REST call, looked up by country code or resolved automatically from a user's IP. Each response carries the country's standard rate, its full reduced-rate structure, and - for EU and UK markets - category-level rates for goods like books, newspapers, and broadcasting, while US and Canadian responses break rates down to the state and provincial level. It's built for fintech engineers, e-commerce and SaaS billing teams, ERP integrators, and accounting-software developers handling cross-border tax.
Features
VAT & GST Rates for 125+ Countries
Every supported country returns a single rate object with country, type, currency, and standard_rate - the headline rate applied to most goods and services in that market. Coverage spans the EU and UK plus GST jurisdictions like Australia, India, and Canada, all from one consistent endpoint and one dataset. Use it for populating tax fields on invoices and checkout flows without stitching together per-country sources or maintaining your own rate table.
Full EU & UK Reduced-Rate Structure
For EU and UK markets, the reduced_rate array carries every reduced tier a country applies, and the categories object returns the specific rates for books, newspapers, periodicals, and broadcasting. That means you get the exact rate for zero-rated and reduced-rate product types, not just the standard rate. Use it for EU VAT OSS compliance and for pricing digital goods like ebooks that qualify for a reduced rate in the customer's country.
US State & Canadian Provincial Rates
For countries where tax is set regionally, passing a state value returns the rate for that jurisdiction - for example US/NY or a Canadian province - alongside the national-level response shape. The rate comes back in the same object structure as any country lookup, so regional and national handling share one code path. Use it for point-of-sale and storefront pricing in North American markets without hard-coded state lookup tables.
Bulk Rates in One Request
Send a list of countries (each optionally with a state) in a single POST and receive one rate object per entry in the response array - no per-country round-trips. The request and response use the same field structure as a single lookup, so a bulk integration is a superset of the single-call one. Use it for refreshing a complete multi-jurisdiction rate table on a schedule, or seeding tax configuration across every market your platform serves at once.
IP-Based Rate Resolution
The IP endpoint maps an ipAddress to its country and returns that country's rate object directly - and with no IP supplied, it resolves the rate from the caller's own IP. The response is identical to a country-code lookup, just with the country inferred for you. Use it for checkout and storefront flows that need to surface a local tax rate before the customer has selected or entered a country.
One Maintained Dataset & Coverage Check
All three lookup modes - country, bulk, and IP - read from the same maintained rate dataset, so a rate is consistent no matter how you fetch it. A separate supported-countries lookup (type=VAT) returns the full list of covered jurisdictions so you can validate coverage before integrating or build a country selector. Use it for pre-flight checks in onboarding flows and for keeping a UI country list in sync with what the API actually supports.
Built for These Use Cases
Cross-border e-commerce checkout
Resolve the right tax rate the moment a shopper lands on checkout by passing their IP, before they've picked a country. Display a VAT-inclusive price that matches the rate their jurisdiction actually charges, so the total they see is the total they pay. For B2B orders, pair this with the VAT Number Validation API to apply the EU reverse-charge exemption when a buyer supplies a valid VAT number.SaaS and digital-goods billing
Charge EU customers the VAT rate of their own country to meet One-Stop-Shop rules, and pull the reduced rate where a digital product like an ebook qualifies for one. Because the response separates the standard rate from reduced tiers and product categories, your billing logic can pick the correct rate per line item instead of defaulting everything to the standard rate.
Invoicing and ERP integration
Populate every invoice line with the correct jurisdiction rate at the time the document is generated, across as many markets as the customer base spans. Pull the whole rate table in one bulk request on a schedule so your ERP always has fresh figures, and convert displayed amounts into the buyer's currency with the Currency Converter API.North American storefront pricing
For US and Canadian sales where rates vary by state or province, fetch the regional rate at point of sale rather than maintaining hard-coded lookup tables that drift out of date. One integration handles both the national response shape and the regional breakdown, so adding a new state is a data change, not a code change.
Single VAT Rates API
$ pip install requestsimport requests
url = "https://api.apifreaks.com/v1.0/vat/rates/country?country=DE"
payload = {}
headers = {
'X-apiKey': 'API-KEY'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
Bulk VAT Rates API
$ pip install requestsimport requests
import json
url = "https://api.apifreaks.com/v1.0/vat/rates/country"
payload = json.dumps({
"countries": [
{
"country": "ES"
},
{
"country": "US",
"state": "NY"
}
]
})
headers = {
'Content-Type': 'application/json',
'X-apiKey': 'API-KEY'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Pass an array of country objects in the request body. Each entry supports the same country and state values as the single lookup endpoint.
VAT by IP API
$ pip install requestsimport requests
url = "https://api.apifreaks.com/v1.0/vat/rates/ip-address?ipAddress=178.238.11.6"
payload = {}
headers = {
'X-apiKey': 'API-KEY'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
How To Guides
Look up one country
Pass a 2-letter country code to the single-country endpoint. The response is an array with one rate object: standard rate, currency, the reduced-rate tiers, and category rates where the market defines them.
curl -X GET 'https://api.apifreaks.com/v1.0/vat/rates/country?apiKey=API-KEY&country=IE' [ { "country": "IE", "type": "vat", "currency": "EUR", "standard_rate": 0.23, "reduced_rate": [ 0, 0.09, 0.135 ], "categories": { "books": 0.09, "newspapers": 0.23, "periodicals": 0.23, "broadcasting": 0.23 } } ]
Get a US state or Canadian provincial rate
Add a state value to a regional country lookup to return the rate for that jurisdiction.
curl -X GET 'https://api.apifreaks.com/v1.0/vat/rates/country?apiKey=API-KEY&country=US&state=NY' [ { "country": "US", "state": "NY", "type": "vat", "currency": "", "standard_rate": 0.04 } ]
Fetch many countries in one request
POST a list of countries to the same path to get one rate object back per entry. Authenticate POST requests with the X-apiKey header.
curl -X POST 'https://api.apifreaks.com/v1.0/vat/rates/country' \ -H 'X-apiKey: API-KEY' \ -H 'Content-Type: application/json' \ -d '{ "countries": [ { "country": "ES" }, { "country": "US", "state": "NY" } ] }' [ { "country": "ES", "type": "vat", "currency": "EUR", "standard_rate": 0.21, "reduced_rate": [ 0.1 ], "super_reduced_rate": [ 0.04 ], "categories": { "books": 0.21, "newspapers": 0.21, "periodicals": 0.21, "broadcasting": 0.21 } }, { "country": "US", "state": "NY", "type": "vat", "currency": "", "standard_rate": 0.04 } ]
Resolve a rate from an IP address
Pass an ipAddress to get that location's country rate, or omit it to use the caller's own IP.
curl -X GET 'https://api.apifreaks.com/v1.0/vat/rates/ip-address?apiKey=API-KEY&ipAddress=178.238.11.6' [ { "country": "GB", "type": "vat", "currency": "GBP", "standard_rate": 0.2, "reduced_rate": [ 0, 0.05 ], "categories": { "books": 0.2, "newspapers": 0.2, "periodicals": 0.2, "broadcasting": 0.2 } } ] # Omit ipAddress to auto-detect from the request: curl -X GET 'https://api.apifreaks.com/v1.0/vat/rates/ip-address?apiKey=API-KEY'
Check supported countries before integrating
List every jurisdiction the rates dataset covers so you can validate coverage or build a country selector.
curl -X GET 'https://api.apifreaks.com/v1.0/vat/supported-countries?apiKey=API-KEY&type=VAT' { "VAT_Supported_Countries_And_States": [ { "albania": { "code": "al" } }, { "algeria": { "code": "dz" } }, { "andorra": { "code": "ad" } }, ... ] } # Full response lists 125+ countries and their states/provinces where applicable.
Frequently Asked Questions
Pricing
To use the VAT Rates API, API credits are required. Charges apply only for successful queries, defined by a 2xx status code. If a request results in a 4xx or 5xx status code, no credits will be deducted, and any credits already charged will be refunded.
| Service | Credits |
|---|---|
| VAT Rates by Country | 20 credits per successful request |
| Bulk VAT Rates by Country | 20 credits per successful VAT rate per country (bulk) |
| VAT Rates by IP Address | 20 credits per successful request |
Utilize the Credits Usage API to efficiently monitor your recent consumption of both one-off and subscription credits. This API provides a streamlined way to track and manage your credit usage, ensuring you stay informed about your remaining balance and can optimize your resource allocation effectively.