Before you start
- An account with capabilities requested. See Create an account.
- An API key with
connected_accounts:readandconnected_accounts:write.
Steps
1
Read the account's requirements
Read the account. Render
requirements.entries[] is the field-level view: every outstanding field, its state, and the capabilities it holds up.entries as your form, and use restricts_capabilities to tell the account holder what each remaining field unlocks. See Requirements for every state.Add ?include=requirements.values to read back what has already been submitted. This is useful for prefilling an edit, and for resolving a person index like persons.0 to a name.2
Resolve the reference data
Some fields cannot be typed freely. Fetch the valid values first.These are not account-scoped (the NG bank list is the same for every account), so there is no account in the path.
momo returns mobile money operators the same way. Before you submit a bank account, confirm it resolves to a real account name:country falls back to your own.3
Hand off the documents
Files are not part of this flow. A document requirement (a person’s identity document, a certificate of incorporation) is collected through an account link: mint one, send the account holder to it, and they upload in the hosted flow. The upload lands against the account and satisfies the requirement without passing through you.Everything else on this page stays server-to-server; only the files need the account holder present. See Hosted onboarding.
4
Submit
Submitting is an account write: An empty
POST /v1/accounts/{account_id} with a fields body, keyed by the same field keys requirements.entries[] returned. Omitting a field leaves it untouched, so you can build up a submission over several calls. But every field you do send is validated together, and if any one of them is rejected the call fails with 400 INVALID_REQUIREMENT_FIELD and none of the fields in it are saved, not even the ones that were fine. Contact details and capability requests in the same call are applied before the fields are validated, so a rejection does not undo them. A field that is only incomplete does not fail the call: it stays outstanding in requirements. See Requirements for the payout_destination shape and its rejection codes.The same call can set contact details and request capabilities, so a form submit is one round trip.currently_due does not mean the account is finished. What was submitted sits in pending_verification until it is checked, so read every bucket, not only currently_due, before you tell the account holder there is nothing left to do.5
Re-read the account
Submitted fields move to
pending_verification, and each entry’s own status can further become pending_review once an automated check hands it to a reviewer. Anything rejected comes back as currently_due with an entry in errors, whose reason is written for display to the account holder. See Requirements for the full state diagram.What happens next
Once every requirement bucket is empty, a reviewer enables each capability, which arrives ascapability.updated. Do not poll for it. See Monitor onboarding.

