User & notifications
The authenticated user — profile, locale, connected sign-in accounts, referrals — and their notifications, including accepting project invitations.
These endpoints act on the authenticated user, the person who authorized your application. There is no way to read another user's profile.
Field types follow the field notation.
Access
Every endpoint on this page requires the identify OAuth scope.
User Object
User Structure
| Field | Type | Description |
|---|---|---|
| uuid | uuid | User ID |
| string | Email; the sign-in identifier, cannot be changed through the API | |
| given_name | string | First name, up to 64 characters |
| family_name | string | Last name, up to 64 characters |
| phone | string | Phone, up to 32 characters |
| country | string | Country, up to 64 characters |
| city | string | City, up to 128 characters |
| address | string | Address, up to 512 characters |
| postcode | string | Postcode, up to 32 characters |
| company | string | Company, up to 32 characters |
| locale | string | Interface language, e.g. en, ru, uk |
| timezone | string | IANA time zone, e.g. Europe/Berlin. Order numbers and document dates use it |
| is_allow_mail | boolean | Whether the user agreed to receive news emails |
| type | string | regular, partner or admin |
| status | string | active for any account that can use the API |
| referral_uuid | ?uuid | The user who referred this one |
| is_partner_client | boolean | Whether the account's subscription is managed by a partner |
| partner_percent | integer | Partner discount, percent; 0 for ordinary users |
| balance | decimal | Account balance |
| credit_limit | decimal | How far the balance may go below zero |
| created_at | ISO8601 datetime | When the account was created |
| updated_at | ISO8601 datetime | When the profile was last changed |
Example User
{
"uuid": "0198e7aa-91f0-7c22-a4d1-0f9e8d7c6b5a",
"email": "[email protected]",
"given_name": "Anna",
"family_name": "Petrova",
"phone": "+1 555 010 2000",
"country": "US",
"city": "Springfield",
"address": "",
"postcode": "",
"company": "Acme Windows",
"locale": "en",
"timezone": "America/Chicago",
"is_allow_mail": false,
"type": "regular",
"status": "active",
"referral_uuid": null,
"is_partner_client": false,
"partner_percent": 0,
"balance": 0,
"credit_limit": 0,
"created_at": "2026-06-26T09:55:00.000Z",
"updated_at": "2026-09-01T12:00:00.000Z"
}
Get Current User
GET /api/v1/user
Returns the user.
Modify Current User
PATCH /api/v1/user
Updates any of given_name, family_name, phone, country, city, address, postcode, company, locale
(up to 8 characters), timezone (up to 128 characters), is_allow_mail. At least one must be present. Email and
password cannot be changed by third-party applications.
PUT /api/v1/user does the same but requires all of these fields.
Example Request
{
"given_name": "Anna",
"timezone": "Europe/Berlin"
}
Response
204 No Content
Get Current User Locale
GET /api/v1/user/locale
{
"locale": "en",
"timezone": "America/Chicago"
}
Connected Accounts
Third-party sign-in providers linked to the account.
List Connected Accounts
GET /api/v1/user/oauth
[
{
"provider": "google",
"provider_email": "[email protected]",
"created_at": "2026-06-26T09:55:00.000Z"
}
]
Disconnect Account
DELETE /api/v1/user/oauth/{provider}
Unlinks a provider. Refused with 403 AUTH_NO_ACCESS if it is the user's only way to sign in: no password and no
other provider. 204 No Content.
List Referrals
GET /api/v1/user/referrals
Users who signed up through this user's referral link, oldest first.
[
{
"uuid": "0199b2bb-0000-7000-8000-000000000001",
"user_name": "Ivan Sidorov",
"created_at": "2026-08-01T10:00:00.000Z"
}
]
Notifications
Notifications are personal: they belong to the user, not to a project. A project only gives context.
Notification Structure
| Field | Type | Description |
|---|---|---|
| uuid | uuid | Notification ID |
| type | string | See below |
| payload | object | Type-specific details, e.g. {title} for task reminders, {role_name, project_name} for invitations |
| status | ?string | For actionable types: pending, accepted or rejected; null otherwise |
| project_uuid | ?uuid | Related project |
| project_name | ?string | Its name |
| entity_type | ?string | Related entity, e.g. task |
| entity_uuid | ?uuid | Its ID |
| read_at | ?ISO8601 datetime | When it was marked read |
| resolved_at | ?ISO8601 datetime | When an actionable notification was answered |
| created_at | ISO8601 datetime | When it was created |
| type | Meaning | Actionable |
|---|---|---|
task_due_soon |
A task assigned to the user is due soon | |
task_overdue |
A task assigned to the user is overdue | |
project_invitation |
The user was invited to a project | ✓ |
ticket_reply |
Support replied to the user's ticket | |
partner_client_joined |
Partners: a new client joined | |
partner_credit_warning |
Partners: the balance is close to the credit limit | |
partner_credit_exhausted |
Partners: the credit limit is exhausted |
Notifications are deleted after 30 days.
List Notifications
GET /api/v1/user/notifications
| Query param | Type | Description |
|---|---|---|
| unread? | 1 |
Only unread |
| limit? | integer | 1–100. Default 30 |
Returns the newest notifications and the total unread count:
{
"items": [
{
"uuid": "0199b3cc-0000-7000-8000-000000000001",
"type": "project_invitation",
"payload": {
"role_uuid": "0198e7a0-0000-7000-8000-0000000000a2",
"role_name": "Manager",
"project_name": "Acme Windows",
"invited_by": "0198e7aa-91f0-7c22-a4d1-0f9e8d7c6b5a"
},
"status": "pending",
"project_uuid": "0198e7a0-0000-7000-8000-000000000001",
"project_name": "Acme Windows",
"entity_type": null,
"entity_uuid": null,
"read_at": null,
"resolved_at": null,
"created_at": "2026-10-01T08:00:00.000Z"
}
],
"unread_count": 1
}
Mark All Notifications Read
PATCH /api/v1/user/notifications with body {"mark_all_read": true}. 204 No Content.
Mark Notification Read
PATCH /api/v1/user/notifications/{notification.uuid} with body {"read": true}, or {"read": false} to mark it
unread. 204 No Content.
Dismiss Notification
DELETE /api/v1/user/notifications/{notification.uuid}. 204 No Content.
Answer Notification
POST /api/v1/user/notifications/{notification.uuid}/actions
Accepts or rejects an actionable notification. Accepting a project_invitation makes the user a member of the project
with the invited role.
| Field | Type | Description |
|---|---|---|
| action | string | accept or reject |
200 OK:
{
"status": "accepted"
}
Errors
| Status | Code | When |
|---|---|---|
| 400 | REQ_VALIDATION_FAILED |
The body does not match the schema; the notification is not actionable; the invited role was deleted |
| 400 | REQ_NO_DATA_PROVIDED |
Modify Current User: the body has no fields |
| 403 | AUTH_INSUFFICIENT_SCOPE |
The token lacks identify |
| 403 | AUTH_TRUSTED_CLIENT_REQUIRED |
Modify Current User: the body contains password |
| 403 | AUTH_NO_ACCESS |
Disconnect Account: it is the last way to sign in |
| 403 | BILL_SUBSCRIPTION_EXPIRED |
Accepting an invitation: the project owner has no active subscription |
| 403 | LIMIT_MEMBER_COUNT_REACHED |
Accepting an invitation: the project is full |
| 404 | RES_NOT_FOUND |
The notification, provider link or invited project does not exist |
| 409 | RES_ALREADY_EXISTS |
The notification was already answered, or the user is already a member |