Users, Groups, and Access Management
This page explains how to work with users, groups, and roles using the YouTrack REST API and the Hub REST API, and when to use each.
YouTrack and Hub Services
Any YouTrack instance as a product contains two services:
YouTrack service — the issue tracker itself.
Hub service — the authorization and authentication service that also manages user accounts and everything that relates to access management.
YouTrack REST API vs Hub REST API
Starting with YouTrack 2026.1, YouTrack REST API supports user, group, and access management operations directly. Hub REST API remains fully supported and is not going away — it is now an alternative approach rather than the only option.
Use YouTrack REST API when:
You are on YouTrack 2026.1 or later and want to keep all your API calls within a single service.
You are already working with the YouTrack REST API and want to avoid switching to a separate Hub endpoint.
Use Hub REST API when:
You are on a YouTrack version earlier than 2026.1.
You need to work with credentials, tokens, 2FA settings, keys, or certificates.
The following table maps entities to the corresponding endpoints in each API:
Entity | YouTrack REST API (2026.1+) Endpoints | Hub REST API Endpoints |
|---|---|---|
Users |
|
|
Groups |
|
|
Roles |
| |
Roles assigned to specific users or groups |
| |
Permissions |
| |
Organizations |
|
Find a YouTrack User in Hub
When you need to perform a user management operation via Hub REST API, you first need to find the Hub user account that corresponds to the target YouTrack user profile. Follow the steps below.
In general, this procedure contains two steps:
Get the key attributes of the target YouTrack user:
login,email,ringId. You can use any of these attributes to find the required user account in Hub.You can use any of the following endpoints:
<YouTrack_REST_API_URL>/users?fields=login,email,name,ringId<YouTrack_REST_API_URL>/users/{login}?fields=login,email,name,ringId, if you know the login of the target user.<YouTrack_REST_API_URL>/users/{id}?fields=login,email,name,ringId, if you already know the entity ID of the target user.
To find the target user account in Hub, you need to get the list of users and filter it using the
queryrequest parameter with the name of the Hub entity attribute and the value of the relevant YouTrack entity attribute:YouTrack entity attribute
Hub entity attribute
loginloginemailemailringIdidTo get the list of users in Hub, use the following endpoint:
<Hub_REST_API_URL>/users?query=[login:user_login|email:user_email|id:ringId_value]
Sample procedure
Here's a list of sample calls to illustrate the procedure.
To start, let's get the key attributes of a user with the login "jane.doe":
In response we get the following JSON object:
Now, let's find this user account in Hub. For the sample purpose we use all three variants of the query. In real life, you can use any of them. Using the ringId gives the most reliable results.
Filter by the
ringIdvalue:curl --location --request GET 'https://example.youtrack.cloud/hub/api/rest/users?query=id:90704ebe-c211-4906-a328-4f16ca82a5ea&fields=login,id,name,profile(email)' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer perm:cm9vdA==.QWRtaW4gUmVzdCBBUEkgRG9jcw==.OcsxZrnZnBZhyWaGE0Uz1OiA5bRVNt'Filter by the
loginvalue:curl --location --request GET 'https://example.youtrack.cloud/hub/api/rest/users?query=login:jane.doe&fields=login,id,name,profile(email)' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer perm:cm9vdA==.QWRtaW4gUmVzdCBBUEkgRG9jcw==.OcsxZrnZnBZhyWaGE0Uz1OiA5bRVNt'Filter by the
emailvalue:curl --location --request GET 'https://example.youtrack.cloud/hub/api/rest/users?query=email:jane.doe@example.com&fields=login,id,name,profile(email)' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer perm:cm9vdA==.QWRtaW4gUmVzdCBBUEkgRG9jcw==.OcsxZrnZnBZhyWaGE0Uz1OiA5bRVNt'
All these requests produce the same result, returning the following data in the response: