curl --request GET \
--url "https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1" \
--header "x-api-key: YOUR_API_KEY"
const params = new URLSearchParams({
transaction_id: "txn_123",
transaction_time: "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
ip_address: "192.0.0.1",
});
const response = await fetch(
`https://api.trestleiq.com/1.0/decision_signals?${params}`,
{
headers: {
"x-api-key": "YOUR_API_KEY",
},
}
);
const data = await response.json();
import axios from "axios";
const { data } = await axios.get(
"https://api.trestleiq.com/1.0/decision_signals",
{
params: {
transaction_id: "txn_123",
transaction_time: "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
ip_address: "192.0.0.1",
},
headers: {
"x-api-key": "YOUR_API_KEY",
},
}
);
console.log(data);
import requests
headers = {"x-api-key": "YOUR_API_KEY"}
params = {
"transaction_id": "txn_123",
"transaction_time": "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
"ip_address": "192.0.0.1",
}
response = requests.get(
"https://api.trestleiq.com/1.0/decision_signals",
params=params,
headers=headers,
timeout=30,
)
data = response.json()
print(data)
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");
var response = await client.GetAsync("https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
<?php
$curl = curl_init("https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1");
curl_setopt($curl, CURLOPT_HTTPHEADER, ["x-api-key: YOUR_API_KEY"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class DecisionSignalsExample {
public static void main(String[] args) throws Exception {
HttpRequest request =
HttpRequest.newBuilder()
.uri(
URI.create(
"https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1"))
.header("x-api-key", "YOUR_API_KEY")
.GET()
.build();
HttpResponse<String> response =
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
{
"identity_score": 78,
"upcoming_identity_score": null,
"primary_phone_checks": {
"is_valid": true,
"country_code": "US",
"is_commercial": false,
"line_type": "Mobile",
"carrier": "Trestle Telco",
"is_prepaid": false,
"name_match": true,
"address_match": "No Match"
},
"secondary_phone_checks": {
"is_valid": true,
"country_code": "US",
"is_commercial": false,
"line_type": "Mobile",
"carrier": "Trestle Telco",
"is_prepaid": false,
"name_match": true,
"address_match": "Match"
},
"primary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": true
},
"secondary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": true,
"distance_from_primary_address": 2181
},
"primary_email_address_checks": {
"is_valid": true,
"is_disposable": false,
"email_age_score": 100,
"email_domain_creation_days": 11460,
"name_match": true
},
"secondary_email_address_checks": {
"is_valid": true,
"is_disposable": false,
"email_age_score": 40,
"email_domain_creation_days": 11257,
"name_match": true
},
"ip_address_checks": {
"is_valid": true,
"trust_score": 90,
"connection_type": "Residential",
"geolocation": {
"postal_code": "00000",
"city_name": "Testville",
"subdivision": "XX",
"country_code": "DE"
},
"distance_from_primary_address": 4906,
"distance_from_secondary_address": 4969,
"distance_from_primary_phone": 4906,
"distance_from_secondary_phone": 5491
},
"warnings": [],
"errors": []
}
curl --request GET \
--url "https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1" \
--header "x-api-key: YOUR_API_KEY"
const params = new URLSearchParams({
transaction_id: "txn_123",
transaction_time: "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
ip_address: "192.0.0.1",
});
const response = await fetch(
`https://api.trestleiq.com/1.0/decision_signals?${params}`,
{
headers: {
"x-api-key": "YOUR_API_KEY",
},
}
);
const data = await response.json();
import axios from "axios";
const { data } = await axios.get(
"https://api.trestleiq.com/1.0/decision_signals",
{
params: {
transaction_id: "txn_123",
transaction_time: "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
ip_address: "192.0.0.1",
},
headers: {
"x-api-key": "YOUR_API_KEY",
},
}
);
console.log(data);
import requests
headers = {"x-api-key": "YOUR_API_KEY"}
params = {
"transaction_id": "txn_123",
"transaction_time": "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
"ip_address": "192.0.0.1",
}
response = requests.get(
"https://api.trestleiq.com/1.0/decision_signals",
params=params,
headers=headers,
timeout=30,
)
data = response.json()
print(data)
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");
var response = await client.GetAsync("https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
<?php
$curl = curl_init("https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1");
curl_setopt($curl, CURLOPT_HTTPHEADER, ["x-api-key: YOUR_API_KEY"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class DecisionSignalsExample {
public static void main(String[] args) throws Exception {
HttpRequest request =
HttpRequest.newBuilder()
.uri(
URI.create(
"https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1"))
.header("x-api-key", "YOUR_API_KEY")
.GET()
.build();
HttpResponse<String> response =
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
{
"identity_score": 78,
"upcoming_identity_score": null,
"primary_phone_checks": {
"is_valid": true,
"country_code": "US",
"is_commercial": false,
"line_type": "Mobile",
"carrier": "Trestle Telco",
"is_prepaid": false,
"name_match": true,
"address_match": "No Match"
},
"secondary_phone_checks": {
"is_valid": true,
"country_code": "US",
"is_commercial": false,
"line_type": "Mobile",
"carrier": "Trestle Telco",
"is_prepaid": false,
"name_match": true,
"address_match": "Match"
},
"primary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": true
},
"secondary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": true,
"distance_from_primary_address": 2181
},
"primary_email_address_checks": {
"is_valid": true,
"is_disposable": false,
"email_age_score": 100,
"email_domain_creation_days": 11460,
"name_match": true
},
"secondary_email_address_checks": {
"is_valid": true,
"is_disposable": false,
"email_age_score": 40,
"email_domain_creation_days": 11257,
"name_match": true
},
"ip_address_checks": {
"is_valid": true,
"trust_score": 90,
"connection_type": "Residential",
"geolocation": {
"postal_code": "00000",
"city_name": "Testville",
"subdivision": "XX",
"country_code": "DE"
},
"distance_from_primary_address": 4906,
"distance_from_secondary_address": 4969,
"distance_from_primary_phone": 4906,
"distance_from_secondary_phone": 5491
},
"warnings": [],
"errors": []
}
Decision Signals API
Decision Signals API
Decision Signals API returns 70+ data signals and network insights in a single query, providing match statuses, validity flags, enriched metadata, and distance calculations across name, email, phone, address, and IP.
curl --request GET \
--url "https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1" \
--header "x-api-key: YOUR_API_KEY"
const params = new URLSearchParams({
transaction_id: "txn_123",
transaction_time: "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
ip_address: "192.0.0.1",
});
const response = await fetch(
`https://api.trestleiq.com/1.0/decision_signals?${params}`,
{
headers: {
"x-api-key": "YOUR_API_KEY",
},
}
);
const data = await response.json();
import axios from "axios";
const { data } = await axios.get(
"https://api.trestleiq.com/1.0/decision_signals",
{
params: {
transaction_id: "txn_123",
transaction_time: "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
ip_address: "192.0.0.1",
},
headers: {
"x-api-key": "YOUR_API_KEY",
},
}
);
console.log(data);
import requests
headers = {"x-api-key": "YOUR_API_KEY"}
params = {
"transaction_id": "txn_123",
"transaction_time": "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
"ip_address": "192.0.0.1",
}
response = requests.get(
"https://api.trestleiq.com/1.0/decision_signals",
params=params,
headers=headers,
timeout=30,
)
data = response.json()
print(data)
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");
var response = await client.GetAsync("https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
<?php
$curl = curl_init("https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1");
curl_setopt($curl, CURLOPT_HTTPHEADER, ["x-api-key: YOUR_API_KEY"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class DecisionSignalsExample {
public static void main(String[] args) throws Exception {
HttpRequest request =
HttpRequest.newBuilder()
.uri(
URI.create(
"https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1"))
.header("x-api-key", "YOUR_API_KEY")
.GET()
.build();
HttpResponse<String> response =
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
{
"identity_score": 78,
"upcoming_identity_score": null,
"primary_phone_checks": {
"is_valid": true,
"country_code": "US",
"is_commercial": false,
"line_type": "Mobile",
"carrier": "Trestle Telco",
"is_prepaid": false,
"name_match": true,
"address_match": "No Match"
},
"secondary_phone_checks": {
"is_valid": true,
"country_code": "US",
"is_commercial": false,
"line_type": "Mobile",
"carrier": "Trestle Telco",
"is_prepaid": false,
"name_match": true,
"address_match": "Match"
},
"primary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": true
},
"secondary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": true,
"distance_from_primary_address": 2181
},
"primary_email_address_checks": {
"is_valid": true,
"is_disposable": false,
"email_age_score": 100,
"email_domain_creation_days": 11460,
"name_match": true
},
"secondary_email_address_checks": {
"is_valid": true,
"is_disposable": false,
"email_age_score": 40,
"email_domain_creation_days": 11257,
"name_match": true
},
"ip_address_checks": {
"is_valid": true,
"trust_score": 90,
"connection_type": "Residential",
"geolocation": {
"postal_code": "00000",
"city_name": "Testville",
"subdivision": "XX",
"country_code": "DE"
},
"distance_from_primary_address": 4906,
"distance_from_secondary_address": 4969,
"distance_from_primary_phone": 4906,
"distance_from_secondary_phone": 5491
},
"warnings": [],
"errors": []
}
curl --request GET \
--url "https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1" \
--header "x-api-key: YOUR_API_KEY"
const params = new URLSearchParams({
transaction_id: "txn_123",
transaction_time: "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
ip_address: "192.0.0.1",
});
const response = await fetch(
`https://api.trestleiq.com/1.0/decision_signals?${params}`,
{
headers: {
"x-api-key": "YOUR_API_KEY",
},
}
);
const data = await response.json();
import axios from "axios";
const { data } = await axios.get(
"https://api.trestleiq.com/1.0/decision_signals",
{
params: {
transaction_id: "txn_123",
transaction_time: "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
ip_address: "192.0.0.1",
},
headers: {
"x-api-key": "YOUR_API_KEY",
},
}
);
console.log(data);
import requests
headers = {"x-api-key": "YOUR_API_KEY"}
params = {
"transaction_id": "txn_123",
"transaction_time": "2026-06-15T10:00",
"primary.name": "John Doe",
"primary.phone": "4259853735",
"primary.address.street_line_1": "10 Main St",
"primary.address.city": "Lynden",
"primary.address.state_code": "WA",
"primary.address.postal_code": "98225",
"primary.email_address": "john.doe@example.com",
"secondary.name": "Waidong L Syrws",
"secondary.phone": "2069735100",
"secondary.address.street_line_1": "100 Syrws St",
"secondary.address.city": "Lynden",
"secondary.address.state_code": "WA",
"secondary.address.postal_code": "98264",
"secondary.email_address": "waidong220@example.com",
"ip_address": "192.0.0.1",
}
response = requests.get(
"https://api.trestleiq.com/1.0/decision_signals",
params=params,
headers=headers,
timeout=30,
)
data = response.json()
print(data)
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");
var response = await client.GetAsync("https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1");
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1", nil)
req.Header.Set("x-api-key", "YOUR_API_KEY")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
<?php
$curl = curl_init("https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1");
curl_setopt($curl, CURLOPT_HTTPHEADER, ["x-api-key: YOUR_API_KEY"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class DecisionSignalsExample {
public static void main(String[] args) throws Exception {
HttpRequest request =
HttpRequest.newBuilder()
.uri(
URI.create(
"https://api.trestleiq.com/1.0/decision_signals?transaction_id=txn_123&transaction_time=2026-06-15T10:00&primary.name=John%20Doe&primary.phone=4259853735&primary.address.street_line_1=10%20Main%20St&primary.address.city=Lynden&primary.address.state_code=WA&primary.address.postal_code=98225&primary.email_address=john.doe@example.com&secondary.name=Waidong%20L%20Syrws&secondary.phone=2069735100&secondary.address.street_line_1=100%20Syrws%20St&secondary.address.city=Lynden&secondary.address.state_code=WA&secondary.address.postal_code=98264&secondary.email_address=waidong220@example.com&ip_address=192.0.0.1"))
.header("x-api-key", "YOUR_API_KEY")
.GET()
.build();
HttpResponse<String> response =
HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
{
"identity_score": 78,
"upcoming_identity_score": null,
"primary_phone_checks": {
"is_valid": true,
"country_code": "US",
"is_commercial": false,
"line_type": "Mobile",
"carrier": "Trestle Telco",
"is_prepaid": false,
"name_match": true,
"address_match": "No Match"
},
"secondary_phone_checks": {
"is_valid": true,
"country_code": "US",
"is_commercial": false,
"line_type": "Mobile",
"carrier": "Trestle Telco",
"is_prepaid": false,
"name_match": true,
"address_match": "Match"
},
"primary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": true
},
"secondary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": true,
"distance_from_primary_address": 2181
},
"primary_email_address_checks": {
"is_valid": true,
"is_disposable": false,
"email_age_score": 100,
"email_domain_creation_days": 11460,
"name_match": true
},
"secondary_email_address_checks": {
"is_valid": true,
"is_disposable": false,
"email_age_score": 40,
"email_domain_creation_days": 11257,
"name_match": true
},
"ip_address_checks": {
"is_valid": true,
"trust_score": 90,
"connection_type": "Residential",
"geolocation": {
"postal_code": "00000",
"city_name": "Testville",
"subdivision": "XX",
"country_code": "DE"
},
"distance_from_primary_address": 4906,
"distance_from_secondary_address": 4969,
"distance_from_primary_phone": 4906,
"distance_from_secondary_phone": 5491
},
"warnings": [],
"errors": []
}
Decision Signals 1.0
In a single query, the Decision Signals API returns 70+ data signals and network insights to provide match statuses, validity flags, enriched metadata, and distance calculations between the key identity data inputs of name, email, phone, address, and IP. The Decision Signals API supports one API request with up to two sets of inputs (primary and secondary) for name, phone, address, and email, but only one IP address. You should submit specific parameters based on the amount of data you want to cross-check and validate, and we will populate the API return with components that correspond to the inputs provided.GET https://api.trestleiq.com/1.0/decision_signals?transaction_id=[insert_transaction_id]&transaction_time=[insert_transaction_time]&primary.name=[insert_name]&primary.phone=[insert_phone]&primary.email_address=[insert_email]&primary.address.street_line_1=[insert_street_line_1]&primary.address.city=[insert_city]&primary.address.state_code=[insert_state_code]&primary.address.postal_code=[insert_postal_code]&ip_address=[insert_ip_address]
Note: Authentication is provided via the
x-api-key header.Primary and secondary use cases
| Industry | Primary | Secondary |
|---|---|---|
| Originations / Account Signup | Home Details | Work Details |
| Underwriting | Applicant 1 Details | Applicant 2 Details |
| eCommerce / Card Not Present | Billing Details | Shipping Details |
| Small Business / Merchant Verification | Business Details | Principal Home Details |
Query Parameters
Transaction context
string
required
Caller-supplied correlation ID for the transaction. Example:
transaction_id=txn_123string
required
UTC timestamp for the transaction, in
YYYY-MM-DD HH:MM or ISO 8601 format.
Example: transaction_time=2026-06-15T10:00Identity inputs
string
required
Full legal name of the primary person. Either
primary.name or
primary.business_name is required. Example: primary.name=Robin Cookestring
Full legal name of the primary business. Either
primary.name or
primary.business_name is required. Example:
primary.business_name=The Golden Companystring
Full legal name of the secondary person. Example:
secondary.name=Vicky Kunalstring
Full legal name of the secondary business. Example:
secondary.business_name=The Silver CompanyPhone inputs
string
Primary phone number. Accepted formats:
+12065551234, 12065551234,
2065551234, (206) 555-1234, 206-555-1234. E.164 format is recommended.
Example: primary.phone=13606769260string (ISO-3166-2)
The ISO-3166 alpha-2 country code associated with the primary phone. Defaults
to
US if not provided. Example: primary.phone.country_hint=USstring
Secondary phone number. Same accepted formats as the primary phone.
Example:
secondary.phone=14259851212string (ISO-3166-2)
The ISO-3166 alpha-2 country code associated with the secondary phone.
Example:
secondary.phone.country_hint=USAddress inputs
string
The first line of the primary street address. Example:
primary.address.street_line_1=12843 NE 91st Ststring
The second line of the primary street address. Example:
primary.address.street_line_2=Apt 4Bstring
The city name of the primary address. Example:
primary.address.city=Bellinghamstring
The two-letter state or province code of the primary address. Example:
primary.address.state_code=WAstring
The postal or ZIP code of the primary address. Example:
primary.address.postal_code=98033string (ISO-3166-2)
The ISO-3166 alpha-2 country code of the primary address. Example:
primary.address.country_code=USstring
The first line of the secondary street address. Example:
secondary.address.street_line_1=4492 163rd Pl SEstring
The second line of the secondary street address. Example:
secondary.address.street_line_2=Suite 200string
The city name of the secondary address. Example:
secondary.address.city=Bellevuestring
The two-letter state or province code of the secondary address. Example:
secondary.address.state_code=WAstring
The postal or ZIP code of the secondary address. Example:
secondary.address.postal_code=98006string (ISO-3166-2)
The ISO-3166 alpha-2 country code of the secondary address. Example:
secondary.address.country_code=USEmail inputs
string
The primary email address. Example:
primary.email_address=john.doe@gmail.comstring
The secondary email address. Example:
secondary.email_address=jane.doe@gmail.comIP input
string
The IPv4 or IPv6 address associated with the transaction. Example:
ip_address=73.25.97.8Headers
string
required
Your API key for authentication. Example:
{{ apiKey }}Response
The response contains a block for each input type provided. Blocks arenull when the corresponding input was not submitted. Per-check warnings and errors are consolidated into a single warnings / errors list at the root, with each entry prefixed by the component it came from (for example, "Primary Email: Disposable Email").
integer
A composite trust score from 0 to 100, where 100 is the safest and 0 is the
riskiest. This field is never null. See Identity
score for how the score is derived and how to interpret it.
null
Reserved for a forthcoming ML-based identity score model. Always returns
null today.object or null
Phone check results for the primary phone. Null when no primary phone was
submitted.
Hide phone checks object
Hide phone checks object
boolean or null
True if the phone number is valid and associated with a carrier. Null when
the phone could not be validated.
string or null
The ISO-3166 alpha-2 country code of the phone number, for example
US or
GB.boolean or null
True if the phone number is registered to a business.
string or null
The line type of the phone number. Possible values:
Mobile- Wireless phone lineLandline- Traditional wired phone lineFixedVOIP- VOIP number connected to a physical addressNonFixedVOIP- VOIP number unconnected to a fixed physical addressPremium- Caller pays a premium for the callTollFree- Callee pays for callVoicemail- Voicemail-only serviceOther- Line type is unclear
string or null
The carrier name at the MVNO level.
boolean or null
True if the phone is associated with a prepaid account.
boolean or null
True if the subscriber name matches the input name, false if it does not,
and null if no name data was found.
string or null
The match status between the phone’s registered location and the input
address. Possible values:
MatchStreet MatchPostal MatchCity State MatchMetro MatchNo Match
object or null
Phone check results for the secondary phone. Null when no secondary phone was
submitted.
Hide phone checks object
Hide phone checks object
boolean or null
True if the phone number is valid and associated with a carrier. Null when
the phone could not be validated.
string or null
The ISO-3166 alpha-2 country code of the phone number, for example
US or
GB.boolean or null
True if the phone number is registered to a business.
string or null
The line type of the phone number. Possible values:
Mobile- Wireless phone lineLandline- Traditional wired phone lineFixedVOIP- VOIP number connected to a physical addressNonFixedVOIP- VOIP number unconnected to a fixed physical addressPremium- Caller pays a premium for the callTollFree- Callee pays for callVoicemail- Voicemail-only serviceOther- Line type is unclear
string or null
The carrier name at the MVNO level.
boolean or null
True if the phone is associated with a prepaid account.
boolean or null
True if the subscriber name matches the input name, false if it does not,
and null if no name data was found.
string or null
The match status between the phone’s registered location and the input
address. Possible values:
MatchStreet MatchPostal MatchCity State MatchMetro MatchNo Match
object or null
Address check results for the primary address. Null when no primary address
was submitted.
Hide address checks object
Hide address checks object
boolean or null
True if the address was validated to at least the street level. False if
it was validated but is not deliverable. Null when the address service
could not resolve it, or for a partial address.
boolean or null
True if the address is a business address.
boolean or null
True if the address is a known freight-forwarding or reshipping location.
Null when
is_valid is not true, as this field is only meaningful for a
validated address.string or null
The address type. Null when
is_valid is not true, as this field is only
meaningful for a validated address. Possible values:Single UnitMulti UnitPO BoxFirmGeneral DeliveryRural Route
boolean or null
True if the resident name matches the input name, false if it does not,
and null if no name data was found or the address is partial.
object or null
Address check results for the secondary address. Null when no secondary
address was submitted.
Hide address checks object
Hide address checks object
boolean or null
True if the address was validated to at least the street level. False if
it was validated but is not deliverable. Null when the address service
could not resolve it, or for a partial address.
boolean or null
True if the address is a business address.
boolean or null
True if the address is a known freight-forwarding or reshipping location.
Null when
is_valid is not true, as this field is only meaningful for a
validated address.string or null
The address type. Null when
is_valid is not true, as this field is only
meaningful for a validated address. Possible values:Single UnitMulti UnitPO BoxFirmGeneral DeliveryRural Route
boolean or null
True if the resident name matches the input name, false if it does not,
and null if no name data was found or the address is partial.
integer or null
The distance in miles between the primary and secondary address. Returned
for the secondary address only, and present only when non-null.
boolean or null
True if the secondary address is associated with the primary resident.
Returned for the secondary address only, and present only when non-null.
This field is reserved and currently always returns null.
is_valid, name_match, type, and is_forwarder all set to null. A partial address contributes no weight to identity_score. The block is only null when no address input was submitted at all.
object or null
Email check results for the primary email. Null when no primary email was
submitted.
Hide email checks object
Hide email checks object
boolean or null
True if the email address is syntactically valid.
boolean or null
True if the email domain is a known disposable or temporary provider.
integer or null
A 0 to 100 score indicating how established the email is, where 100 is the
oldest and most trusted.
integer or null
The number of days since the email domain was first registered. Sourced
from domain-registration (whois) data. Null when the domain is not found or
the lookup times out.
boolean or null
True if the registered email owner matches the input name, false if it does
not, and null if no name data was found.
object or null
Email check results for the secondary email. Null when no secondary email was
submitted.
Hide email checks object
Hide email checks object
boolean or null
True if the email address is syntactically valid.
boolean or null
True if the email domain is a known disposable or temporary provider.
integer or null
A 0 to 100 score indicating how established the email is, where 100 is the
oldest and most trusted.
integer or null
The number of days since the email domain was first registered. Sourced
from domain-registration (whois) data. Null when the domain is not found or
the lookup times out.
boolean or null
True if the registered email owner matches the input name, false if it does
not, and null if no name data was found.
object or null
IP check results. Null when no IP address was submitted.
Hide ip_address_checks object
Hide ip_address_checks object
boolean or null
True if the IP address is a valid, publicly routable address. Private and
loopback addresses return false.
integer or null
An IP trust score from 0 to 100, where 100 is the most trusted and 0 is the
most suspicious.
string or null
The connection type of the IP address. Examples include
Residential,
Mobile, Hosting, VPN, Business VPN, Government VPN,
Education VPN, Hosting VPN, Proxy, Tor, Anycast,
Privacy Relay, and Satellite.object or null
The geographic location of the IP address. Null sub-fields are omitted.
Hide geolocation object
Hide geolocation object
string or null
The postal code of the IP location.
string or null
The city name of the IP location.
string or null
The state, province, or region of the IP location.
string or null
The country name of the IP location.
string or null
The ISO-3166 alpha-2 country code of the IP location.
string or null
The continent code of the IP location.
integer or null
The distance in miles between the IP geolocation and the primary address.
integer or null
The distance in miles between the IP geolocation and the secondary address.
integer or null
The distance in miles between the IP geolocation and the address of the
person associated with the primary phone.
integer or null
The distance in miles between the IP geolocation and the address of the
person associated with the secondary phone.
string[]
All warnings from every sub-check, plus root-level warnings, aggregated here
and prefixed by component. See Warnings reference.
string[]
All errors from every sub-check, aggregated here.
Identity score
identity_score is a composite score from 0 to 100, derived from the phone, email, address, and IP signals. 100 is the safest and 0 is the riskiest. The score is additive: each valid, matching signal contributes positively and each mismatch or invalid signal contributes negatively from a neutral midpoint of 50.
| Score | Interpretation |
|---|---|
| 80–100 | High trust. Strong positive signals across inputs. |
| 60–79 | Moderate trust. Most signals align. |
| 50–59 | Neutral baseline. No strong positive or negative signals. |
| 30–49 | Below baseline. One or more negative signals present. |
| 0–29 | Low trust. Multiple significant risk signals detected. |
identity_score requires a name input (primary.name or primary.business_name) plus at least one of primary or secondary phone, address, email, or IP address. Providing only a name returns 50, the neutral baseline. For best results, provide as many inputs as possible to maximize signal coverage. A partial address (no street line) contributes no weight to the score.
Sandbox
The Decision Signals API supports sandbox mode for integration testing without consuming live enrichment. Addis_sandbox=true to the request. Pre-stored responses are returned across all input fields (phone, name, email, address, and IP), and no live API calls are made. Use the inputs below to receive each canned scenario.
Note: The canned response is keyed by the test scenario, so a sandbox response may include blocks (for example, address or IP) even if those inputs were not part of the request.
Sandbox 1 — high trust score
curl --request GET \
--url "https://api.trestleiq.com/1.0/decision_signals?transaction_id=kushal-pos-1&transaction_time=2026-06-23%2010:00&primary.name=Jon%20Snow&primary.phone=%2B13005550201&primary.address.street_line_1=103%20Main%20Doors&primary.address.city=Kings%20Landing&primary.address.state_code=WA&primary.address.postal_code=98101&primary.email_address=jsnow@got.com&ip_address=192.0.2.1&secondary.name=Arya%20Stark&secondary.phone=%2B13005550202&secondary.address.street_line_1=980%20Kingsroad%20Way&secondary.address.city=Winterfell&secondary.address.state_code=WA&secondary.address.postal_code=99988&secondary.email_address=astark@got.com&is_sandbox=true" \
--header "x-api-key: YOUR_API_KEY"
{
"identity_score": 88,
"upcoming_identity_score": null,
"primary_phone_checks": {
"is_valid": true,
"country_code": "US",
"is_commercial": false,
"line_type": "Mobile",
"carrier": "Verizon Wireless",
"is_prepaid": false,
"name_match": true,
"address_match": "Match"
},
"secondary_phone_checks": {
"is_valid": true,
"country_code": "US",
"is_commercial": false,
"line_type": "Mobile",
"carrier": "AT&T",
"is_prepaid": false,
"name_match": true,
"address_match": "Match"
},
"primary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": true
},
"secondary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": true,
"distance_from_primary_address": 1450,
"linked_to_primary_resident": false
},
"primary_email_address_checks": {
"is_valid": true,
"is_disposable": false,
"email_age_score": 90,
"email_domain_creation_days": 5000,
"name_match": true
},
"secondary_email_address_checks": {
"is_valid": true,
"is_disposable": false,
"email_age_score": 85,
"email_domain_creation_days": 5000,
"name_match": true
},
"ip_address_checks": {
"is_valid": true,
"trust_score": 92,
"connection_type": null,
"geolocation": {
"postal_code": "98101",
"city_name": "Kings Landing",
"subdivision": "WA",
"country_code": "US"
},
"distance_from_primary_address": 0,
"distance_from_secondary_address": null,
"distance_from_primary_phone": null,
"distance_from_secondary_phone": null
},
"warnings": [],
"errors": []
}
Sandbox 2 — low trust score
curl --request GET \
--url "https://api.trestleiq.com/1.0/decision_signals?transaction_id=kushal-neg-1&transaction_time=2026-06-23%2010:00&primary.name=Night%20King&primary.phone=%2B13005550204&primary.address.street_line_1=103%20Main%20Doors&primary.address.city=Kings%20Landing&primary.address.state_code=WA&primary.address.postal_code=98101&primary.email_address=shady@mailnator.com&ip_address=192.0.2.2&secondary.name=White%20Walker&secondary.phone=%2B13005550205&secondary.address.street_line_1=100%20Casterly%20Rock%20Ave&secondary.address.city=Lannisport&secondary.address.state_code=CA&secondary.address.postal_code=98402&secondary.email_address=spam@mailnator.com&is_sandbox=true" \
--header "x-api-key: YOUR_API_KEY"
{
"identity_score": 8,
"upcoming_identity_score": null,
"primary_phone_checks": {
"is_valid": false,
"country_code": "US",
"is_commercial": false,
"line_type": "NonFixedVOIP",
"carrier": "Bandwidth.com",
"is_prepaid": true,
"name_match": false,
"address_match": "No Match"
},
"secondary_phone_checks": {
"is_valid": false,
"country_code": "US",
"is_commercial": false,
"line_type": "NonFixedVOIP",
"carrier": "Bandwidth.com",
"is_prepaid": true,
"name_match": false,
"address_match": "No Match"
},
"primary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": false
},
"secondary_address_checks": {
"is_valid": true,
"is_commercial": false,
"is_forwarder": false,
"type": "Single Unit",
"name_match": false,
"distance_from_primary_address": 780,
"linked_to_primary_resident": false
},
"primary_email_address_checks": {
"is_valid": true,
"is_disposable": true,
"email_age_score": 5,
"email_domain_creation_days": 30,
"name_match": false
},
"secondary_email_address_checks": {
"is_valid": true,
"is_disposable": true,
"email_age_score": 5,
"email_domain_creation_days": 30,
"name_match": false
},
"ip_address_checks": {
"is_valid": true,
"trust_score": 10,
"connection_type": null,
"geolocation": {
"city_name": "Unknown",
"country_code": "US"
},
"distance_from_primary_address": 9999,
"distance_from_secondary_address": null,
"distance_from_primary_phone": null,
"distance_from_secondary_phone": null
},
"warnings": [
"Primary Phone: Invalid Phone",
"Primary Email: Disposable Email"
],
"errors": []
}
Warnings reference
Every warning is aggregated into the rootwarnings list and prefixed by the component it came from, for example "Primary Email: Disposable Email" or "IP: Proxy detected".
Root
| Warning | Description |
|---|---|
| Missing required input: primary.name (or primary.business_name) is required. | Neither primary.name nor primary.business_name was provided. |
| Missing required input: transaction_id is required. | transaction_id was not provided. |
| Missing required input: transaction_time is required. | transaction_time was not provided. |
| Invalid Input | One or more submitted inputs failed basic format validation. |
| Missing Input | A required input field was missing from the request. |
Phone (primary / secondary)
| Warning | Description |
|---|---|
| Invalid Phone | The submitted phone number is syntactically invalid or not associated with a carrier. |
Address (primary / secondary)
| Warning | Description |
|---|---|
| Invalid Address | The submitted address could not be validated. |
| Partial Address | Only partial address inputs were provided (postal code, or city and state without a street). |
| Missing unit/apt/suite number | The address is a multi-unit building but no unit number was provided. |
| Invalid unit/apt/suite number | A unit number was provided but could not be validated. |
| Invalid house/building number | The house or building number is invalid. |
| Freight Forwarder | The address is a known freight-forwarding or reshipping location. |
| Partial Error-Could not retrieve entire response | A downstream lookup partially failed, so some address fields may be missing. |
Email (primary / secondary)
| Warning | Description |
|---|---|
| Invalid Email | The submitted email address is syntactically invalid. |
| Disposable Email | The email domain is a known disposable or temporary email provider. |
| Role Based Email | The email appears to be a role-based address, for example info@ or admin@. |
| Potential Junk Email | The email has characteristics associated with low-quality or junk email. |
| Tumbled Email | The email address appears to be a tumbled variant of a known address. |
| Privacy Email | The email is a privacy-relay or alias address, for example Apple Private Relay. |
| Email is a spam trap | The email is a known spam trap address. |
| Email is a known abuse email address | The email has been reported for abuse complaints. |
| TimeoutError: Timeout getting response for email age score | The email age score lookup timed out. |
| InternalError: Error retrieving the email age score response | The email age score lookup failed unexpectedly. |
IP
| Warning | Description |
|---|---|
| Input IP address is invalid. Please provide a valid IPv4 or IPv6 address | The submitted IP address is not a valid IPv4 or IPv6 address. |
| Proxy detected | The IP address is associated with a proxy, VPN, or anonymizing service. |
| Timeout getting response for IP information. Partial response returned. | IP enrichment timed out, so a partial response was returned. |
Error responses
| HTTP status | Cause |
|---|---|
| 400 Bad Request | Missing a required parameter or invalid value. |
| 401 Unauthorized | No API key provided or the API key is invalid. |
| 403 Forbidden | The API key does not have access to this endpoint, has expired, or has been disabled. |
| 429 Too Many Requests | The API key has exceeded its rate limit. Retry after the rate limit window resets. |
| 500 Internal Server Error | An unexpected error occurred. Contact support@trestleiq.com if the issue persists. |
Null handling
All response fields may return null. Common reasons:- Input not provided: The corresponding input (phone, address, email, or IP) was not submitted.
- Input invalid: The submitted value could not be validated, for example a fake phone number or a malformed IP.
- Data unavailable: Trestle’s data sources do not have coverage for this input.
- Reserved field: Some fields are reserved for future use and always return null.
name_match, is_valid, and line_type as a distinct value in your risk model. Do not impute them with a default value.
Best practices
Input recommendations
-
Name: Submit the full name in
primary.name. Do not pass placeholder values such asN/AorNONE; leave the parameter empty instead. -
Phone: E.164 format is recommended, for example
+12065551234. Includephone.country_hintfor non-US numbers. -
Address: Include
state_codeandpostal_codefor the best validation results. For a street-level result, submitstreet_line_1plus at least one of city, state, or postal code. A submitted address is always echoed back as a block and is never null, so you can see every attribute. Only a completely absent address yields a null block. - Email: Submit the full email address. The API checks validity and email owner name matching.
-
IP: Both IPv4 and IPv6 are accepted. Private range IPs such as
10.x.x.x,192.168.x.x, and127.0.0.1returnis_valid: false. -
Timestamp: Time zones must be in UTC. The following formats are valid:
YYYY-MM-DDYYYY-MM-DD HH:MMYYYY-MM-DD HH:MM:SSYYYY-MM-DD HH:MM:SS:ssYYYY-MM-DDTHH:MMYYYY-MM-DDTHH:MM:SSYYYY-MM-DDTHH:MM:SS:ssYYYY-MM-DDTHH:MM:SS-00:00(other negative UTC offsets)YYYY-MM-DDTHH:MMZYYYY-MM-DDTHH:MM:SSZYYYY-MM-DDTHH:MM:SS:ssZ
YYYYMMDDTHHMMYYYYMMDDTHHMMZMM-DD-YYYYYYYY-MM-DDTHH:MM:SS+0:00(other positive UTC offsets)
