API пользователей

Note

Starting in Grafana 13, /api endpoints are being deprecated in favor of the /apis route. Note that while Grafana is working on migrating existing APIs, currently there may not be an exact match to the legacy API you’re using.

This change doesn’t disrupt or break your current setup. Legacy APIs are not being disabled and remain fully accessible and operative, but /api routes will no longer be updated.

To learn more refer to the new API structure in Grafana.

Caution

Вы не можете аутентифицироваться в HTTP API пользователей с помощью токенов сервисных учётных записей. Сервисные учётные записи ограничены организацией и ролью в организации. Им нельзя предоставить права администратора сервера Grafana.

В качестве альтернативы вы можете использовать HTTP API организаций с токенами сервисных учётных записей для управления пользователями в конкретной организации

Чтобы использовать эти конечные точки API, необходимо применять basic-аутентификацию, и пользователь Grafana должен иметь право администратора сервера Grafana.

Пользователь admin, с которым Grafana создаётся по умолчанию, имеет права на использование этих конечных точек API.

Клиентам Grafana Cloud см. HTTP API организаций для поиска пользователей с ролью администратора организации.

Если вы используете Grafana Enterprise, для некоторых конечных точек потребуются определённые права. Дополнительные сведения см. в разделе Права управления доступом на основе ролей.

Поиск пользователей

GET /api/users?perpage=10&page=1&sort=login-asc,email-asc

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
users:read global.users:*

Пример запроса:

http
GET /api/users HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=

Значение по умолчанию для параметра perpage — 1000, а для параметра page — 1. Требует basic-аутентификации и того, чтобы аутентифицированный пользователь был администратором Grafana.

Параметр sort — необязательный разделённый запятыми список опций для упорядочивания результатов поиска. Допустимые значения для фильтра sort: login-asc, login-desc, email-asc, email-desc, name-asc, name-desc, lastSeenAtAge-asc, lastSeenAtAge-desc. По умолчанию, если sort не указан, список пользователей упорядочивается по login, email в возрастающем порядке.

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

[
  {
    "id": 1,
    "name": "Admin",
    "login": "admin",
    "email": "admin@mygraf.com",
    "isAdmin": true,
    "isDisabled": false,
    "lastSeenAt": "2020-04-10T20:29:27+03:00",
    "lastSeenAtAge": "2m",
    "authLabels": ["OAuth"]
  },
  {
    "id": 2,
    "name": "User",
    "login": "user",
    "email": "user@mygraf.com",
    "isAdmin": false,
    "isDisabled": false,
    "lastSeenAt": "2020-01-24T12:38:47+02:00",
    "lastSeenAtAge": "2M",
    "authLabels": []
  }
]

Поиск пользователей с постраничной выдачей

GET /api/users/search?perpage=10&page=1&query=mygraf&sort=login-asc,email-asc

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
users:read global.users:*

Пример запроса:

http
GET /api/users/search?perpage=10&page=1&query=mygraf HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=

Значение по умолчанию для параметра perpage — 1000, а для параметра page — 1. Поле totalCount в ответе можно использовать для постраничной выдачи списка пользователей. Например, если totalCount равен 100 пользователям, а параметр perpage установлен в 10, то имеется 10 страниц пользователей. Параметр query необязателен, и он вернёт результаты, в которых значение запроса содержится в одном из полей name, login или email. Значения запросов с пробелами нужно кодировать в URL, например query=Jane%20Doe.

Параметр sort — необязательный разделённый запятыми список опций для упорядочивания результатов поиска. Допустимые значения для фильтра sort: login-asc, login-desc, email-asc, email-desc, name-asc, name-desc, lastSeenAtAge-asc, lastSeenAtAge-desc. По умолчанию, если sort не указан, список пользователей упорядочивается по login, email в возрастающем порядке.

