Skip to main content
POST
Links one CRM record to a Kernel entity, runs the full cleaning pass against the rest of your dataset, and returns entity resolution, firmographics, parentage and the alignment outcome: a recommended action and the duplicate group. Built for repeat calls. A record that already has a Kernel ID keeps it unless you set settings.rematch_entity, so duplicate groups and recommended actions stay stable across refreshes.
This is an async operation. Poll GET /v1/alignment/{job_id} until status is completed, or provide a webhook_url to receive a callback.
Available to tracked-usage customers at no credit cost. A new external_id consumes tracked-account capacity. Accounts without an active contract fail with error_type: "not_enabled".

Examples

Align a CRM record for the first time

curl

Re-align a known record, keeping its Kernel ID

curl

Rematch the entity because the source data changed

curl
All requests return the same immediate response:
Response (202)

Request body

external_id is required. The first time Kernel sees an external_id it also needs legal_name, trading_name or website; otherwise the job fails with error_type: "identity_inputs_missing". Later calls may send external_id alone.

Sending the same record again

Fields you send are merged into the stored record: present fields overwrite, absent fields are kept.
  • Different input, default settings. The Kernel ID is kept. The record is re-cleaned on the merged data, so its duplicate group or recommended action can change. alignment.drifted_identity_inputs lists the identity fields that have moved since the Kernel ID was resolved.
  • Identical payload. Nothing is written. The record is still re-cleaned against your current dataset, reusing cached research unless force_refresh is set.
  • Two jobs for the same external_id at once. The second fails with error_type: "alignment_in_progress".

Authorizations

x-api-key
string
header
required

Include your API key in the x-api-key header.

Body

application/json

Record to align. external_id identifies it in your CRM and is required.

The record to align. external_id is required; the first time Kernel sees it, at least one of legal_name, trading_name or website is required too. Identity options live under settings.

external_id
string
required

Your CRM identifier for the record to align. Echoed back on record.external_id.

Minimum string length: 1
Example:

"stripe-001"

Registered legal name of the company (e.g. "Stripe, Inc.")

Minimum string length: 1
Example:

"Stripe, Inc."

trading_name
string

Primary brand or trading name (e.g. "Stripe")

Minimum string length: 1
Example:

"Stripe"

website
string

Company website URL.

Minimum string length: 1
Example:

"https://stripe.com"

country
string

Country name or ISO 3166-1 alpha-2 code.

Minimum string length: 1
Example:

"US"

city
string

City.

Minimum string length: 1
Example:

"South San Francisco"

state
string

State or province.

Minimum string length: 1
Example:

"CA"

postal_code
string

ZIP or postal code.

Minimum string length: 1
Example:

"94070"

address
string

Street address.

Minimum string length: 1
Example:

"354 Oyster Point Blvd"

email
string

Email address. Only the domain portion is used for matching.

Minimum string length: 1
Example:

"info@stripe.com"

phone
string

Phone number. Used as an additional signal for entity resolution.

Minimum string length: 1
Example:

"+1 555-555-5555"

company_registration_number
string

Primary incorporation/registration number. The same number can exist in more than one country — pair it with company_registration_country when known. Used to resolve the entity; the response returns the stored registration, not this value.

Minimum string length: 1
Example:

"01234567"

company_registration_country
string

Registry jurisdiction for company_registration_number (ISO 3166-1 alpha-2 preferred). England, Scotland, Wales, and Northern Ireland map to GB. Falls back to country when omitted.

Minimum string length: 1
Example:

"GB"

linkedin_url
string

LinkedIn URL for the company (e.g. "https://linkedin.com/company/stripe"). Used as an additional signal for entity resolution.

Minimum string length: 1
Example:

"https://linkedin.com/company/stripe"

settings
object
webhook_url
string<uri>

HTTPS URL to receive webhook callbacks when the job completes or fails. Kernel will POST the job result to this URL with an X-Kernel-Signature header for verification.

Pattern: ^https://
Example:

"https://example.com/webhooks/kernel"

Response

Job created

id
string
required

Unique identifier for the created job.

Example:

"550e8400-e29b-41d4-a716-446655440000"

status
enum<string>
required

Initial status of the job.

Available options:
processing