Create or upsert a customer
Ingest an individual customer. The record is created with
kyc_status = NOT_STARTED and added_via = INTEGRATION. No KYC is
triggered and no credits are charged — your back-office team
triggers verification from inside Instant Compliance.
Idempotency
- If
external_idis supplied and already exists in your organisation, the existing record is updated and the response is 200 OK. - If only
emailmatches an existing record (and the existing record has no conflictingexternal_id), the record is updated and returned with 200 OK. - Otherwise a new record is created and returned with 201 Created.
Include an Idempotency-Key header to make network retries safe for
24 hours.
INTEGRATION with kyc_status = NOT_STARTED. No KYC is
triggered. No credits are charged. Your back-office team completes
the risk questions in-app and starts verification when ready.
Idempotent upsert behaviour
| Input | Match found? | Result | Status |
|---|---|---|---|
externalId supplied | Yes (same org) | Update existing record | 200 OK |
externalId supplied | No, but email matches an existing record with no externalId | Adopt + update | 200 OK |
externalId supplied | No, but email matches an existing record with a different externalId | Reject | 409 conflict |
externalId not supplied | email matches an existing record | Update existing record | 200 OK |
| Neither matches | — | Create new | 201 Created |
Retry safety
PassIdempotency-Key (a UUID or any string ≤ 255 chars). Repeated
calls with the same key within 24 hours replay the original response.
See Idempotency.Authorizations
Bearer API key issued from Settings → Developers in your
Instant Compliance organisation. Format: ic_live_….
Headers
Caller-supplied unique key for safe retries. Repeat the same key within 24 hours and we replay the original response instead of repeating the side effect. Reusing the key with a different request body returns 409 idempotency_conflict.
255Body
1 - 255255Your CRM identifier. Strongly recommended for idempotent upsert + round-tripping.
255v1 only ingests individuals. Entity types ship in v2.
INDIVIDUAL, SOLE_TRADER 32Optional risk pre-answers. Your back-office team will complete the full risk assessment in-app before triggering KYC; these values seed it.
Response
Existing customer updated (idempotent upsert).
Instant Compliance customer UUID.
v1 only ingests individuals. Entity types ship in v2.
INDIVIDUAL, SOLE_TRADER NOT_STARTED, PENDING, IN_PROGRESS, VERIFIED, FAILED, NOT_REQUIRED, AWAITING_RESUBMISSION How the record entered Instant Compliance.
ADMIN_MANUAL, AI_EXTRACTED, CONTACT_PORTAL, BULK_IMPORT, INTEGRATION, SYSTEM Populated only when kyc_status = VERIFIED. Deliberately minimal —
full date of birth and full address are never exposed.

