Upgrade a business customer from MINIMAL to FULL KYB
Promote a kyb_scope=MINIMAL business customer to kyb_scope=FULL by attaching beneficial-owner data. Identity columns (registration_number, incorporation_country) are typically already on file from MINIMAL onboarding.
Eligibility checks (return 422 on failure):
- Customer exists and belongs to your platform.
- Customer is
type=business. - Customer is currently
kyb_scope=MINIMAL(or has no scope set, treated as Minimal). A FULL customer cannot be “upgraded” again. - Customer is not
PROCESSING(rejected with400— wait for the customer-level webhook before retrying).
Validation (return 422 on failure):
- At least one owner.
- Ownership percentages sum to exactly 100.
- Per-owner identity invariants (DOB ≥ 18, expiry future, valid ISO codes where supplied).
- Owner emails unique within the customer.
- If you send
registration_number/incorporation_countryoverrides, they must satisfy the same rules as create. - If you send
countryto update jurisdiction, the resultingcountryandincorporation_countrymust match.
On success:
- New owners are saved on the customer.
kyb_scopeflips toFULL.- If the customer was
VERIFIED,verification_statusflips back toPENDING(re-onboarding under stricter rules). Existing NGN VBAs are unaffected. - An audit comment is recorded.
- A
customer.status_changedwebhook fires for the verification-status transition (if any).
Important: This endpoint does NOT run the Standard readiness checks. Owner ID files are not part of this payload — upload them per-owner via POST /api/external/customer/{id}/owner/{owner}/files after the upgrade succeeds. Then call POST /api/external/customer/{id}/submit to re-verify the customer under the Standard checks.
Required scope: customer:write.
Authorizations
Use your OAuth client credentials to obtain a short-lived Bearer token from POST /oauth/token.
Path Parameters
Body
Beneficial owners, signatories, and directors. Required, at least one owner. The sum of every owner's ownership_percentage must equal exactly 100 (validated at this endpoint). Per-owner ID files are uploaded after the upgrade succeeds, via the dedicated owner-file endpoints — they're not part of this payload.
1 - 5 elementsOptional override. The business registration / company number is already on the customer from MINIMAL onboarding (canonical for both scopes), so you typically don't send this. Send it only to update the value during the upgrade. Subject to the standard uniqueness rule on (business_id, registration_number, incorporation_country).
Optional override. Already on the customer from Minimal onboarding. Send only if you want to update the value during the upgrade. Must match the customer's country after your changes are applied — if they don't match, the request returns 422.
Optional. Update the registered-address country alongside incorporation_country when correcting jurisdiction during the upgrade. The resulting country and incorporation_country must match.
Optional augmentation. Trading or 'doing business as' name.
Optional augmentation. Legal entity type.
corporation, government_entity, llc, non_profit, other, partnership, sole_proprietorship Optional augmentation. Must be in the past.
Optional augmentation.
Optional augmentation. Max 2000 chars.
Optional augmentation.
Optional augmentation.
business_revenue, business_loans, investment_income, third_party_funds, other Optional augmentation. Estimated annual revenue band, in USD.
0_99999, 100000_499999, 500000_999999, 1000000_4999999, 5000000_24999999, 25000000_99999999, 100000000_249999999, 250000000_plus Optional augmentation.
Optional augmentation.
receive_payments_for_goods_and_services, send_payments_for_goods_and_services, send_receive_funds_related_parties, other Validated against operating_country.
ISO alpha-2. Required whenever any other operating_* field is supplied.
Response
Customer upgraded. kyb_scope is now FULL. Owner ID files still need to be uploaded; then call /submit to re-verify under the FULL floor.

