Update a Beneficiary
Replaces the editable profile fields (name, alias, email, identity fields). Changing a PII trigger field (legal name, date of birth, country, tax id) on a compliant Beneficiary auto-raises reacknowledgment_required, blocking new Payouts until re-acknowledged. Identity-shape violations are rejected (422) with the row unchanged.
Authorizations
Cleff API key issued to a Business that self-registers via POST /v1/registration
Path Parameters
Body
Optional contact phone. Non-trigger; full-replace (omitting clears it).
Cleff-only display label, preferred over the legal name. Non-trigger.
Person: given name (trigger field)
Person: family name (trigger field)
Person: ISO 3166-1 alpha-2 country of residence (trigger)
Person: date of birth YYYY-MM-DD (trigger field)
Business: legal business name (trigger field)
Business: ISO 3166-1 alpha-2 country of incorporation (trigger)
Business: Cleff-owned KYB record (trigger field)
Tax identifier (trigger field)
Optional mailing/legal address (omit to clear). Non-trigger.
Response
person, business Legal display name (first+last or business name); never piped
Preferred display label: nickname when set, else legal name
pending, compliant, suspended Derived: false while the per-type required identity field is still deferred (a stub in the awaiting_pii state). True once the identity is complete. Never stored. Computed against the CURRENT required-field list, so a compliant beneficiary can read false after that list grows: that is a top-up prompt, not a block — the beneficiary keeps its status and keeps receiving payouts, and supplying the field on PUT /v1/beneficiaries/:id or over a full_onboarding collect link flips it back to true.
Soft flag: a trigger PII field changed after acknowledgment. Compliance status stays compliant, but new Payout creation is blocked until the Business re-acknowledges.
Identity collection sub-state. Only a full_onboarding link advances it — a bank_details link never touches the Beneficiary.
not_invited, invited, details_submitted When the beneficiary completed the full_onboarding collection-link form.
Derived read-model Status chip: a pure projection over {identity completeness, compliance state + re-ack flag, bank-account validation/verification}. The invited chip was retired. Not a stored state machine.
suspended, reacknowledgment_required, pending_details, pending_kyc, action_required, ready Derived: the beneficiary's live (unconsumed, unexpired) collection-link requests — {id, scope, expires_at} — read off the live-token store, never stored. Consumed/expired tokens never appear. Cardinality is 0..1 today (resend invalidates the prior link), but the shape is a list.
When the Business archived this Beneficiary, or null while it is active. An archived Beneficiary is gone from the address book (list, CSV export) and refuses new Payouts, but stays readable by id so a Payout's payee can still be resolved.
sandbox, production Business-facing display label, when set
Optional structured postal address; null when unset
Provider enrollment status for the default payout rail, or null when the Beneficiary has never been enrolled. rejected means the last synchronous enrollment attempt failed (e.g. the rail rejected the bank): the Beneficiary is compliant but payouts cannot reach them until re-enrollment succeeds.
pending, verified, rejected, suspended, closed