> For the complete documentation index, see [llms.txt](https://navixy.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://navixy.com/docs/navixy-api/user-api/resources/commons/user.md).

# User

Authenticating, reading who the session belongs to, and ending it.

A user is an account on the Navixy platform. The operations here cover its life cycle at the edges an integration touches: turning credentials into a session, reading who that session belongs to and what their plan allows, and ending it.

Everything a user owns has its own page: [settings](/docs/navixy-api/user-api/resources/commons/user/settings.md), [password](/docs/navixy-api/user-api/resources/commons/user/password.md), [sessions](/docs/navixy-api/user-api/resources/commons/user/session.md), [personal info](/docs/navixy-api/user-api/resources/commons/user/personal_info.md), and the [audit log](/docs/navixy-api/user-api/resources/commons/user/audit.md). [Sub-users](/docs/navixy-api/user-api/resources/commons/subuser.md) are separate accounts under this one.

## User object

## The UserInfo object

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"components":{"schemas":{"UserInfo":{"type":"object","description":"The current user. Address and legal fields are present but empty when never set.","properties":{"id":{"type":"integer","description":"User identifier."},"login":{"type":"string","description":"User's login, usually an email address."},"title":{"type":"string","description":"Display name."},"first_name":{"type":"string","description":"Contact person first name."},"middle_name":{"type":"string","description":"Contact person middle name."},"last_name":{"type":"string","description":"Contact person last name."},"legal_name":{"type":"string","description":"Optional. A juridical name."},"phone":{"type":"string","description":"Contact phone."},"creation_date":{"type":"string","description":"When the account was created."},"balance":{"type":"number","description":"Current account balance. A decimal, returned with four fractional digits."},"bonus":{"type":"number","description":"Current bonus balance. A decimal, returned with four fractional digits."},"locale":{"type":"string","description":"Locale code."},"demo":{"type":"boolean","description":"Whether this is a demo account."},"verified":{"type":"boolean","description":"Whether the account email is verified."},"phone_verified":{"type":"boolean","description":"Whether the account phone is verified."},"legal_type":{"type":"string","description":"Legal type of the user.","enum":["legal_entity","sole_trader","individual"]},"default_geocoder":{"type":["string","null"],"description":"Preferred geocoder."},"route_provider":{"type":["string","null"],"description":"Preferred route provider."},"time_zone":{"type":"string","description":"ISO timezone ID."},"measurement_system":{"type":"string","description":"Measurement system."},"date_format":{"type":["string","null"],"description":"Date display format."},"hour_mode":{"type":["string","null"],"description":"Clock format."},"default_security_group_id":{"type":["integer","null"],"description":"Identifier of the security group new sub-users join by default."},"tin":{"type":"string","description":"Taxpayer identification number."},"iec":{"type":"string","description":"Industrial Enterprises Classifier, also known as KPP. Used in Russia."},"post_country":{"type":"string","description":"Country part of the post address."},"post_region":{"type":"string","description":"Region part of the post address."},"post_index":{"type":"string","description":"Index part of the post address."},"post_city":{"type":"string","description":"City part of the post address."},"post_street_address":{"type":"string","description":"Street part of the post address."},"registered_country":{"type":"string","description":"Country part of the registered address."},"registered_region":{"type":"string","description":"Region part of the registered address."},"registered_index":{"type":"string","description":"Index part of the registered address."},"registered_city":{"type":"string","description":"City part of the registered address."},"registered_street_address":{"type":"string","description":"Street part of the registered address."}}}}}}
```

## The TariffRestrictions object

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"components":{"schemas":{"TariffRestrictions":{"type":"object","description":"Limits imposed by the user's tariff.","properties":{"allowed_maps":{"type":"array","description":"Map types the tariff permits.","items":{"type":"string"}}}}}}}
```