Требует basic-аутентификации и того, чтобы аутентифицированный пользователь был администратором Grafana.

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json
{
  "totalCount": 2,
  "users": [
    {
      "id": 1,
      "name": "Admin",
      "login": "admin",
      "email": "admin@mygraf.com",
      "isAdmin": true,
      "isDisabled": false,
      "lastSeenAt": "2020-04-10T20:29:27+03:00",
      "lastSeenAtAge': "2m",
      "authLabels": ["OAuth"]
    },
    {
      "id": 2,
      "name": "User",
      "login": "user",
      "email": "user@mygraf.com",
      "isAdmin": false,
      "isDisabled": false,
      "lastSeenAt": "2020-01-24T12:38:47+02:00",
      "lastSeenAtAge": "2M",
      "authLabels": []
    }
  ],
  "page": 1,
  "perPage": 10
}

Получение одного пользователя по Id

GET /api/users/:id

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
users:read global.users:*

Пример запроса:

http
GET /api/users/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=

Требует basic-аутентификации и того, чтобы аутентифицированный пользователь был администратором Grafana.

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{
  "id": "1",
  "email": "user@mygraf.com",
  "name": "admin",
  "login": "admin",
  "theme": "light",
  "orgId": 1,
  "isGrafanaAdmin": true,
  "isDisabled": true,
  "isExternal": false,
  "authLabels": [],
  "updatedAt": "2019-09-09T11:31:26+01:00",
  "createdAt": "2019-09-09T11:31:26+01:00",
  "avatarUrl": ""
}

Получение одного пользователя по имени пользователя (login) или email

GET /api/users/lookup?loginOrEmail=user@mygraf.com

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
users:read global.users:*

Пример запроса с использованием email:

http
GET /api/users/lookup?loginOrEmail=user@mygraf.com HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=

Пример запроса с использованием имени пользователя:

http
GET /api/users/lookup?loginOrEmail=admin HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=

Требует basic-аутентификации и того, чтобы аутентифицированный пользователь был администратором Grafana.

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{
  "id": 1,
  "email": "user@mygraf.com",
  "name": "admin",
  "login": "admin",
  "theme": "light",
  "orgId": 1,
  "isGrafanaAdmin": true,
  "isDisabled": false,
  "isExternal": false,
  "authLabels": null,
  "updatedAt": "2019-09-25T14:44:37+01:00",
  "createdAt": "2019-09-25T14:44:37+01:00",
  "avatarUrl":""
}

Обновление пользователя

PUT /api/users/:id

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
users:write global.users:*

Пример запроса:

http
PUT /api/users/2 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=

{
  "email":"user@mygraf.com",
  "name":"User2",
  "login":"user",
  "theme":"light"
}

Требует basic-аутентификации и того, чтобы аутентифицированный пользователь был администратором Grafana.

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{"message":"User updated"}

Получение организаций пользователя

GET /api/users/:id/orgs

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
users:read global.users:*

Пример запроса:

http
GET /api/users/1/orgs HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=

Требует basic-аутентификации и того, чтобы аутентифицированный пользователь был администратором Grafana.

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

[
  {
    "orgId":1,
    "name":"Main Org.",
    "role":"Admin"
  }
]

Получение команд пользователя

GET /api/users/:id/teams

Требуемые права

Пояснения см. в примечании во введении.

Действие Область
users:read global.users:*
teams:read teams:*

Пример запроса:

http
GET /api/users/1/teams HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=

Требует basic-аутентификации и того, чтобы аутентифицированный пользователь был администратором Grafana.

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

[
  {
    "id":1,
    "orgId":1,
    "name":"team1",
    "email":"",
    "avatarUrl":"/avatar/3fcfe295eae3bcb67a49349377428a66",
    "memberCount":1
  }
]

Пользователь

Текущий пользователь

GET /api/user

Пример запроса:

http
GET /api/user HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=

Требует basic-аутентификации.

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{
  "id":1,
  "email":"admin@mygraf.com",
  "name":"Admin",
  "login":"admin",
  "theme":"light",
  "orgId":1,
  "isGrafanaAdmin":true,
  "isDisabled":false
  "isExternal": false,
  "authLabels": [],
  "updatedAt": "2019-09-09T11:31:26+01:00",
  "createdAt": "2019-09-09T11:31:26+01:00",
  "avatarUrl": ""
}

Смена пароля

PUT /api/user/password

Меняет пароль пользователя. Требует basic-аутентификации.

Пример запроса:

http
PUT /api/user/password HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=

