There are many companies providing sales tax API. Out of all the companies, Avalara offers free API service for sales Tax. This gist is all about setting up avalara API and querying it.
The Free-To-Use API by avalara has some restrictions. Usage of this API is subject to rate limits. Users who exceed the rate limit will receive HTTP response code 429 - Too Many Requests. The requirement for this API is to create an avalara free trail account. You can create a free account using this .
Once you have filled the form from above link, you will get an e-mail containing temporary credentials to login the avalara account. The e-mail will look something like this: Imgur
Now, lets look into the salesTaxAPI. The API is called TaxRatesByPostalCode. It needs an Authoriaztion header. For free account, the authorization value is the base64Encoded value of accountId:licenseKey. These can be obtained from the mail.
Here is Axios example of TaxRatesByPostalCode:
var axios = require('axios');
axios({
method:'get',
url:'https://sandbox-rest.avatax.com/api/v2/taxrates/bypostalcode?country=<COUNTRY>&postalCode=<POSTAL-CODE>',
headers: {'Authorization': 'Basic ' + <Base64Encoded(ACCOUNT-ID + ':' + LICENSE-KEY)>}
})
.then(function (response) {
console.log(response.data);
})
.catch(function (error) {
console.log(error.response.data);
});Fill the above required values like COUNTRY, POSTAL-CODE, Base64Encoded(ACCOUNT-ID + ':' + LICENSE-KEY). Assuming the Country as US and postalCode as 98101. The response will look like this:
{
"totalRate": 0.101,
"rates": [
{
"rate": 0.065,
"name": "WA STATE TAX",
"type": "State"
},
{
"rate": 0,
"name": "WA COUNTY TAX",
"type": "County"
},
{
"rate": 0.036,
"name": "WA CITY TAX",
"type": "City"
}
]
}