Every onboarding call uses the user’s bearer token (
Authorization: Bearer <id_token>)
from authentication.How it works
- Create an application once with
POST /v1/applications, passingisCompanyto pick the individual or company flow. - Poll
GET /v1/applicationsand readstatus.currentStep. The reference app polls about once a second. - Show the screen for that step. Some steps need input from the user (a form, the Sumsub check, accepting terms); others just wait while we process. The step advances on the next poll once the work is done.
- When
currentStepisnull, onboarding is finished. Send the user into the app.
After approval: from application to customer
Approval turns the applicant into a customer, and that hand-off gives you everything the rest of the API needs:- The application object (from
GET /v1/applications) carries thecustomerId— every customer-scoped endpoint takes it. - The customer’s primary account is created automatically — you don’t call anything.
Fetch it with List accounts; the
accountIdfrom that response is what cards, payments, and beneficiaries hang off.
currentStep: null is simply: read customerId from the
application → GET /v1/customers/{customerId}/accounts → build the app around
the returned accountId.
The server decides the order, so you don’t hard-code the sequence. Render whatever
currentStep comes back, and treat values you don’t handle as “keep polling”, since new
sub-states get added over time.
Steps
Waiting and failure states
Other values are review or failure states. Render the matching screen:Companies (KYB)
Create the application withisCompany: true and the flow is the same, except the KYC steps
become KYB steps: KYB_INTERNAL and KYB_SUMSUB in place of KYC_INTERNAL and
KYC_SUMSUB. You fetch the form from the same schema endpoint
(it returns company and beneficial-owner fields), but you submit the answers to
POST /v1/applications/kyb instead of the individual KYC endpoint.
One extra waiting state can show up: