API Endpoint: Validate
The validate endpoint is the primary API endpoint, capable of processing all available validation types. You can either run all validations or restrict them by specifying the requestedServices parameter.
POST /api/v1/validate
https://www.tincomply.com/api/v1/validate
Runs one or more validation services against a single record in one call. Send whatever fields you have; every service those fields support runs, unless you narrow the list with requestedServices.
Request body
| Field | Type | Description |
|---|---|---|
tin |
string | Taxpayer Identification Number (EIN, SSN or ITIN). 9 digits; hyphens are ignored. |
name |
string | Legal name of the entity or individual, as it should appear in IRS records. |
street |
string | Street address line 1. |
suite |
string | Street address line 2, suite or unit. |
city |
string | City. |
state |
string | Two-letter state abbreviation. |
zip5 |
string | 5-digit ZIP code. |
zip4 |
string | ZIP+4 extension. |
address |
string | Single-line address, as an alternative to the structured fields. |
giin |
string | FATCA Global Intermediary Identification Number (19 characters with dots). |
lei |
string | Legal Entity Identifier (20 characters). |
npi |
string | 10-digit National Provider Identifier. |
dot |
string | USDOT number (not an MC docket number). |
requestedServices |
string[] | Service identifiers to run (see the list below). Omit to run every service enabled on your account that the supplied fields allow. |
Only the result objects for services that ran are included in the response. Each service also has its own endpoint (listed in the navigation) that runs exactly that one service.
What to do with this result
| When you see | Do this |
|---|---|
| A result object is missing | That service did not run: the fields it needs were not sent, or it is not in requestedServices. Each result object reads the same as on its own endpoint page. |
| Any result has completed false | Keep the request id and call request-details later. Results that already finished are final; only the pending ones fill in. |
Sample request
curl -X POST https://www.tincomply.com/api/v1/validate \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tin":"13-0871985","name":"INTERNATIONAL BUSINESS MACHINES CORPORATION","street":"PO BOX 218","city":"YORKTOWN HEIGHTS","state":"NY","zip5":"10598","requestedServices":["irs-tin-name-matching","address-validation","list-sanctions"]}'import requests
response = requests.post(
"https://www.tincomply.com/api/v1/validate",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"tin": "13-0871985",
"name": "INTERNATIONAL BUSINESS MACHINES CORPORATION",
"street": "PO BOX 218",
"city": "YORKTOWN HEIGHTS",
"state": "NY",
"zip5": "10598",
"requestedServices": ["irs-tin-name-matching", "address-validation", "list-sanctions"],
},
)
response.raise_for_status()
for key, value in response.json().items():
if key.endswith("Result"):
print(key, value)using System.Text;
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", "YOUR_API_KEY");
var body = """
{
"tin": "13-0871985",
"name": "INTERNATIONAL BUSINESS MACHINES CORPORATION",
"street": "PO BOX 218",
"city": "YORKTOWN HEIGHTS",
"state": "NY",
"zip5": "10598",
"requestedServices": [
"irs-tin-name-matching",
"address-validation",
"list-sanctions"
]
}
""";
var response = await client.PostAsync(
"https://www.tincomply.com/api/v1/validate",
new StringContent(body, Encoding.UTF8, "application/json"));
Console.WriteLine(await response.Content.ReadAsStringAsync());const response = await fetch("https://www.tincomply.com/api/v1/validate", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
tin: "13-0871985",
name: "INTERNATIONAL BUSINESS MACHINES CORPORATION",
street: "PO BOX 218",
city: "YORKTOWN HEIGHTS",
state: "NY",
zip5: "10598",
requestedServices: ["irs-tin-name-matching", "address-validation", "list-sanctions"],
}),
});
const data = await response.json();
for (const [key, value] of Object.entries(data)) {
if (key.endsWith("Result")) console.log(key, value);
}import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
String body = """
{
"tin": "13-0871985",
"name": "INTERNATIONAL BUSINESS MACHINES CORPORATION",
"street": "PO BOX 218",
"city": "YORKTOWN HEIGHTS",
"state": "NY",
"zip5": "10598",
"requestedServices": [
"irs-tin-name-matching",
"address-validation",
"list-sanctions"
]
}
""";
HttpRequest request = HttpRequest.newBuilder(URI.create("https://www.tincomply.com/api/v1/validate"))
.header("X-API-Key", "YOUR_API_KEY")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build();
HttpResponse<String> response = HttpClient.newHttpClient()
.send(request, HttpResponse.BodyHandlers.ofString());
// Parse with your JSON library (Jackson, Gson) and read each *Result object.
System.out.println(response.body());
}
}package main
import (
"bytes"
"encoding/json"
"fmt"
"log"
"net/http"
"strings"
)
func main() {
body := []byte(`{
"tin": "13-0871985",
"name": "INTERNATIONAL BUSINESS MACHINES CORPORATION",
"street": "PO BOX 218",
"city": "YORKTOWN HEIGHTS",
"state": "NY",
"zip5": "10598",
"requestedServices": [
"irs-tin-name-matching",
"address-validation",
"list-sanctions"
]
}`)
req, err := http.NewRequest("POST", "https://www.tincomply.com/api/v1/validate", bytes.NewReader(body))
if err != nil {
log.Fatal(err)
}
req.Header.Set("X-API-Key", "YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
var data map[string]any
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
log.Fatal(err)
}
for key, value := range data {
if strings.HasSuffix(key, "Result") {
fmt.Println(key, value)
}
}
}$body = @'
{
"tin": "13-0871985",
"name": "INTERNATIONAL BUSINESS MACHINES CORPORATION",
"street": "PO BOX 218",
"city": "YORKTOWN HEIGHTS",
"state": "NY",
"zip5": "10598",
"requestedServices": [
"irs-tin-name-matching",
"address-validation",
"list-sanctions"
]
}
'@
$response = Invoke-RestMethod -Method Post `
-Uri "https://www.tincomply.com/api/v1/validate" `
-Headers @{ "X-API-Key" = "YOUR_API_KEY" } `
-ContentType "application/json" `
-Body $body
$response.PSObject.Properties |
Where-Object Name -like "*Result" |
ForEach-Object { $_.Name; $_.Value | Format-List }Sample response
{
"id": "ZfPjtFHAXEep29ZZTc5rpgj1",
"request": {
"tin": "XXXXX1985",
"name": "INTERNATIONAL BUSINESS MACHINES CORPORATION",
"street": "PO BOX 218",
"city": "YORKTOWN HEIGHTS",
"state": "NY",
"zip5": "10598",
"requestDate": "2026-10-01T14:02:11Z",
"requestedServices": "irs-tin-name-matching,address-validation,list-sanctions"
},
"irsTinNameMatchingResult": {
"message": "TIN and Name combination matches IRS EIN records",
"result": 7,
"completed": true
},
"addressValidationResult": {
"street": "218 PO BOX",
"city": "YORKTOWN HEIGHTS",
"state": "NY",
"zip5": "10598",
"zip4": "0218",
"countyName": "WESTCHESTER",
"message": "Address was confirmed as valid",
"found": true,
"completed": true,
"corrections": [ "PO BOX match.", "ZIP+4 corrected." ]
},
"listSanctionsMatchResult": {
"completed": true,
"anyFiltered": false,
"results": [
{
"name": "INTERNATIONAL BUSINESS MACHINES",
"type": "Organization",
"confidence": 75,
"list": "Business Identifier Code (BIC) Reference Data"
}
]
}
}Errors
Requests that cannot be processed return HTTP 400 with an object keyed by field name, each listing what was wrong. Authentication, permission and other status codes are covered in Errors & service status.
This endpoint requires an API key with the Validate permission.
See how this check works in the portal and what it costs: All validations