Find an API

Search public APIs with auth details & Postman guides

← All APIs

Taxrates.io API

taxrates · Finance

Finance No Auth Free & Open financial

Introduction Taxrates.io is a global tax rate service that automates the management of monitoring tax rates changes in 181 countries. We monitor over 14,000 US sales tax, VAT, GST rates for you and make updates via our API so you always have the most update tax rates. You can use Taxrates.io as a virtual sandbox where we provide you with 30 days free trial. Countries We currently support the following countries around the world. If you would like to request the

Authentication

No authentication requiredFree to use with no key needed.

Sample Requests

GET Tax rates by Country Code

Get request. This method returns all tax rates for country discovered based on country code. The country code must be 2 letters ISO 3166-1 alfa-2 country code (see here for more information). You can use 'filter' parameter to

https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/countrycode?zip=71642&date=2020-09-02&domain=api.taxrates.io&filter=&province =&country_code=US&product_codes[]=C010

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/countrycode?zip=71642&date=2020-09-02&domain=api.taxrates.io&filter=&province =&country_code=US&product_codes[]=C010"
import requests
params = {
    "zip": "71642",
    "date": "2020-09-02",
    "domain": "api.taxrates.io",
    "filter": "",
    "province ": "",
    "country_code": "US",
    "product_codes[]": "C010"
}
response = requests.get(
    "https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/countrycode",
    params=params,
)
print(response.json())
const url = new URL('https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/countrycode');
url.searchParams.set('zip', '71642');
url.searchParams.set('date', '2020-09-02');
url.searchParams.set('domain', 'api.taxrates.io');
url.searchParams.set('filter', '');
url.searchParams.set('province ', '');
url.searchParams.set('country_code', 'US');
url.searchParams.set('product_codes[]', 'C010');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/countrycode")
	q := baseURL.Query()
	q.Set("zip", "71642")
	q.Set("date", "2020-09-02")
	q.Set("domain", "api.taxrates.io")
	q.Set("filter", "")
	q.Set("province ", "")
	q.Set("country_code", "US")
	q.Set("product_codes[]", "C010")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/countrycode")
uri.query = URI.encode_www_form({
  "zip" => "71642",
  "date" => "2020-09-02",
  "domain" => "api.taxrates.io",
  "filter" => "",
  "province " => "",
  "country_code" => "US",
  "product_codes[]" => "C010"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/countrycode?" . http_build_query([
    "zip" => "71642",
    "date" => "2020-09-02",
    "domain" => "api.taxrates.io",
    "filter" => "",
    "province " => "",
    "country_code" => "US",
    "product_codes[]" => "C010"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET Tax rates by IP address

Get request. This method returns all tax rates for country discovered on either your IP address or IP address param. The IP param is not required. When empty, the taxrates.io will try to discover your IP address and based on this will retrieve the tax rates. You can use 'filter' parameter to narrow

https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/ip?ip=86.139.70.49&zip=&domain=api.taxrates.io&filter=&product_code=C010

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/ip?ip=86.139.70.49&zip=&domain=api.taxrates.io&filter=&product_code=C010"
import requests
params = {
    "ip": "86.139.70.49",
    "zip": "",
    "domain": "api.taxrates.io",
    "filter": "",
    "product_code": "C010"
}
response = requests.get(
    "https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/ip",
    params=params,
)
print(response.json())
const url = new URL('https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/ip');
url.searchParams.set('ip', '86.139.70.49');
url.searchParams.set('zip', '');
url.searchParams.set('domain', 'api.taxrates.io');
url.searchParams.set('filter', '');
url.searchParams.set('product_code', 'C010');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/ip")
	q := baseURL.Query()
	q.Set("ip", "86.139.70.49")
	q.Set("zip", "")
	q.Set("domain", "api.taxrates.io")
	q.Set("filter", "")
	q.Set("product_code", "C010")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/ip")
uri.query = URI.encode_www_form({
  "ip" => "86.139.70.49",
  "zip" => "",
  "domain" => "api.taxrates.io",
  "filter" => "",
  "product_code" => "C010"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v1/tax/ip?" . http_build_query([
    "ip" => "86.139.70.49",
    "zip" => "",
    "domain" => "api.taxrates.io",
    "filter" => "",
    "product_code" => "C010"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
GET All tax rates

Get request. This method returns all tax rates configured on your account. Based on your country selection the endpoint will return all taxes for all countries. You can use the 'filter' parameter to narrow results to selected type of tax. Use 'zip' parameter when you have selected the United Stat

https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v3/tax/rates?cursor=&domain=<string>&filter=&Product_code=C012

Hover any highlighted part to learn what it does

curl -X GET "https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v3/tax/rates?cursor=&domain=%3Cstring%3E&filter=&Product_code=C012"
import requests
params = {
    "cursor": "",
    "domain": "<string>",
    "filter": "",
    "Product_code": "C012"
}
response = requests.get(
    "https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v3/tax/rates",
    params=params,
)
print(response.json())
const url = new URL('https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v3/tax/rates');
url.searchParams.set('cursor', '');
url.searchParams.set('domain', '<string>');
url.searchParams.set('filter', '');
url.searchParams.set('Product_code', 'C012');

const response = await fetch(url); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v3/tax/rates")
	q := baseURL.Query()
	q.Set("cursor", "")
	q.Set("domain", "<string>")
	q.Set("filter", "")
	q.Set("Product_code", "C012")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v3/tax/rates")
uri.query = URI.encode_www_form({
  "cursor" => "",
  "domain" => "<string>",
  "filter" => "",
  "Product_code" => "C012"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.apis.guru/v2/specs/taxrates.io/1.0.0/v3/tax/rates?" . http_build_query([
    "cursor" => "",
    "domain" => "<string>",
    "filter" => "",
    "Product_code" => "C012"
]);
$opts = ["http" => [
    "method" => "GET",
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));

Postman Setup Guide

Get Postman ↗
  1. See official documentation for authentication and setup.

What can you build with Taxrates.io API?

Taxrates.io API is a Finance API. Developers commonly use finance APIs for:

  • processing payments and handling transactions
  • building subscription and billing systems
  • automating invoicing and financial reporting
  • fraud detection and risk scoring
  • connecting to banking and accounting software

No authentication required. This API is open — no signup or key needed. Ideal for quick prototypes and public-facing features. Taxrates.io API is free to use, making it a low-risk choice to experiment with.

New to APIs? Read our beginner's guide · Learn about API keys · What is REST?

Open documentation ↗