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

API/Users

Reference

Users

Contractors linked to your partner account. All user payloads include onboarding status and the result of the ID verification.

Contents
Note

All calls require Authorization: Bearer <token> and API-key: <uuid>. The base URL is https://app.easyfreelance.no/api/v1 in production and https://test.easyfreelance.no/api/v1 in test. See Authentication.

The user object

The same structure is returned by all endpoints on this page. Below are the most important fields – in addition there are tax fields (tax_percent, tax_type, tax_start, tax_table, tax_free_card) and nationality, birthday and note.

FieldTypeDescription
idintegerThe EasyFreelance user ID. Used in all /users/{id}-routes.
emailstringThe email address the user was created with.
internal_idinteger / nullYour own ID for the user. Unique among your linked contractors.
namestringFull name, or an empty string if the profile has not been completed.
phone, address, postal_code, citystringProfile fields. Empty string when not set.
main_work"true" / "false"Whether work through EasyFreelance is the main source of income. Note that the value is a string.
bank_account_numberstring / nullNorwegian account number.
bank_iban_number, bank_bic_numberstring / nullInternational bank details. Must be set together.
onboardingobjectOnboarding status v2. See Onboarding.
id_verification_detailobjectThe result of the ID verification. See Verification.
created_atdate-timeWhen the user was created.

Endpoints

GET/users

Retrieve all contractors

Paginated list of contractors linked to your partner account.

Query parameters

FieldTypeDescription
pageintegeroptionalPage number. Default 1.
page_sizeintegeroptionalItems per page. Default 25.

Response

CodeDescription
200Paginated envelope with total, next, previous, count and results. See Pagination.
401Not authenticated.
POST/users

Create or link a contractor

If the email address already exists, the existing user is linked to your partner account and returned. On that path we only use email and internal_id – the other fields in the body are ignored. If the email address is new, a user is created.

Body

FieldTypeDescription
emailstringrequiredUnique across all users when a new account is created. Max 254 characters.
internal_idintegeroptionalYour own ID. Must be unique among your linked contractors.
bank_account_numberstringoptionalNorwegian account number. Do not combine with IBAN/BIC.
bank_iban_numberstringoptionalSend together with bank_bic_number.
bank_bic_numberstringoptionalSend together with bank_iban_number.
first_namestringoptionalAccepted for backwards compatibility. Does not complete the profile step.
last_namestringoptionalAccepted for backwards compatibility.
addressstringoptionalAccepted for backwards compatibility.
postal_codestringoptionalAccepted for backwards compatibility. Max 10 characters.
citystringoptionalAccepted for backwards compatibility.
dial_codestringoptionalPhone country code. Validated on the server.
phonestringoptionalDigits only, 4–15 characters.
main_workstringoptional"true" or "false".
notestringoptionalNote stored on the user and visible to you. Max 4096 characters.
Bank

The bank details follow an either–or rule: either bank_account_number alone, or bank_iban_number and bank_bic_number together. The server rejects a request that mixes the two variants.

Example

POST /users
{
  "email": "[email protected]",
  "internal_id": 456,
  "bank_account_number": "12043512345"
}

Response

CodeDescription
200The user object.
400Client or validation error (error, or alternatively data).
404Not found.
422Validation rejected by the framework.
401Not authenticated.
GET/users/{id}

Retrieve a single contractor

Returns the contractor linked to the authenticated partner, including onboarding and id_verification_detail. The server automatically retrieves the most recent terminal ssn_duplicate session for your partner account, so that duplicate results show up without you having to send verification_id.

Path

FieldTypeDescription
idintegerrequiredThe EasyFreelance user ID.

Response

CodeDescription
200The user object.
404The user does not exist, or is not linked to your account.
401Not authenticated.
PUT/users/{id}

Update fields on a contractor

Partial update. Send only the fields you want to change – the server does not overwrite a stored profile, bank details, note or internal_id for fields you omit. Primarily intended for adding or changing bank details. To fill in the whole profile, use PUT /users/{id}/profile.

Body

FieldTypeDescription
internal_idintegeroptionalYour own ID.
bank_account_numberstringoptionalNorwegian account number.
bank_iban_numberstringoptionalSend together with BIC.
bank_bic_numberstringoptionalSend together with IBAN.
first_namestringoptionalIndividual fields in the profile.
last_namestringoptionalIndividual fields in the profile.
addressstringoptionalIndividual fields in the profile.
postal_codestringoptionalIndividual fields in the profile.
citystringoptionalIndividual fields in the profile.
dial_codestringoptionalIndividual fields in the profile.
phonestringoptionalIndividual fields in the profile.
main_workstringoptional"true", "false" or null.
notestringoptionalNote. Max 4096 characters.
Note

The validation rules depend on whether a profile already exists and on which fields you send. Without an existing profile, several fields become required together. If you switch between a Norwegian bank account and IBAN/BIC, the columns for the other variant may be cleared.

Response

CodeDescription
200Updated user object.
400Client or validation error.
404Not found.
422Validation rejected.
PUT/users/{id}/profile

Register the full profile

Registers a full profile for the contractor. This is the intended way to complete the profile step in onboarding via the partner API. All fields are required.

Body

FieldTypeDescription
first_namestringrequiredMax 254 characters.
last_namestringrequiredMax 254 characters.
addressstringrequiredMax 255 characters.
postal_codestringrequiredMax 10 characters.
citystringrequiredMax 255 characters.
dial_codestringrequiredPhone country code.
phonestringrequiredPhone number.
main_workstringrequired"true" or "false".

Example

PUT /users/123/profile
{
  "first_name": "Marte",
  "last_name": "Hansen",
  "address": "Olafiagangen 5",
  "postal_code": "0188",
  "city": "Oslo",
  "dial_code": "+47",
  "phone": "40012345",
  "main_work": "false"
}

Response

CodeDescription
200Updated user object. onboarding reflects that the profile step is complete.
400Client or validation error.
422Validation rejected.
POST/users/lookup

Retrieve a contractor

Provide exactly one of user_id, phone or ssn. The response is the same as GET /users/{id}.

Body

FieldTypeDescription
user_idintegeroptionalMinimum 1.
phonestringoptionalMax 64 characters.
ssnstringoptionalMax 64 characters.

Response

CodeDescription
200The user object.
400No identifier, or more than one.
404No match among your linked contractors.
POST/users/{id}/login-link

Create a login link

Signed URL that logs the contractor in. The link is valid for 24 hours. Set send_email to true, the same email is sent as for a manual magic link.

Body

FieldTypeDescription
send_emailbooleanoptionalSend the link to the user by email.

Response

201 Created
{
  "login_url": "https://app.easyfreelance.no/magic/eyJ0eXAiOiJKV1Qi...",
  "expires_at": "2026-08-31T09:14:00+00:00"
}