Get crosscheck result
Returns the status and result of a crosscheck job. When status is completed, the record object contains the resolved identity and the crosscheck outcome.
curl --request GET \
--url https://api.kernel.ai/rest/v1/crosscheck/{job_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.kernel.ai/rest/v1/crosscheck/{job_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.kernel.ai/rest/v1/crosscheck/{job_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kernel.ai/rest/v1/crosscheck/{job_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.kernel.ai/rest/v1/crosscheck/{job_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.kernel.ai/rest/v1/crosscheck/{job_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kernel.ai/rest/v1/crosscheck/{job_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "pending",
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"jobid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"created_at": "2025-06-05T12:00:00Z",
"completed_at": "2025-06-05T12:00:05Z",
"record": {
"kernel_id": "6347422643",
"external_id": "0014x00001LMZCDAA5",
"identity": {
"identity_resolution_confidence": "HIGH",
"identity_resolution_reasoning": "<string>",
"legal_info": {
"country": "US",
"reasoning": "Confirmed via Stripe terms of service page.",
"trading_name": "Stripe, Inc.",
"confidence": "HIGH",
"legal_name": "Stripe, Inc.",
"website": "https://stripe.com"
},
"trading_info": {
"country": "US",
"website": "https://stripe.com",
"reasoning": "Primary brand site confirmed via domain ownership.",
"trading_name": "Stripe",
"confidence": "HIGH"
},
"entity_classification": {
"type": "Company",
"subtype": "Operating",
"reasoning": "Classified as an operating company based on commercial activity."
},
"identity_type": "legal_entity",
"company_registration_number": "15117085"
},
"crosscheck": {
"recommended_action": {
"action": "Associate",
"association_type": "reparent",
"reasoning": "Regional entity controlled by the identified operating parent."
},
"duplicate": {
"type": "REGIONAL",
"reasoning": "<string>",
"group_id": "60498",
"duplicate_of": {
"kernel_id": "8514783664",
"external_id": "0014x00001TopParentA"
},
"members": [
{
"external_id": "0014x00001oXQfLAAW",
"kernel_id": "7643512876",
"type": "REGIONAL",
"reasoning": "<string>"
}
],
"checked_at": "2026-07-29T09:14:07.642Z"
},
"op_status": {
"operational_status": "Active",
"reasoning": "The company has an active website and current evidence of business operations."
},
"checked_at": "2026-07-29T09:14:09.771Z"
},
"parentage": {
"kernel_id": "6347422643",
"parent": {
"kernel_id": "7944166432",
"trading_name": "Alphabet Inc.",
"legal_name": "Alphabet Inc.",
"website": "https://abc.xyz",
"country": "US",
"entity_category": "Company",
"entity_sub_category": "HoldCo/Investment",
"reasoning": "Google LLC is a wholly-owned subsidiary of Alphabet Inc., its parent holding company.",
"confidence": "HIGH",
"external_id": "0014x00001TopParentA"
},
"top_parent": {
"kernel_id": "7944166432",
"trading_name": "Alphabet Inc.",
"legal_name": "Alphabet Inc.",
"website": "https://abc.xyz",
"country": "US",
"entity_category": "Company",
"entity_sub_category": "HoldCo/Investment",
"reasoning": "Google LLC is a wholly-owned subsidiary of Alphabet Inc., its parent holding company.",
"confidence": "HIGH",
"external_id": "0014x00001TopParentA"
},
"top_operating_parent": {
"kernel_id": "7944166432",
"trading_name": "Alphabet Inc.",
"legal_name": "Alphabet Inc.",
"website": "https://abc.xyz",
"country": "US",
"entity_category": "Company",
"entity_sub_category": "HoldCo/Investment",
"reasoning": "Google LLC is a wholly-owned subsidiary of Alphabet Inc., its parent holding company.",
"confidence": "HIGH",
"external_id": "0014x00001TopParentA"
},
"regional_subsidiary": {
"is_regional": false,
"regional_scope": "India",
"reasoning": "Operates as a regional subsidiary focused on the Indian market."
}
},
"linkedin": {
"url": "https://www.linkedin.com/company/stripe",
"slug": "stripe",
"match_type": "actual",
"reasoning": "Matched via verified website domain stripe.com."
}
},
"error_message": "<string>",
"error_type": "<string>"
}{
"error": "Job not found"
}{
"error": "Rate limit exceeded. Retry after 60 seconds."
}{
"error": "Internal server error"
}POST /v1/crosscheck.
When status is completed, the record field contains:
kernel_idfor the resolved entity, and yourexternal_idechoed backidentity— the resolution result (identity_type,identity_resolution_confidence,identity_resolution_reasoning,legal_info,trading_info,entity_classification)linkedin— the LinkedIn match, ifmatch_to_linkedinwas requestedcrosscheck— the recommended action, duplicate grouping, and operational status, ornullif the pass did not run. See Crosscheck not run.parentage— the corporate hierarchy, in the same shape asGET /v1/combined/{job_id}.nullunder the same conditions ascrosscheck.
Completed response
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "completed",
"created_at": "2025-06-05T12:00:00Z",
"completed_at": "2025-06-05T12:04:12Z",
"record": {
"kernel_id": "6347422643",
"external_id": "0014x00001LMZCDAA5",
"identity": {
"identity_type": "legal_entity",
"identity_resolution_confidence": "HIGH",
"identity_resolution_reasoning": "Matched by domain and legal name.",
"company_registration_number": null,
"legal_info": {
"country": "US",
"reasoning": "Confirmed via Stripe terms of service page.",
"trading_name": "Stripe, Inc.",
"confidence": "HIGH",
"legal_name": "Stripe, Inc.",
"website": "https://stripe.com"
},
"trading_info": {
"country": "US",
"website": "https://stripe.com",
"reasoning": "Primary brand site confirmed via domain ownership.",
"trading_name": "Stripe",
"confidence": "HIGH"
},
"entity_classification": {
"type": "Company",
"subtype": "Operating",
"reasoning": "Classified as an operating company based on commercial activity."
}
},
"crosscheck": {
"recommended_action": {
"action": "Associate",
"association_type": "reparent",
"reasoning": "The regional entity is controlled by the identified operating parent."
},
"duplicate": {
"type": "REGIONAL",
"reasoning": "Same trading name and website in a different country.",
"group_id": "60498",
"duplicate_of": {
"kernel_id": "9900374156",
"external_id": "0014x00001LMZCDAA5"
},
"members": [
{
"external_id": "0014x00001LMZCDAA5",
"kernel_id": "9900374156",
"type": "PRIMARY",
"reasoning": null
},
{
"external_id": "0014x00001oXQfLAAW",
"kernel_id": "7643512876",
"type": "REGIONAL",
"reasoning": "Same trading name and website in a different country."
}
],
"checked_at": "2026-07-29T09:14:07.642Z"
},
"op_status": {
"operational_status": "Active",
"reasoning": "The company has an active website and current evidence of business operations."
},
"checked_at": "2026-07-29T09:14:09.771Z"
},
"parentage": {
"kernel_id": "6347422643",
"parent": {
"kernel_id": "9900374156",
"external_id": "0014x00001ParentAAA",
"trading_name": "Stripe UK",
"legal_name": "Stripe Payments UK Ltd",
"website": "https://stripe.com",
"country": "GB",
"entity_category": "Company",
"entity_sub_category": "Operating",
"confidence": "HIGH",
"reasoning": "The regional entity is controlled by the identified operating parent."
},
"top_parent": {
"kernel_id": "8514783664",
"external_id": "0014x00001TopParentA",
"trading_name": "Stripe",
"legal_name": "Stripe, Inc.",
"website": "https://stripe.com",
"country": "US",
"entity_category": "Company",
"entity_sub_category": "HoldCo/Investment",
"confidence": "HIGH"
},
"top_operating_parent": {
"kernel_id": "9900374156",
"external_id": "0014x00001ParentAAA",
"trading_name": "Stripe UK",
"legal_name": "Stripe Payments UK Ltd",
"website": "https://stripe.com",
"country": "GB",
"entity_category": "Company",
"entity_sub_category": "Operating",
"confidence": "HIGH"
},
"regional_subsidiary": {
"is_regional": true,
"regional_scope": "United Kingdom",
"reasoning": "The entity operates within the United Kingdom under the wider corporate group."
}
}
}
}
Reading the crosscheck result
| Field | Description |
|---|---|
crosscheck.recommended_action.action | Recommended action: Delete, Merge, Associate, Associate (missing parent), or None |
crosscheck.recommended_action.association_type | How to associate, when the action is an Associate variant: set_initial_parent, reparent, create_parent, or remove_parent |
crosscheck.duplicate.type | How this record is linked into its duplicate group. PRIMARY means it is the surviving record |
crosscheck.duplicate.duplicate_of | The canonical record this one duplicates, or null |
crosscheck.duplicate.members | Every record in the duplicate group, each with its own type |
crosscheck.op_status.operational_status | Active, Out of business, Absorbed, or Undetermined |
crosscheck.checked_at | When the crosscheck pass last ran |
action of None means no change is recommended for the record.
Reading the parentage result
parentage matches the shape returned by GET /v1/combined/{job_id}, so hierarchy reads the same wherever it appears.
| Field | Description |
|---|---|
parentage.parent | Immediate parent, with reasoning for the assignment. null when the entity has none |
parentage.top_parent | Ultimate parent at the top of the hierarchy. For standalone entities this points to the entity itself, with parent null |
parentage.top_operating_parent | Highest operating (non-holding) parent |
parentage.regional_subsidiary | Whether the entity operates as a regional subsidiary, and its country scope |
kernel_id, trading_name, legal_name, website, country, entity_category, entity_sub_category, and confidence. Crosscheck adds external_id, populated when that parent also exists in your CRM.
Crosscheck not run
The pass is skipped when no entity is resolved, or when theexternal_id does not match an account in your Kernel dataset. The job still completes, crosscheck and parentage are both null, and the crosscheck portion of the credit cost is refunded:
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "completed",
"created_at": "2025-06-05T12:00:00Z",
"completed_at": "2025-06-05T12:00:05Z",
"record": {
"kernel_id": null,
"external_id": "0014x00001LMZCDAA5",
"identity": {
"identity_resolution_confidence": "HIGH",
"identity_resolution_reasoning": "Company identified as Acme Inc. via legal name and website alignment, but no matching entity exists in Kernel's database.",
"company_registration_number": null,
"legal_info": null,
"trading_info": null,
"entity_classification": null
},
"crosscheck": null,
"parentage": null
}
}
Failed response
If the job fails, the response usesjobid instead of id and includes error_message and error_type:
{
"jobid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "failed",
"error_message": "Job failed",
"error_type": "unknown"
}
Authorizations
Include your API key in the x-api-key header.
Path Parameters
Job ID returned by the POST endpoint
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Response
Job status response
Current status of the job. Terminal states are completed and failed.
pending, processing, completed, failed Unique identifier for the job. Present when status is pending, processing, or completed.
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
Unique identifier for the job. Present only when status is failed.
"a1b2c3d4-e5f6-7890-abcd-ef1234567890"
ISO 8601 timestamp when the job was created.
"2025-06-05T12:00:00Z"
ISO 8601 timestamp when the job reached a terminal state.
"2025-06-05T12:00:05Z"
Crosscheck result. Present when status is completed.
Show child attributes
Show child attributes
Error message. Present when status is failed.
Machine-readable error category. Present when status is failed.
curl --request GET \
--url https://api.kernel.ai/rest/v1/crosscheck/{job_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.kernel.ai/rest/v1/crosscheck/{job_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.kernel.ai/rest/v1/crosscheck/{job_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.kernel.ai/rest/v1/crosscheck/{job_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.kernel.ai/rest/v1/crosscheck/{job_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.kernel.ai/rest/v1/crosscheck/{job_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.kernel.ai/rest/v1/crosscheck/{job_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"status": "pending",
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"jobid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"created_at": "2025-06-05T12:00:00Z",
"completed_at": "2025-06-05T12:00:05Z",
"record": {
"kernel_id": "6347422643",
"external_id": "0014x00001LMZCDAA5",
"identity": {
"identity_resolution_confidence": "HIGH",
"identity_resolution_reasoning": "<string>",
"legal_info": {
"country": "US",
"reasoning": "Confirmed via Stripe terms of service page.",
"trading_name": "Stripe, Inc.",
"confidence": "HIGH",
"legal_name": "Stripe, Inc.",
"website": "https://stripe.com"
},
"trading_info": {
"country": "US",
"website": "https://stripe.com",
"reasoning": "Primary brand site confirmed via domain ownership.",
"trading_name": "Stripe",
"confidence": "HIGH"
},
"entity_classification": {
"type": "Company",
"subtype": "Operating",
"reasoning": "Classified as an operating company based on commercial activity."
},
"identity_type": "legal_entity",
"company_registration_number": "15117085"
},
"crosscheck": {
"recommended_action": {
"action": "Associate",
"association_type": "reparent",
"reasoning": "Regional entity controlled by the identified operating parent."
},
"duplicate": {
"type": "REGIONAL",
"reasoning": "<string>",
"group_id": "60498",
"duplicate_of": {
"kernel_id": "8514783664",
"external_id": "0014x00001TopParentA"
},
"members": [
{
"external_id": "0014x00001oXQfLAAW",
"kernel_id": "7643512876",
"type": "REGIONAL",
"reasoning": "<string>"
}
],
"checked_at": "2026-07-29T09:14:07.642Z"
},
"op_status": {
"operational_status": "Active",
"reasoning": "The company has an active website and current evidence of business operations."
},
"checked_at": "2026-07-29T09:14:09.771Z"
},
"parentage": {
"kernel_id": "6347422643",
"parent": {
"kernel_id": "7944166432",
"trading_name": "Alphabet Inc.",
"legal_name": "Alphabet Inc.",
"website": "https://abc.xyz",
"country": "US",
"entity_category": "Company",
"entity_sub_category": "HoldCo/Investment",
"reasoning": "Google LLC is a wholly-owned subsidiary of Alphabet Inc., its parent holding company.",
"confidence": "HIGH",
"external_id": "0014x00001TopParentA"
},
"top_parent": {
"kernel_id": "7944166432",
"trading_name": "Alphabet Inc.",
"legal_name": "Alphabet Inc.",
"website": "https://abc.xyz",
"country": "US",
"entity_category": "Company",
"entity_sub_category": "HoldCo/Investment",
"reasoning": "Google LLC is a wholly-owned subsidiary of Alphabet Inc., its parent holding company.",
"confidence": "HIGH",
"external_id": "0014x00001TopParentA"
},
"top_operating_parent": {
"kernel_id": "7944166432",
"trading_name": "Alphabet Inc.",
"legal_name": "Alphabet Inc.",
"website": "https://abc.xyz",
"country": "US",
"entity_category": "Company",
"entity_sub_category": "HoldCo/Investment",
"reasoning": "Google LLC is a wholly-owned subsidiary of Alphabet Inc., its parent holding company.",
"confidence": "HIGH",
"external_id": "0014x00001TopParentA"
},
"regional_subsidiary": {
"is_regional": false,
"regional_scope": "India",
"reasoning": "Operates as a regional subsidiary focused on the Indian market."
}
},
"linkedin": {
"url": "https://www.linkedin.com/company/stripe",
"slug": "stripe",
"match_type": "actual",
"reasoning": "Matched via verified website domain stripe.com."
}
},
"error_message": "<string>",
"error_type": "<string>"
}{
"error": "Job not found"
}{
"error": "Rate limit exceeded. Retry after 60 seconds."
}{
"error": "Internal server error"
}
