Home AssignmentsFind freelance work InvoicingHow invoicing works PayoutsManage contractors SupportSupport and help
Country
Language
Create a free account

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.

Contents

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

StepEndpointHow it is completed
email_verifiedPOST /usersSet automatically when the user is created or linked via the API.
terms_approvedPOST /users/{id}/termsSend {"approved": true} when the contractor has accepted the current terms.
profilePUT /users/{id}/profileName, address, postcode, city, country code, telephone and main_work – all required.
bank_accountPUT /users/{id}Either a Norwegian account number, or IBAN and BIC together. Never both in the same call.
id_verificationPOST /users/{id}/verification/flowsVeriff or BankID. See Verification.
Note

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

Extract from GET /users/{id}
{
  "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

  1. 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 responds 201 does not mean the URL is approved yet.

  2. Create or link the user

    POST /users with an email address, and preferably internal_id so you can match against your own system. If the email already exists, the existing user is linked to your partner account.

  3. Accept the terms

    Fetch the current terms with GET /terms, show them to the contractor, and record the response with POST /users/{id}/terms.

  4. Register profile and bank account

    PUT /users/{id}/profile for the entire profile, and PUT /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.

  5. Run ID verification

    POST /users/{id}/verification/flows, send the user to verification_url, and poll GET /verification/status/{verificationSession} every 2–5 seconds until the status is terminal.

  6. Confirm that the user has completed onboarding

    Fetch GET /users/{id} and check that onboarding.is_onboarded is true and that missing_steps is 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.

VariantFieldNote
Norwegian accountbank_account_numberSent on its own. Do not combine with IBAN or BIC.
Internationalbank_iban_number + bank_bic_numberMust 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.