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.
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
| Field | Type | | Description |
|---|
email | string | required | Unique across all users when a new account is created. Max 254 characters. |
internal_id | integer | optional | Your own ID. Must be unique among your linked contractors. |
bank_account_number | string | optional | Norwegian account number. Do not combine with IBAN/BIC. |
bank_iban_number | string | optional | Send together with bank_bic_number. |
bank_bic_number | string | optional | Send together with bank_iban_number. |
first_name | string | optional | Accepted for backwards compatibility. Does not complete the profile step. |
last_name | string | optional | Accepted for backwards compatibility. |
address | string | optional | Accepted for backwards compatibility. |
postal_code | string | optional | Accepted for backwards compatibility. Max 10 characters. |
city | string | optional | Accepted for backwards compatibility. |
dial_code | string | optional | Phone country code. Validated on the server. |
phone | string | optional | Digits only, 4–15 characters. |
main_work | string | optional | "true" or "false". |
note | string | optional | Note stored on the user and visible to you. Max 4096 characters. |
BankThe 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
| Code | Description |
|---|
200 | The user object. |
400 | Client or validation error (error, or alternatively data). |
404 | Not found. |
422 | Validation rejected by the framework. |
401 | Not 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
| Field | Type | | Description |
|---|
id | integer | required | The EasyFreelance user ID. |
Response
| Code | Description |
|---|
200 | The user object. |
404 | The user does not exist, or is not linked to your account. |
401 | Not 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
| Field | Type | | Description |
|---|
internal_id | integer | optional | Your own ID. |
bank_account_number | string | optional | Norwegian account number. |
bank_iban_number | string | optional | Send together with BIC. |
bank_bic_number | string | optional | Send together with IBAN. |
first_name | string | optional | Individual fields in the profile. |
last_name | string | optional | Individual fields in the profile. |
address | string | optional | Individual fields in the profile. |
postal_code | string | optional | Individual fields in the profile. |
city | string | optional | Individual fields in the profile. |
dial_code | string | optional | Individual fields in the profile. |
phone | string | optional | Individual fields in the profile. |
main_work | string | optional | "true", "false" or null. |
note | string | optional | Note. Max 4096 characters. |
NoteThe 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
| Code | Description |
|---|
200 | Updated user object. |
400 | Client or validation error. |
404 | Not found. |
422 | Validation 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
| Field | Type | | Description |
|---|
first_name | string | required | Max 254 characters. |
last_name | string | required | Max 254 characters. |
address | string | required | Max 255 characters. |
postal_code | string | required | Max 10 characters. |
city | string | required | Max 255 characters. |
dial_code | string | required | Phone country code. |
phone | string | required | Phone number. |
main_work | string | required | "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
| Code | Description |
|---|
200 | Updated user object. onboarding reflects that the profile step is complete. |
400 | Client or validation error. |
422 | Validation 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
| Field | Type | | Description |
|---|
user_id | integer | optional | Minimum 1. |
phone | string | optional | Max 64 characters. |
ssn | string | optional | Max 64 characters. |
Response
| Code | Description |
|---|
200 | The user object. |
400 | No identifier, or more than one. |
404 | No 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
| Field | Type | | Description |
|---|
send_email | boolean | optional | Send 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"
}