per_...) is a natural person (human) or legal person (company, trust, other entity). Persons are standalone until an onboarding application referencing them is approved.
Every person is built from claims — typed data points capturing identity, residence, ownership, PEP status, and so on. Every POST /persons must include at least the mandatory claim set for its person_type:
person_type | Mandatory claims |
|---|---|
natural | identity + contact_details |
legal | registration + contact_details |
400 invalid_request with detail <person_type> persons require claim types [...]; missing: [...]. You can include additional claims in the same request (and usually will, to round out the person’s profile).
Natural vs. legal persons
person_type determines which claim types are acceptable.
person_type | Represents | Example claim types |
|---|---|---|
natural | A human | identity, contact_details, nationalities, residence, tax_residencies, pep_status, employment, financial_profile |
legal | A company, trust, partnership, or other legal entity | registration, contact_details, lei, registered_address, business_nature, relationships |
operating_address is also a legal-person claim. You only add it when the legal owner’s registered_address has operating_address_is_same set to false — see conditional requirements.
Legal persons declare counterparties (directors, shareholders, UBOs, trustees, signatories) via a relationships claim. Related persons must already exist.
Claim types are enforced against person_type: mismatches on POST /persons or POST /persons/{person_id}/claims return 400 invalid_request. See the claim type reference.
Creating a person
POST /persons with person_type and a non-empty claims array. Creation is atomic — if any claim fails validation, nothing is persisted.
Response
A successful request returns201 Created:
| Field | Description |
|---|---|
id | The person’s unique ID, prefix per_. |
person_type | natural or legal. |
full_name | Natural: "{first_name} {last_name}" from the identity claim. Legal: entity_name from registration, or empty. |
claims | The claims you provided. Each element carries id, created_at, status: pending, claim_type, and the fields defined for that claim_type. To get the full claim (with person, lifecycle, verified_at, superseded_at, archived_at) for a specific claim later, call GET /persons/{person_id}/claims/{claim_id}. See claim lifecycle. |
Persons don’t have their own status — lifecycle lives on claims. See lifecycle.
Retrieving a person
UseGET /persons/{id} to fetch the person record. Claims aren’t included — list them separately.
GET /persons/{person_id}/claims to list the person’s claims, filtered by claim_type or status. By default you get every row for the person — current and historical — newest-first. Pass include_history=false to collapse to just the current rows (active + in_flight) per type. See listing and retrieving claims.
Authorities
When an application referencing a person is approved, that person becomes an authority on the resulting customer and accounts.authority_type | Meaning |
|---|---|
owner | The primary owner of the customer. |
joint_owner | A joint owner on a shared customer. |
signatory | Can sign on behalf of the customer but doesn’t own it. |
power_of_attorney | Acts under a power of attorney arrangement. |
trading | Authorised to place trades on the customer’s accounts. |
GET /persons/{id}/authorities, or per customer with GET /customers/{id}/authorities.
Legal persons and relationships
Create one person for the legal entity and one for every director, shareholder, UBO, trustee, settlor, or authorised signatory. Then add arelationships claim on the legal person.
related_person ID fails the request with 400 and nothing is persisted.
See claim types for the full relationships schema.