Update the editable part of the profile
Change what is not locked. Only fields actually present in the request are written, so a client sending back a partially rendered form cannot blank what it never showed. `legal_name` and `registration_number` are not accepted at all — they are locked after verification and changing one is E3-6's re-verification request, not a profile edit. Audit-logged with before and after, because a change of contact email is how an account is taken over quietly.
Change what is not locked.
Only fields actually present in the request are written, so a client
sending back a partially rendered form cannot blank what it never showed.
legal_name and registration_number are not accepted at all — they are
locked after verification and changing one is E3-6's re-verification
request, not a profile edit.
Audit-logged with before and after, because a change of contact email is how an account is taken over quietly.
Authorization
OAuth2PasswordBearer In: header
Cookie Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
The editable half of the profile.
legal_name and registration_number are deliberately absent. Once a
business is verified those are locked, and changing one is a request that
forces re-verification — POST /kyb/field-change-requests (E3-6), not a
profile edit. Accepting them here and refusing them at runtime would make
the contract say one thing and the server another.
Every field is optional; only what is sent is changed. A client that sends the whole form back must not blank a field it never displayed.
Response Body
application/json
application/json
curl -X PATCH "https://example.com/api/b/v1/business" \ -H "Content-Type: application/json" \ -d '{}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "legal_name": "string", "trading_name": "string", "legal_structure": "sole_proprietorship", "registration_number": "string", "country": "string", "industry": "agriculture", "contact_email": "string", "contact_phone": "string", "website": "string", "address": "string", "display_currency": "string", "support_email": "string", "registration_issued_on": "2019-08-24", "address_street": "string", "address_city": "string", "address_region": "string", "address_postal_code": "string", "address_country": "string", "activity_description": "string", "needs_licence": true, "sends_disbursements": true, "wants_collections": true, "wants_disbursements": true, "kyb_status": "unverified", "kyb_tier": "tier_0", "status": "active", "locked_fields": [ "string" ], "created_at": "2019-08-24T14:15:22Z"}This business's profile GET
Read-only for anybody who can see the business. Reading the profile is not managing it: a Viewer needs to know which business they are looking at and how to contact it, and gating that behind the settings permission would leave them staring at a blank page.
Balances this business holds, per currency GET
Per currency, from the ledger. Readable by anybody who can see the business. A Viewer exists to look at the numbers, and a finance permission on the balance would leave them with a dashboard that shows everything except the thing it is for.