## The PaasSettings object

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"components":{"schemas":{"PaasSettings":{"type":"object","description":"Settings of the platform the user belongs to: branding, maps, providers, password policy, and registration behaviour. The same structure the Admin Panel API reads and writes through its service settings operations, and documented in full there.","additionalProperties":true,"properties":{"domain":{"type":"string","description":"Platform domain."},"service_title":{"type":"string","description":"Platform display name."},"locale":{"type":"string","description":"Default locale."},"currency":{"type":"string","description":"Currency code."},"maps":{"type":"array","description":"Map types the platform offers.","items":{"type":"string"}},"has_https":{"type":"boolean","description":"Whether the platform serves HTTPS."},"allow_registration":{"type":"boolean","description":"Whether self-registration is enabled."},"gis_package":{"type":"string","description":"Active GIS package, which determines which user settings fields are returned."},"password_policy":{"type":"object","description":"Rules a new password must satisfy.","properties":{"min_length":{"type":"integer","description":"Minimum length."},"max_length":{"type":"integer","description":"Maximum length."},"special_chars":{"type":"string","description":"Characters that count as special."},"min_special_chars_count":{"type":"integer","description":"Minimum number of special characters."},"min_digits_count":{"type":"integer","description":"Minimum number of digits."},"min_uppercase_count":{"type":"integer","description":"Minimum number of uppercase letters."},"min_lowercase_count":{"type":"integer","description":"Minimum number of lowercase letters."}}}}}}}}
```

Definitions the response refers to but does not repeat:

* `paas_settings` - object. The same as `settings` in the [`dealer/get_ui_config` response](/docs/navixy-api/user-api/resources/commons/dealer.md#post-dealer-get_ui_config).
* `user_info.master` - object. Returned only when the current user is a sub-user. Its fields mean the same as in `user_info`, but describe the master account.
* `features` - string array. The [dealer features](/docs/navixy-api/user-api/resources/commons/dealer.md#dealer-features) that are enabled.
* `privileges.rights` - string array. The rights granted to a sub-user, described in [security group rights](/docs/navixy-api/user-api/resources/commons/subuser/security_group.md#security-group-rights).
* `user_menu` - a [menu preset](/docs/navixy-api/panel-api/resources/user/preset.md#menu-preset). Its `account`, `main`, `applications`, and `footer.items` entries are [menu item](/docs/navixy-api/panel-api/resources/user/preset.md#menu-item) arrays.
* `tariff_restrictions` - the tariff restrictions object, which [`user/get_tariff_restrictions`](#post-user-get_tariff_restrictions) also returns on its own.
* `hide_device_id` - boolean. `true` when the web interface hides device IMEIs from this user. It resolves to the user's own value, or to `default_hide_device_id` in the platform's [service settings](/docs/navixy-api/panel-api/resources/dealer/settings/service.md) when the user has none of their own. A sub-user always gets the value of their master account.

## API actions

API base path: `/user`.

Operations that list no errors of their own return only the [general error codes](/docs/navixy-api/general/errors.md#error-codes).

***

Authenticating needs no session of its own, and is available at the `UNAUTHORIZED` access level.

{% hint style="info" %}
Prefer an [API key](/docs/navixy-api/user-api/resources/commons/api-keys.md) to a user session hash for anything long-lived. See [Platform authentication](/docs/navixy-api/user-api/authentication.md) for how to obtain and send one.
{% endhint %}

When multi-factor authentication is enabled, the response carries `type: "second_factor_required"` and a hash usable only for the [authentication code](/docs/navixy-api/user-api/resources/commons/user/auth.md) operations until a code is verified.

## Authenticate user

> Exchange a login and password for a session hash. Requires no credential of its own, and accepts no existing session.\
> \
> The returned hash is what the \`Authorization: NVX \<hash>\` header carries on subsequent calls. An API key may be used instead of a session hash on most operations, but a small number accept a session hash only. See the operation descriptions.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Users","description":"Operations for authenticating a user, managing their sessions, reading and updating their settings and personal information, reading audit records, and registering custom applications. All resources under the /user/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[],"paths":{"/user/auth":{"post":{"tags":["Users"],"summary":"Authenticate user","description":"Exchange a login and password for a session hash. Requires no credential of its own, and accepts no existing session.\n\nThe returned hash is what the `Authorization: NVX <hash>` header carries on subsequent calls. An API key may be used instead of a session hash on most operations, but a small number accept a session hash only. See the operation descriptions.","operationId":"userAuth","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"login":{"type":"string","description":"User email as login, or a demo login."},"password":{"type":"string","description":"User's password. 1 to 40 printable characters.","minLength":1,"maxLength":40},"dealer_id":{"type":"integer","description":"Optional. If specified, the API checks that the user belongs to this dealer and returns error 102 if not."}},"required":["login","password"]}}}},"responses":{"200":{"description":"A new session, or a challenge when a second factor is required","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"type":{"type":"string","description":"Which outcome this is. `authenticated` means the session is ready to use. `second_factor_required` means multi-factor authentication is enabled and the returned hash is an MFA session, usable only for the `user/auth/code/*` operations until a code is verified.","enum":["authenticated","second_factor_required"]},"factor_type":{"type":"string","description":"Which second factor is in use. Present only when `type` is `second_factor_required`. Only `email` is available at the moment.","enum":["email"]},"hash":{"type":"string","description":"Session hash to send in the `Authorization` header. When `type` is `second_factor_required` it is an MFA session and is accepted only by the `user/auth/code/*` operations."}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Access denied, error code 11, when the dealer is blocked. Error codes 102 wrong login or password, 103 user not activated, 104 logins limit exceeded, and 105 login attempts limit exceeded return the default 400.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}},"components":{"responses":{"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}}}
```

#### Errors

These errors come in addition to the [general error codes](/docs/navixy-api/general/errors.md#error-codes):

* 11 - Access denied, when the dealer is blocked.
* 102 - Wrong login or password.
* 103 - User not activated.
* 104 - Logins limit exceeded. Reuse an existing session instead, see [`user/session/renew`](/docs/navixy-api/user-api/resources/commons/user/session.md#post-user-session-renew).
* 105 - Login attempts limit exceeded. Try again later.

***

Activation takes the session hash from the activation link emailed to the user, and works only for master users.

{% hint style="warning" %}
This operation accepts **only** the session hash from a registration email. Any other hash returns error 4, "User or API key not found or session ended". The only other thing that hash can do is create, read, and delete API keys.
{% endhint %}

## Activate user

> Activate the current user account.\
> \
> \*\*Requires an activation session\*\*, so an ordinary session hash or API key cannot call this operation. Also requires the \`admin\` right.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Users","description":"Operations for authenticating a user, managing their sessions, reading and updating their settings and personal information, reading audit records, and registering custom applications. All resources under the /user/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","description":"Either a user session hash or an API key, with the \"NVX \" prefix, for example \"NVX 22eac1c27af4be7b9d04da2ce1af111b\". Obtain a session hash from the userAuth operation, or create an API key from the API keys operations. A small number of operations accept a session hash only and reject an API key with error code 4; each says so in its description.","name":"Authorization","in":"header"}},"responses":{"OK":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true}}}}}},"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}},"paths":{"/user/activate":{"post":{"tags":["Users"],"summary":"Activate user","description":"Activate the current user account.\n\n**Requires an activation session**, so an ordinary session hash or API key cannot call this operation. Also requires the `admin` right.","operationId":"userActivate","responses":{"200":{"description":"Account activated","$ref":"#/components/responses/OK"},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Operation not permitted, error code 13: the caller lacks the `admin` right.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

***

Resending an activation link needs no session of its own, and is available at the `UNAUTHORIZED` access level.

## Resend activation email

> Send the account activation email again.\
> \
> Requires no credential. A session may be supplied and is used if valid, but is not required.\
> \
> Also accepts GET with the same parameters as query-string values.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Users","description":"Operations for authenticating a user, managing their sessions, reading and updating their settings and personal information, reading audit records, and registering custom applications. All resources under the /user/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[],"paths":{"/user/resend_activation":{"post":{"tags":["Users"],"summary":"Resend activation email","description":"Send the account activation email again.\n\nRequires no credential. A session may be supplied and is used if valid, but is not required.\n\nAlso accepts GET with the same parameters as query-string values.","operationId":"userResendActivation","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"login":{"type":"string","description":"The account's login."}},"required":["login"]}}}},"responses":{"200":{"description":"Activation email sent","$ref":"#/components/responses/OK"},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"403":{"description":"Error code 265 already done, when the account is already activated and verified. Error code 264 timeout not reached, when the previous activation link was generated less than 5 minutes ago, or another server-configured timeout. The 264 body adds `timeout` and `remainder`, both ISO 8601 durations, giving the configured interval and the time left before the next attempt.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}},"components":{"responses":{"OK":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true}}}}}},"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}}}
```

#### Errors

These errors come in addition to the [general error codes](/docs/navixy-api/general/errors.md#error-codes):

* 201 - Not found in the database, when no user has the given login.
* 209 - Failed sending email.
* 264 - Timeout not reached, when the previous activation link was generated less than 5 minutes ago, or within whatever timeout the server is configured with.
* 265 - Already done, when the account is already activated.

***

## Get user info

> Return the current user, the platform settings that apply to them, their tariff restrictions, granted rights, enabled features, and menu.\
> \
> Also accepts GET with the same parameters as query-string values.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Users","description":"Operations for authenticating a user, managing their sessions, reading and updating their settings and personal information, reading audit records, and registering custom applications. All resources under the /user/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","description":"Either a user session hash or an API key, with the \"NVX \" prefix, for example \"NVX 22eac1c27af4be7b9d04da2ce1af111b\". Obtain a session hash from the userAuth operation, or create an API key from the API keys operations. A small number of operations accept a session hash only and reject an API key with error code 4; each says so in its description.","name":"Authorization","in":"header"}},"schemas":{"PaasSettings":{"type":"object","description":"Settings of the platform the user belongs to: branding, maps, providers, password policy, and registration behaviour. The same structure the Admin Panel API reads and writes through its service settings operations, and documented in full there.","additionalProperties":true,"properties":{"domain":{"type":"string","description":"Platform domain."},"service_title":{"type":"string","description":"Platform display name."},"locale":{"type":"string","description":"Default locale."},"currency":{"type":"string","description":"Currency code."},"maps":{"type":"array","description":"Map types the platform offers.","items":{"type":"string"}},"has_https":{"type":"boolean","description":"Whether the platform serves HTTPS."},"allow_registration":{"type":"boolean","description":"Whether self-registration is enabled."},"gis_package":{"type":"string","description":"Active GIS package, which determines which user settings fields are returned."},"password_policy":{"type":"object","description":"Rules a new password must satisfy.","properties":{"min_length":{"type":"integer","description":"Minimum length."},"max_length":{"type":"integer","description":"Maximum length."},"special_chars":{"type":"string","description":"Characters that count as special."},"min_special_chars_count":{"type":"integer","description":"Minimum number of special characters."},"min_digits_count":{"type":"integer","description":"Minimum number of digits."},"min_uppercase_count":{"type":"integer","description":"Minimum number of uppercase letters."},"min_lowercase_count":{"type":"integer","description":"Minimum number of lowercase letters."}}}}},"UserInfo":{"type":"object","description":"The current user. Address and legal fields are present but empty when never set.","properties":{"id":{"type":"integer","description":"User identifier."},"login":{"type":"string","description":"User's login, usually an email address."},"title":{"type":"string","description":"Display name."},"first_name":{"type":"string","description":"Contact person first name."},"middle_name":{"type":"string","description":"Contact person middle name."},"last_name":{"type":"string","description":"Contact person last name."},"legal_name":{"type":"string","description":"Optional. A juridical name."},"phone":{"type":"string","description":"Contact phone."},"creation_date":{"type":"string","description":"When the account was created."},"balance":{"type":"number","description":"Current account balance. A decimal, returned with four fractional digits."},"bonus":{"type":"number","description":"Current bonus balance. A decimal, returned with four fractional digits."},"locale":{"type":"string","description":"Locale code."},"demo":{"type":"boolean","description":"Whether this is a demo account."},"verified":{"type":"boolean","description":"Whether the account email is verified."},"phone_verified":{"type":"boolean","description":"Whether the account phone is verified."},"legal_type":{"type":"string","description":"Legal type of the user.","enum":["legal_entity","sole_trader","individual"]},"default_geocoder":{"type":["string","null"],"description":"Preferred geocoder."},"route_provider":{"type":["string","null"],"description":"Preferred route provider."},"time_zone":{"type":"string","description":"ISO timezone ID."},"measurement_system":{"type":"string","description":"Measurement system."},"date_format":{"type":["string","null"],"description":"Date display format."},"hour_mode":{"type":["string","null"],"description":"Clock format."},"default_security_group_id":{"type":["integer","null"],"description":"Identifier of the security group new sub-users join by default."},"tin":{"type":"string","description":"Taxpayer identification number."},"iec":{"type":"string","description":"Industrial Enterprises Classifier, also known as KPP. Used in Russia."},"post_country":{"type":"string","description":"Country part of the post address."},"post_region":{"type":"string","description":"Region part of the post address."},"post_index":{"type":"string","description":"Index part of the post address."},"post_city":{"type":"string","description":"City part of the post address."},"post_street_address":{"type":"string","description":"Street part of the post address."},"registered_country":{"type":"string","description":"Country part of the registered address."},"registered_region":{"type":"string","description":"Region part of the registered address."},"registered_index":{"type":"string","description":"Index part of the registered address."},"registered_city":{"type":"string","description":"City part of the registered address."},"registered_street_address":{"type":"string","description":"Street part of the registered address."}}},"TariffRestrictions":{"type":"object","description":"Limits imposed by the user's tariff.","properties":{"allowed_maps":{"type":"array","description":"Map types the tariff permits.","items":{"type":"string"}}}},"UserMenu":{"type":"object","description":"The current user's menu. Each section is a list of menu items, described on the Admin Panel menu preset page.","properties":{"title":{"type":["string","null"],"description":"Preset title, or a localisation key such as `menu-editor.default-preset`."},"account":{"type":"array","description":"Menu items for account management.","items":{"type":"object","additionalProperties":true}},"main":{"type":"array","description":"Menu items for the main navigation.","items":{"type":"object","additionalProperties":true}},"applications":{"type":"array","description":"Menu items for applications.","items":{"type":"object","additionalProperties":true}},"footer":{"type":"object","description":"Footer group.","properties":{"title":{"type":["string","null"],"description":"Footer title."},"items":{"type":"array","description":"Menu items in the footer.","items":{"type":"object","additionalProperties":true}}}}}}},"responses":{"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}},"paths":{"/user/get_info":{"post":{"tags":["Users"],"summary":"Get user info","description":"Return the current user, the platform settings that apply to them, their tariff restrictions, granted rights, enabled features, and menu.\n\nAlso accepts GET with the same parameters as query-string values.","operationId":"userGetInfo","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"application":{"type":"string","description":"Optional. If specified, the response includes a description of that application's custom menu."}}}}}},"responses":{"200":{"description":"Current user and platform information","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"paas_id":{"type":"integer","description":"Identifier of the platform the user belongs to."},"paas_settings":{"$ref":"#/components/schemas/PaasSettings"},"user_info":{"$ref":"#/components/schemas/UserInfo"},"tariff_restrictions":{"$ref":"#/components/schemas/TariffRestrictions"},"privileges":{"type":"object","description":"Rights granted to the current user.","properties":{"rights":{"type":"array","description":"Sub-user right names held by the caller.","items":{"type":"string"}}}},"features":{"type":"array","description":"Names of features enabled for the user.","items":{"type":"string"}},"menu":{"type":["object","null"],"description":"Deprecated menu structure. Null on current platforms."},"user_menu":{"$ref":"#/components/schemas/UserMenu"},"premium_gis":{"type":"boolean","description":"Whether the premium GIS package is active."},"hide_device_id":{"type":"boolean","description":"Whether the web interface hides device IMEIs from this user. For a sub-user, the value of their master account."}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

***

## Get tariff restrictions

> Return the restrictions the user's tariff imposes.\
> \
> \*\*Requires a weblocator session.\*\* Also accepts GET with the same parameters as query-string values.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Users","description":"Operations for authenticating a user, managing their sessions, reading and updating their settings and personal information, reading audit records, and registering custom applications. All resources under the /user/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","description":"Either a user session hash or an API key, with the \"NVX \" prefix, for example \"NVX 22eac1c27af4be7b9d04da2ce1af111b\". Obtain a session hash from the userAuth operation, or create an API key from the API keys operations. A small number of operations accept a session hash only and reject an API key with error code 4; each says so in its description.","name":"Authorization","in":"header"}},"schemas":{"TariffRestrictions":{"type":"object","description":"Limits imposed by the user's tariff.","properties":{"allowed_maps":{"type":"array","description":"Map types the tariff permits.","items":{"type":"string"}}}}},"responses":{"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}},"paths":{"/user/get_tariff_restrictions":{"post":{"tags":["Users"],"summary":"Get tariff restrictions","description":"Return the restrictions the user's tariff imposes.\n\n**Requires a weblocator session.** Also accepts GET with the same parameters as query-string values.","operationId":"userGetTariffRestrictions","responses":{"200":{"description":"Tariff restrictions","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true},"value":{"$ref":"#/components/schemas/TariffRestrictions"}}}}}},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

***

Logging out works only with a standard user session. Calling it with an API key returns error 4, "User or API key not found or session ended", even though the key itself is valid.

## Log out

> End the current session.\
> \
> \*\*Requires a session hash. An API key is rejected\*\* with error code 4, "User or API key not found or session ended", which is misleading: the key is valid, but this operation accepts standard sessions only.\
> \
> Also accepts GET with the same parameters as query-string values.

```json
{"openapi":"3.1.0","info":{"title":"Navixy Platform API","version":"1.0.0"},"tags":[{"name":"Users","description":"Operations for authenticating a user, managing their sessions, reading and updating their settings and personal information, reading audit records, and registering custom applications. All resources under the /user/ path."}],"servers":[{"url":"https://api.eu.navixy.com/v2","description":"Navixy production server on European platform"},{"url":"https://api.us.navixy.com/v2","description":"Navixy production server on American platform"},{"url":"https://api.me.navixy.com/v2","description":"Navixy production server on Middle East platform"}],"security":[{"api_key":[]}],"components":{"securitySchemes":{"api_key":{"type":"apiKey","description":"Either a user session hash or an API key, with the \"NVX \" prefix, for example \"NVX 22eac1c27af4be7b9d04da2ce1af111b\". Obtain a session hash from the userAuth operation, or create an API key from the API keys operations. A small number of operations accept a session hash only and reject an API key with error code 4; each says so in its description.","name":"Authorization","in":"header"}},"responses":{"OK":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"`true` if request finished successfully.","readOnly":true}}}}}},"ResponseError":{"description":"Error response object","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","description":"Always false."},"status":{"type":"object","description":"Error status. Present only when an error occurred.","properties":{"code":{"type":"integer","description":"An error code in this API, not an HTTP code."},"description":{"type":"string","description":"An error description."}}},"errors":{"type":"array","description":"Per-parameter detail, returned with validation failures such as error code 7. A parameter name here may be an internal field name rather than the documented parameter name.","items":{"type":"object","properties":{"parameter":{"type":"string","description":"Name of the parameter that failed validation."},"error":{"type":"string","description":"What was wrong with it."}}}}}}}}}}},"paths":{"/user/logout":{"post":{"tags":["Users"],"summary":"Log out","description":"End the current session.\n\n**Requires a session hash. An API key is rejected** with error code 4, \"User or API key not found or session ended\", which is misleading: the key is valid, but this operation accepts standard sessions only.\n\nAlso accepts GET with the same parameters as query-string values.","operationId":"userLogout","responses":{"200":{"description":"Session ended","$ref":"#/components/responses/OK"},"400":{"description":"Bad request. The response body carries the API-level error code in `status.code`. Validation failures also include an `errors` array naming each offending parameter.","$ref":"#/components/responses/ResponseError"},"default":{"$ref":"#/components/responses/ResponseError"}}}}}}
```

## More in this section

#### User password

| Endpoint                                                                                                          | Method | What it does    |
| ----------------------------------------------------------------------------------------------------------------- | ------ | --------------- |
| [`/user/password/change`](/docs/navixy-api/user-api/resources/commons/user/password.md#post-user-password-change) | POST   | Change password |
| [`/user/password/set`](/docs/navixy-api/user-api/resources/commons/user/password.md#post-user-password-set)       | POST   | Set password    |

#### User personal info

| Endpoint                                                                                                                         | Method | What it does         |
| -------------------------------------------------------------------------------------------------------------------------------- | ------ | -------------------- |
| [`/user/personal_info/update`](/docs/navixy-api/user-api/resources/commons/user/personal_info.md#post-user-personal_info-update) | POST   | Update personal info |

#### Audit

| Endpoint                                                                                                   | Method | What it does         |
| ---------------------------------------------------------------------------------------------------------- | ------ | -------------------- |
| [`/user/audit/checkin`](/docs/navixy-api/user-api/resources/commons/user/audit.md#post-user-audit-checkin) | POST   | Record user check-in |

#### User audit log

| Endpoint                                                                                                               | Method | What it does           |
| ---------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------- |
| [`/user/audit/log/list`](/docs/navixy-api/user-api/resources/commons/user/audit/audit_log.md#post-user-audit-log-list) | POST   | List audit log records |

#### User authentication code

| Endpoint                                                                                                        | Method | What it does     |
| --------------------------------------------------------------------------------------------------------------- | ------ | ---------------- |
| [`/user/auth/code/verify`](/docs/navixy-api/user-api/resources/commons/user/auth.md#post-user-auth-code-verify) | POST   | Verify auth code |
| [`/user/auth/code/resend`](/docs/navixy-api/user-api/resources/commons/user/auth.md#post-user-auth-code-resend) | POST   | Resend auth code |

#### Session

| Endpoint                                                                                                     | Method | What it does  |
| ------------------------------------------------------------------------------------------------------------ | ------ | ------------- |
| [`/user/session/renew`](/docs/navixy-api/user-api/resources/commons/user/session.md#post-user-session-renew) | POST   | Renew session |

#### Delivery session

| Endpoint                                                                                                                                  | Method | What it does            |
| ----------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----------------------- |
| [`/user/session/delivery/create`](/docs/navixy-api/user-api/resources/commons/user/session/delivery.md#post-user-session-delivery-create) | POST   | Create delivery session |
| [`/user/session/delivery/read`](/docs/navixy-api/user-api/resources/commons/user/session/delivery.md#post-user-session-delivery-read)     | POST   | Read delivery session   |

#### Push token

| Endpoint                                                                                                                                        | Method | What it does      |
| ----------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ----------------- |
| [`/user/session/push_token/bind`](/docs/navixy-api/user-api/resources/commons/user/session/push_token.md#post-user-session-push_token-bind)     | POST   | Bind push token   |
| [`/user/session/push_token/delete`](/docs/navixy-api/user-api/resources/commons/user/session/push_token.md#post-user-session-push_token-delete) | POST   | Delete push token |

#### Settings

| Endpoint                                                                                                                                    | Method | What it does                 |
| ------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ---------------------------- |
| [`/user/settings/read`](/docs/navixy-api/user-api/resources/commons/user/settings.md#post-user-settings-read)                               | POST   | Read user settings           |
| [`/user/settings/update`](/docs/navixy-api/user-api/resources/commons/user/settings.md#post-user-settings-update)                           | POST   | Update user settings         |
| [`/user/settings/file_storage/update`](/docs/navixy-api/user-api/resources/commons/user/settings.md#post-user-settings-file_storage-update) | POST   | Update file storage settings |

#### User UI settings

| Endpoint                                                                                                                   | Method | What it does      |
| -------------------------------------------------------------------------------------------------------------------------- | ------ | ----------------- |
| [`/user/settings/ui/read`](/docs/navixy-api/user-api/resources/commons/user/settings/ui.md#post-user-settings-ui-read)     | POST   | Read UI setting   |
| [`/user/settings/ui/update`](/docs/navixy-api/user-api/resources/commons/user/settings/ui.md#post-user-settings-ui-update) | POST   | Update UI setting |

#### User applications

| Endpoint                                                                                                                              | Method | What it does                    |
| ------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------- |
| [`/user/application/list`](/docs/navixy-api/user-api/resources/commons/user/applications.md#post-user-application-list)               | POST   | List user applications          |
| [`/user/application/create`](/docs/navixy-api/user-api/resources/commons/user/applications.md#post-user-application-create)           | POST   | Create user application         |
| [`/user/application/update`](/docs/navixy-api/user-api/resources/commons/user/applications.md#post-user-application-update)           | POST   | Update user application         |
| [`/user/application/delete`](/docs/navixy-api/user-api/resources/commons/user/applications.md#post-user-application-delete)           | POST   | Delete user application         |
| [`/user/application/enabled/set`](/docs/navixy-api/user-api/resources/commons/user/applications.md#post-user-application-enabled-set) | POST   | Show or hide a user application |


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://navixy.com/docs/navixy-api/user-api/resources/commons/user.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
