Skip to main content
POST
Add a beneficial owner
Record a beneficial owner on the entity’s ownership tree — the same write the in-app “add UBO” modal makes, so the resulting record is identical to an officer-added one. Nothing is emailed, charged, or verified here. Provide either a single holderType (a company / partnership owner) or a typed roleTypes set (a trust party).
The entity’s KYB must have begun — the ownership tree is built from the entity document, so adding owners before verification starts returns 409 conflict. Start KYB first via Start KYB.
Adding an unverified owner to an already-verified entity re-opens its KYB, and completion is recomputed automatically once every required owner is verified. Requires the customers:write scope.

Authorizations

Authorization
string
header
required

Bearer API key issued from Settings → Developers in your Instant Compliance organisation. Format: ic_live_….

Headers

Idempotency-Key
string

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.

Maximum string length: 255

Path Parameters

id
string
required

Entity identifier. Accepts either Instant Compliance's UUID or your own external_id.

Body

application/json

Provide either holderType (company / partnership owner) or a non-empty roleTypes set (trust party).

name
string
required
Required string length: 1 - 255
email
string<email>
Maximum string length: 255
dateOfBirth
string

ISO date (YYYY-MM-DD), stored on the owner's linked person record.

Maximum string length: 40
holderType
enum<string>

A single holder type for a company / partnership owner.

Available options:
trustee,
settlor,
beneficiary,
partner,
individual
roleTypes
enum<string>[]

The full typed role set for a trust party.

Maximum array length: 12

Typed trust-party / ownership role.

Available options:
TRUSTEE,
CORPORATE_TRUSTEE,
SETTLOR,
APPOINTOR,
GUARDIAN,
PROTECTOR,
BENEFICIARY_NAMED,
BENEFICIARY_CLASS,
BENEFICIARY_EXCLUDED,
UNIT_HOLDER,
MEMBER,
DIRECTOR,
SHAREHOLDER,
OTHER_CONTROLLER,
OTHER
percentageHeld
number
Required range: 0 <= x <= 100
address
object

Response

The beneficial owner that was recorded.

A beneficial owner. Never includes link tokens, applicant ids, or payment fields.

id
string<uuid>
name
string
holder_type
string
role_type
enum<string> | null

Typed trust-party / ownership role.

Available options:
TRUSTEE,
CORPORATE_TRUSTEE,
SETTLOR,
APPOINTOR,
GUARDIAN,
PROTECTOR,
BENEFICIARY_NAMED,
BENEFICIARY_CLASS,
BENEFICIARY_EXCLUDED,
UNIT_HOLDER,
MEMBER,
DIRECTOR,
SHAREHOLDER,
OTHER_CONTROLLER,
OTHER
role_types
enum<string>[]

Typed trust-party / ownership role.

Available options:
TRUSTEE,
CORPORATE_TRUSTEE,
SETTLOR,
APPOINTOR,
GUARDIAN,
PROTECTOR,
BENEFICIARY_NAMED,
BENEFICIARY_CLASS,
BENEFICIARY_EXCLUDED,
UNIT_HOLDER,
MEMBER,
DIRECTOR,
SHAREHOLDER,
OTHER_CONTROLLER,
OTHER
percentage_held
number | null
kyc_required
boolean

False for excluded / recorded-only parties that are never checked.

kyc_status
enum<string>
Available options:
NOT_STARTED,
PENDING,
IN_PROGRESS,
VERIFIED,
FAILED,
NOT_REQUIRED,
AWAITING_RESUBMISSION
kyc_email
string | null
linked_customer
object | null
added_via
string
created_at
string<date-time>
updated_at
string<date-time>