API/Onboarding
Flows
Onboarding
Before you can send a payout, the contractor must complete five steps. The onboarding field on the user shows at all times what remains.
All user payloads contain the object onboarding (version v2). There you will find is_onboarded, a list of missing_steps, and a detailed steps-overview. Use this as the source of truth instead of keeping your own state in your system.
The five steps
| Step | Endpoint | How it is completed |
|---|---|---|
email_verified | POST /users | Set automatically when the user is created or linked via the API. |
terms_approved | POST /users/{id}/terms | Send {"approved": true} when the contractor has accepted the current terms. |
profile | PUT /users/{id}/profile | Name, address, postcode, city, country code, telephone and main_work – all required. |
bank_account | PUT /users/{id} | Either a Norwegian account number, or IBAN and BIC together. Never both in the same call. |
id_verification | POST /users/{id}/verification/flows | Veriff or BankID. See Verification. |
The step id_verification becomes true only once the entity verification has been approved and the identity fields from Veriff or BankID are complete. An approved session without a national identity number still gives false.
The onboarding object
{
"onboarding": {
"is_onboarded": false,
"missing_steps": [
"id_verification"
],
"steps": {
"email_verified": true,
"terms_approved": true,
"profile": true,
"id_verification": false,
"bank_account": true
},
"status_version": "v2",
"evaluated_at": "2026-07-08T12:00:05+00:00"
}
}Recommended order
Register and get the return URL approved
POST /verification-return-urls. The approval is manual and may take time, so do this first – not when you already have a contractor waiting. That the API responds201does not mean the URL is approved yet.Create or link the user
POST /userswith an email address, and preferablyinternal_idso you can match against your own system. If the email already exists, the existing user is linked to your partner account.Accept the terms
Fetch the current terms with
GET /terms, show them to the contractor, and record the response withPOST /users/{id}/terms.Register profile and bank account
PUT /users/{id}/profilefor the entire profile, andPUT /users/{id}for the bank details. The bank fields follow an either–or rule: a Norwegian account number on its own, or IBAN and BIC together.Run ID verification
POST /users/{id}/verification/flows, send the user toverification_url, and pollGET /verification/status/{verificationSession}every 2–5 seconds until the status is terminal.Confirm that the user has completed onboarding
Fetch
GET /users/{id}and check thatonboarding.is_onboardedistrueand thatmissing_stepsis empty. You can then send payouts.
Bank details
The server validates that you use exactly one of the variants. If you mix them in the same request, it is rejected.
| Variant | Field | Note |
|---|---|---|
| Norwegian account | bank_account_number | Sent on its own. Do not combine with IBAN or BIC. |
| International | bank_iban_number + bank_bic_number | Must be sent together. If you switch variant, the columns for the other one may be cleared. |
Fields that do not drive onboarding
POST /users accepts a number of additional fields – first_name, last_name, address, phone, main_work, note – for backwards compatibility with older integrations. They does not complete the profile step. Use PUT /users/{id}/profile for that.