POST /api/ingestion/customers is the canonical Customer endpoint. It creates exactly one Customer,
and type determines whether that Customer is an INDIVIDUAL or a BUSINESS. A business is not a
separate resource outside Customers.
One typed shape
Settype to BUSINESS and provide business, or set it to INDIVIDUAL and provide individual.
The two shapes cannot be mixed. Every core canonical field is required in the nested JSON object.
Send the value when your source has it and null when it explicitly does not. Optional first-class
extensions cover provider-neutral onboarding, verification tier, declared use, source of wealth,
public listing, occupation, terms acceptance, and additional information. customData remains an
optional source-owned JSON object for source fields that do not yet have a canonical equivalent.
The exact nested fields and limits are in the generated API Reference. The stable outer fields are:
Create one business Customer
resourceId; a KYB dossier pins the exact
immutable versionId it evaluates.
Create a business and its UBO Customers atomically
UsePOST /api/ingestion/business-onboardings when your integration must guarantee that the
business, all of its beneficial owners, their relationships, and the KYB submission are accepted
together. This is a convenience operation over the Customer model, not a second kind of business
resource.
For every item in beneficialOwners, Karsa validates a complete INDIVIDUAL Customer payload and
creates or versions that individual Customer before recording the ownership and role relationships.
If any Customer, relationship, or dossier write fails, none of the onboarding is committed.
The response returns the business Customer identifiers and, for every beneficial owner, that
individual Customer’s resourceId, versionId, and relationship identifiers. Retain those Customer
IDs exactly as you would for an individual created directly through
POST /api/ingestion/customers.
Update a customer
UsePUT /api/ingestion/customers/{customerId} with Karsa’s stable resourceId. Supply only the
mutable fields that changed. Omitted fields carry forward into the new complete version; an explicit
null clears a nullable field; a supplied documents array replaces that version’s document links.
externalId and type are immutable and are rejected in the update body.
versionId and the currentVersionId. A backdated observation is
recorded in history without replacing a later effective current version.
Complete snapshots
Every CustomerVersion represents the complete customer state reported by your system ateffectiveAt. A later upload with the same externalId and changed values creates another version.
Retry an identical logical write with the original idempotency key.
Upload files separately and link their immutable versions through documents. Owners and control
persons are separate Customers connected by relationships. Provider decisions, warnings, and
provider evidence belong in a KYB dossier or Outcome rather than the
customer profile.
Related
- Business onboarding guide: create a business and its UBO Customers atomically
- KYB dossiers: bind documents and related Customers to an exact business version
- Transactions: reference known customer parties
- Outcomes: attach one source result to this customer