> ## Documentation Index
> Fetch the complete documentation index at: https://dev.kernel.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 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.

Returns the status and result of a crosscheck job started with [`POST /v1/crosscheck`](/api-reference/endpoint/crosscheck).

When `status` is `completed`, the `record` field contains:

* `kernel_id` for the resolved entity, and your `external_id` echoed back
* `identity` — the resolution result (`identity_type`, `identity_resolution_confidence`, `identity_resolution_reasoning`, `legal_info`, `trading_info`, `entity_classification`)
* `linkedin` — the LinkedIn match, if `match_to_linkedin` was requested
* `crosscheck` — the recommended action, duplicate grouping, and operational status, or `null` if the pass did not run. See [Crosscheck not run](#crosscheck-not-run).
* `parentage` — the corporate hierarchy, in the same shape as [`GET /v1/combined/{job_id}`](/api-reference/endpoint/get-combined#with-parentage). `null` under the same conditions as `crosscheck`.

## Completed response

```json theme={null}
{
  "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                                                                                                |

An `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}`](/api-reference/endpoint/get-combined#with-parentage), 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                                                 |

Each entity carries `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 the `external_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:

```json theme={null}
{
  "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 uses `jobid` instead of `id` and includes `error_message` and `error_type`:

```json theme={null}
{
  "jobid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "failed",
  "error_message": "Job failed",
  "error_type": "unknown"
}
```


## OpenAPI

````yaml GET /v1/crosscheck/{job_id}
openapi: 3.1.0
info:
  title: Kernel API
  description: Resolve company identities to canonical entities with a simple async API
  version: 1.0.0
  contact:
    email: support@kernel.ai
  license:
    name: MIT
servers:
  - url: https://api.kernel.ai/rest
    description: Production
security:
  - apiKeyAuth: []
tags:
  - name: Entity Resolution
    description: Resolve a company to a canonical entity
  - name: Firmographics
    description: Retrieve and enrich firmographic data for resolved entities
  - name: Parentage
    description: Look up parent and top-parent entities in a corporate hierarchy
  - name: Combined
    description: Resolve an entity and run a follow-up enrichment in one call
  - name: Crosscheck
    description: Resolve an entity and run the full CRM crosscheck pass in one call
  - name: LinkedIn Lookup
    description: Provisional LinkedIn company match jobs (not Kernel-verified)
paths:
  /v1/crosscheck/{job_id}:
    get:
      tags:
        - Crosscheck
      summary: Get crosscheck result
      description: >-
        Returns the status and result of a crosscheck job. When `status` is
        `completed`, the `record` object contains the resolved `identity` and
        the `crosscheck` outcome.
      operationId: getCrosscheck
      parameters:
        - name: job_id
          in: path
          description: Job ID returned by the POST endpoint
          required: true
          schema:
            type: string
            example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
      responses:
        '200':
          description: Job status response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CrosscheckJobStatus'
        '404':
          description: Job not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Job not found
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Rate limit exceeded. Retry after 60 seconds.
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Internal server error
components:
  schemas:
    CrosscheckJobStatus:
      type: object
      required:
        - status
      properties:
        id:
          description: >-
            Unique identifier for the job. Present when `status` is `pending`,
            `processing`, or `completed`.
          type: string
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        jobid:
          description: >-
            Unique identifier for the job. Present only when `status` is
            `failed`.
          type: string
          example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
        status:
          description: >-
            Current status of the job. Terminal states are `completed` and
            `failed`.
          type: string
          enum:
            - pending
            - processing
            - completed
            - failed
        created_at:
          description: ISO 8601 timestamp when the job was created.
          type: string
          format: date-time
          example: '2025-06-05T12:00:00Z'
        completed_at:
          description: ISO 8601 timestamp when the job reached a terminal state.
          type: string
          format: date-time
          example: '2025-06-05T12:00:05Z'
        record:
          $ref: '#/components/schemas/CrosscheckResult'
          description: Crosscheck result. Present when `status` is `completed`.
        error_message:
          description: Error message. Present when `status` is `failed`.
          type: string
        error_type:
          description: Machine-readable error category. Present when `status` is `failed`.
          type: string
    Error:
      required:
        - error
      type: object
      properties:
        error:
          description: Error description.
          type: string
          example: Entity not found
    CrosscheckResult:
      type: object
      required:
        - kernel_id
        - external_id
        - identity
        - crosscheck
        - parentage
      properties:
        kernel_id:
          description: >-
            Kernel identifier for the resolved entity. `null` when no entity is
            resolved.
          type:
            - string
            - 'null'
          example: '6347422643'
        external_id:
          description: Your CRM identifier, echoed back from the request.
          type:
            - string
            - 'null'
          example: 0014x00001LMZCDAA5
        identity:
          $ref: '#/components/schemas/CrosscheckIdentity'
        linkedin:
          description: LinkedIn match. Present only when `match_to_linkedin` was requested.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/LinkedIn'
        crosscheck:
          description: >-
            Crosscheck outcome. `null` when the pass did not run — that is, when
            no entity was resolved or the `external_id` does not match an
            account in your Kernel dataset. In that case the crosscheck portion
            of the credit cost is refunded.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/CrosscheckBlock'
        parentage:
          description: >-
            Corporate hierarchy. `null` under the same conditions as
            `crosscheck` — both come from the same pass.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/CrosscheckParentage'
    CrosscheckIdentity:
      type: object
      required:
        - identity_resolution_confidence
        - identity_resolution_reasoning
        - legal_info
        - trading_info
        - entity_classification
      properties:
        identity_type:
          description: Type of identity resolved.
          type: string
          enum:
            - legal_entity
            - trading_entity
          example: legal_entity
        identity_resolution_confidence:
          description: Confidence that the resolved identity is correct.
          type: string
          enum:
            - HIGH
            - MEDIUM
            - LOW
        identity_resolution_reasoning:
          description: Explanation of how the identity was resolved.
          type: string
        company_registration_number:
          description: Company registration number, when known.
          type:
            - string
            - 'null'
          example: '15117085'
        legal_info:
          description: Legal entity information. `null` when no entity is resolved.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/LegalInfo'
        trading_info:
          description: Trading entity information. `null` when no entity is resolved.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/TradingInfo'
        entity_classification:
          description: Entity type classification. `null` when no entity is resolved.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/EntityClassification'
    LinkedIn:
      type: object
      properties:
        url:
          description: Full LinkedIn company profile URL.
          type:
            - string
            - 'null'
          example: https://www.linkedin.com/company/stripe
        slug:
          description: Company slug extracted from the LinkedIn URL.
          type:
            - string
            - 'null'
          example: stripe
        match_type:
          description: >-
            How the LinkedIn profile was matched. `actual` is a verified direct
            match; `indicative` is a best-guess match; `none` when no match was
            found.
          type: string
          enum:
            - actual
            - indicative
            - none
        reasoning:
          description: Explanation of how the LinkedIn match was determined.
          type:
            - string
            - 'null'
          example: Matched via verified website domain stripe.com.
    CrosscheckBlock:
      type: object
      properties:
        recommended_action:
          $ref: '#/components/schemas/CrosscheckAction'
        duplicate:
          $ref: '#/components/schemas/CrosscheckDuplicate'
        op_status:
          $ref: '#/components/schemas/CrosscheckOpStatus'
        checked_at:
          description: ISO 8601 timestamp of the last crosscheck run.
          type:
            - string
            - 'null'
          example: '2026-07-29T09:14:09.771Z'
      description: >-
        The crosscheck outcome for the record: recommended action, duplicate
        grouping, and operational status. Hierarchy lives under `parentage`.
    CrosscheckParentage:
      type: object
      description: >-
        Corporate hierarchy for the record, matching the shape returned by the
        resolve-parent and combined endpoints.
      properties:
        kernel_id:
          description: Kernel identifier of the crosschecked entity.
          type:
            - string
            - 'null'
          example: '6347422643'
        parent:
          description: Immediate parent. `null` when the entity has none.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/CrosscheckParentageEntity'
        top_parent:
          description: >-
            The ultimate parent at the top of the corporate hierarchy. For
            standalone entities, top_parent points to the entity itself and
            parent is null.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/CrosscheckParentageEntity'
        top_operating_parent:
          description: >-
            Highest operating (non-holding) parent. `null` when the entity has
            none.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/CrosscheckParentageEntity'
        regional_subsidiary:
          $ref: '#/components/schemas/RegionalSubsidiary'
    LegalInfo:
      type: object
      required:
        - country
        - reasoning
        - trading_name
        - confidence
        - legal_name
        - website
      properties:
        country:
          description: Country of the legal entity.
          type:
            - string
            - 'null'
          example: US
        reasoning:
          description: Explanation of how the legal entity was identified.
          type: string
          example: Confirmed via Stripe terms of service page.
        trading_name:
          description: Trading name associated with the legal entity.
          type:
            - string
            - 'null'
          example: Stripe, Inc.
        confidence:
          description: Confidence in the legal entity info.
          type: string
          enum:
            - HIGH
            - MEDIUM
            - LOW
        legal_name:
          description: Registered legal name.
          type:
            - string
            - 'null'
          example: Stripe, Inc.
        website:
          description: Official URL of the legal entity.
          type:
            - string
            - 'null'
          example: https://stripe.com
    TradingInfo:
      type: object
      required:
        - country
        - website
        - reasoning
        - trading_name
        - confidence
      properties:
        country:
          description: Country of the trading entity's operational region.
          type:
            - string
            - 'null'
          example: US
        website:
          description: Primary trading website URL.
          type:
            - string
            - 'null'
          example: https://stripe.com
        reasoning:
          description: Explanation of how the trading identity was identified.
          type: string
          example: Primary brand site confirmed via domain ownership.
        trading_name:
          description: Primary trading name.
          type:
            - string
            - 'null'
          example: Stripe
        confidence:
          description: Confidence in the trading identity info.
          type: string
          enum:
            - HIGH
            - MEDIUM
            - LOW
    EntityClassification:
      type: object
      required:
        - type
        - subtype
      properties:
        type:
          description: 'Entity category. One of: Company, Government, Education.'
          type: string
          example: Company
        subtype:
          description: >-
            Entity sub-category. E.g. Operating, HoldCo/Investment, Business
            Unit, Establishment.
          type: string
          example: Operating
        reasoning:
          description: Explanation of the classification.
          type:
            - string
            - 'null'
          example: Classified as an operating company based on commercial activity.
    CrosscheckAction:
      type: object
      properties:
        action:
          description: >-
            Recommended CRM action. One of `Delete`, `Merge`, `Associate`,
            `Associate (missing parent)`, or `None`.
          type:
            - string
            - 'null'
          example: Associate
        association_type:
          description: >-
            How the account should be associated when `action` is an Associate
            variant. One of `set_initial_parent`, `reparent`, `create_parent`,
            or `remove_parent`.
          type:
            - string
            - 'null'
          example: reparent
        reasoning:
          description: Explanation for the recommended action.
          type:
            - string
            - 'null'
          example: Regional entity controlled by the identified operating parent.
    CrosscheckDuplicate:
      type: object
      properties:
        type:
          description: >-
            How the crosschecked account itself is linked into the duplicate
            group. `null` when it is not a duplicate.
          type:
            - string
            - 'null'
          example: REGIONAL
        reasoning:
          description: Explanation of the duplicate match.
          type:
            - string
            - 'null'
        group_id:
          description: Identifier grouping the accounts considered the same duplicate set.
          type:
            - string
            - 'null'
          example: '60498'
        duplicate_of:
          description: >-
            The surviving or canonical record this account duplicates. `null`
            when it is not a duplicate.
          oneOf:
            - type: 'null'
            - $ref: '#/components/schemas/CrosscheckEntityRef'
        members:
          description: >-
            All accounts in the duplicate group. Empty when the account is not a
            duplicate.
          type: array
          items:
            $ref: '#/components/schemas/CrosscheckDuplicateMember'
        checked_at:
          description: ISO 8601 timestamp of the last duplicate check.
          type:
            - string
            - 'null'
          example: '2026-07-29T09:14:07.642Z'
    CrosscheckOpStatus:
      type: object
      properties:
        operational_status:
          description: >-
            Operational status of the entity. One of `Active`, `Out of
            business`, `Absorbed`, or `Undetermined`.
          type:
            - string
            - 'null'
          example: Active
        reasoning:
          description: Explanation of the operational status.
          type:
            - string
            - 'null'
          example: >-
            The company has an active website and current evidence of business
            operations.
    CrosscheckParentageEntity:
      description: >-
        A hierarchy entity, as returned by the resolve-parent and combined
        endpoints, plus the CRM identifier when the entity exists in your
        dataset.
      allOf:
        - $ref: '#/components/schemas/ParentEntity'
        - type: object
          properties:
            external_id:
              description: >-
                Your CRM identifier for the entity, when it exists in your
                dataset.
              type:
                - string
                - 'null'
              example: 0014x00001TopParentA
    RegionalSubsidiary:
      type: object
      properties:
        is_regional:
          description: >-
            Whether the entity operates as a regional subsidiary. `null` when
            not yet determined.
          type:
            - boolean
            - 'null'
          example: false
        regional_scope:
          description: >-
            The country scope of the regional operation. `null` when not a
            regional subsidiary or not yet determined.
          type:
            - string
            - 'null'
          example: India
        reasoning:
          description: Explanation of the regional subsidiary classification.
          type:
            - string
            - 'null'
          example: Operates as a regional subsidiary focused on the Indian market.
    CrosscheckEntityRef:
      type: object
      properties:
        kernel_id:
          description: Kernel identifier for the related entity.
          type:
            - string
            - 'null'
          example: '8514783664'
        external_id:
          description: >-
            Your CRM identifier for the related entity, when it exists in your
            dataset.
          type:
            - string
            - 'null'
          example: 0014x00001TopParentA
    CrosscheckDuplicateMember:
      type: object
      properties:
        external_id:
          description: CRM identifier of the duplicate group member.
          type:
            - string
            - 'null'
          example: 0014x00001oXQfLAAW
        kernel_id:
          description: Kernel identifier of the duplicate group member.
          type:
            - string
            - 'null'
          example: '7643512876'
        type:
          description: >-
            How this member is linked into the group. `PRIMARY` marks the
            surviving record; other values describe the match that grouped it
            (for example `EXACT`, `REGIONAL`, `LOCATION`, `TRADING`, `WEBSITE`).
          type:
            - string
            - 'null'
          example: REGIONAL
        reasoning:
          description: Explanation for this member's inclusion, when available.
          type:
            - string
            - 'null'
    ParentEntity:
      type: object
      required:
        - kernel_id
      properties:
        kernel_id:
          description: Kernel ID of the parent entity.
          type: string
          example: '7944166432'
        trading_name:
          description: Parent trading name.
          type:
            - string
            - 'null'
          example: Alphabet Inc.
        legal_name:
          description: Parent registered legal name.
          type:
            - string
            - 'null'
          example: Alphabet Inc.
        website:
          description: Parent company website URL.
          type:
            - string
            - 'null'
          example: https://abc.xyz
        country:
          description: Parent country (ISO 3166-1 alpha-2 or full name).
          type:
            - string
            - 'null'
          example: US
        entity_category:
          description: 'Parent entity category. One of: Company, Government, Education.'
          type:
            - string
            - 'null'
          enum:
            - Company
            - Government
            - Education
            - null
        entity_sub_category:
          description: >-
            Parent entity sub-category. E.g. Operating, HoldCo/Investment,
            Business Unit, Establishment.
          type:
            - string
            - 'null'
          example: HoldCo/Investment
        reasoning:
          description: Explanation of why this entity was identified as the parent.
          type:
            - string
            - 'null'
          example: >-
            Google LLC is a wholly-owned subsidiary of Alphabet Inc., its parent
            holding company.
        confidence:
          description: 'Confidence in the parent identification. One of: HIGH, MEDIUM, LOW.'
          type:
            - string
            - 'null'
          enum:
            - HIGH
            - MEDIUM
            - LOW
            - null
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: Include your API key in the x-api-key header.

````