Tax ID Validation
The Tax ID Pro API makes it easy to validate tax ID numbers for over 100 countries. The API returns JSON-encoded responses, and uses standard HTTP response codes. There are several ways to authenticate your request, read our Authentication guide to learn more.
Request
Validation requests include query parameters for country (two-letter country code), tin (tax id number), and type (tax ID type, optional). Learn more about the query parameters further down the page. Below is a request for an Australian Business Number.
GET https://v3.api.taxid.pro/validate
?country=au
&tin=92873837267
&type=entity
If you need to do more than one validation at a time, check out our Batch Validation endpoint!
Valid Response
The response includes a JSON-encoded body with several properties that provide helpful information about the validation. The is_valid property will be true when the tax id number is valid, and the message property will be null. To learn more about the other properties, read the response guide below.
HTTP/1.1 200 OK
{
"is_valid": true,
"message": null,
"tin_compact": "92873837267",
"tin_standard": "92 873 837 267",
"country_name": "Australia",
"format_name": "Business Number"
}
Invalid Response
There are several reasons a tax ID number may be invalid. It may be too long or too short. It may not pass a checksum test. It may have letters or numbers in the wrong place. Whatever the reason, the response will attempt to provide guidance to address the problems. The is_valid property will be false and the message propery will provide the guidance.
The message will be in English by default. You can specify a locale or set the locale to auto to automatically use the language most appropriate for the country. Read about the optional query parameters further down the page.
HTTP/1.1 200 OK
{
"is_valid": false,
"message": "Input is too short.",
"tin_compact": null,
"tin_standard": null,
"country_name": "Australia",
"format_name": null
}
Error Response
If there is an issue with the request itself, rather than the tax ID number, the response will come with an HTTP status code of 4XX or 5XX and any additional information will be included in the detail property. In the example below, a request was made with no tax ID number.
HTTP/1.1 400 Bad Request
{
"detail": "Please provide a tax ID number."
}
Query Parameters
country string required
A two-letter country code, as defined in the ISO standard. If you need to use IRS country codes, see the is_irs query parameter below.tin string required
The tax ID Number. It may contain numbers, letters (uppercase or lowercase), dots, dashes, or slashes. Separators that are not standard for the tax ID format being tested will trigger an invalid response. For example, a U.S. EIN typically uses a dash after the first two digits. Valid input can include this dash, or no dash, and both versions will be valid. However, if if extra dashes are used, or dashes were put in the wrong place, or dots were used instead of dashes, the response will be invalid because the separators aren't appropriate for the format. Experiment with this on our home page.type string optional
This parameter is optional, but recommended. Specify individual, entity, or vat. Exclude this parameter to test all available types for a given country. Some caveats to keep in mind if you do not specify a type:
- The result will be valid if any format is valid.
- The result will only be invalid if all formats are invalid.
- Guidance provided in the message property may be less specific.
For example, there are three types of tax ID numbers in Germany, one for individuals, one for entities, and one for vat numbers. If your tax ID number is a valid Steuernummer, and you do not specify a type, the validator will test all three formats available, and the response will be valid: true because it was valid for one of the three types tested. We recommend experimenting with this setting to ensure you are getting the behavior you are expecting.
locale string optional default: en
The locale parameter determines the language of the message property in the response. Messages are in English by default. If you specify auto, the most appropriate language for the country will be used. Otherwise, the locale can manually be set using a IETF language tag.- auto (Most appropriate language)
- nl (Dutch)
- en (English, default)
- fr (French)
- de (German)
- it (Italian)
- jp (Japanese)
- ru (Russian)
- es (Spanish)