{
  "oldPassword": "old_password",
  "newPassword": "new_password"
}

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{"message":"User password changed"}

Смена пароля с помощью скрипта

Если вам нужно сменить пароль с помощью скрипта, вот пример смены пароля администратора с использованием curl и basic-аутентификации:

Bash
curl -X PUT -H "Content-Type: application/json" -d '{
  "oldPassword": "oldpass",
  "newPassword": "newpass",
  "confirmNew": "newpass"
}' http://admin:oldpass@<your_grafana_host>:3000/api/user/password

Переключение контекста пользователя для указанного пользователя

POST /api/users/:userId/using/:organizationId

Переключает контекст пользователя на заданную организацию. Требует basic-аутентификации и того, чтобы аутентифицированный пользователь был администратором Grafana.

Пример запроса:

http
POST /api/users/7/using/2 HTTP/1.1
Authorization: Basic YWRtaW46YWRtaW4=

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{"message":"Active organization changed"}

Переключение контекста пользователя для вошедшего пользователя

POST /api/user/using/:organizationId

Переключает контекст пользователя на заданную организацию.

Пример запроса:

http
POST /api/user/using/2 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{"message":"Active organization changed"}

Организации текущего пользователя

GET /api/user/orgs

Возвращает список всех организаций текущего пользователя. Требует basic-аутентификации.

Пример запроса:

http
GET /api/user/orgs HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Basic YWRtaW46YWRtaW4=

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

[
  {
    "orgId":1,
    "name":"Main Org.",
    "role":"Admin"
  }
]

Команды, в которых состоит текущий пользователь

GET /api/user/teams

Возвращает список всех команд, в которых состоит текущий пользователь.

Пример запроса:

http
GET /api/user/teams HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

[
  {
    "id": 1,
    "orgId": 1,
    "name": "MyTestTeam",
    "email": "",
    "avatarUrl": "\/avatar\/3f49c15916554246daa714b9bd0ee398",
    "memberCount": 1
  }
]

Добавление дашборда в избранное

POST /api/user/stars/dashboard/uid/:uid

Добавляет указанный дашборд в избранное для текущего пользователя.

Пример запроса:

http
POST /api/user/stars/dashboard/uid/BqokFhx7z HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{"message":"Dashboard starred!"}

Удаление дашборда из избранного

DELETE /api/user/stars/dashboard/uid/:uid

Удаляет отметку избранного у указанного дашборда для текущего пользователя.

Пример запроса:

http
DELETE /api/user/stars/dashboard/uid/BqokFhx7z HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{"message":"Dashboard unstarred"}

Токены аутентификации текущего пользователя

GET /api/user/auth-tokens

Возвращает список всех токенов аутентификации (устройств), с которых текущий пользователь в настоящий момент авторизован.

Пример запроса:

http
GET /api/user/auth-tokens HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

[
  {
    "id": 361,
    "isActive": true,
    "clientIp": "127.0.0.1",
    "browser": "Chrome",
    "browserVersion": "72.0",
    "os": "Linux",
    "osVersion": "",
    "device": "Other",
    "createdAt": "2019-03-05T21:22:54+01:00",
    "seenAt": "2019-03-06T19:41:06+01:00"
  },
  {
    "id": 364,
    "isActive": false,
    "clientIp": "127.0.0.1",
    "browser": "Mobile Safari",
    "browserVersion": "11.0",
    "os": "iOS",
    "osVersion": "11.0",
    "device": "iPhone",
    "createdAt": "2019-03-06T19:41:19+01:00",
    "seenAt": "2019-03-06T19:41:21+01:00"
  }
]

Отзыв токена аутентификации текущего пользователя

POST /api/user/revoke-auth-token

Отзывает указанный токен аутентификации (устройство) для текущего пользователя. Пользователь выданного токена аутентификации (устройства) больше не будет авторизован, и при следующей активности потребуется аутентификация заново.

Пример запроса:

http
POST /api/user/revoke-auth-token HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer <SERVICE_ACCOUNT_TOKEN>

{
  "authTokenId": 364
}

Пример ответа:

http
HTTP/1.1 200
Content-Type: application/json

{
  "message": "User auth token revoked"
}