2022-05-26 23:06:25 +08:00
---
aliases:
2022-12-10 00:36:04 +08:00
- ../../http_api/team/
2023-02-07 01:14:36 +08:00
canonical: /docs/grafana/latest/developers/http_api/team/
2022-05-26 23:06:25 +08:00
description: Grafana Team HTTP API
keywords:
- grafana
- http
- documentation
- api
- team
- teams
- group
Explicitly set all front matter labels in the source files (#71548)
* Set every page to have defaults of 'Enterprise' and 'Open source' labels
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Set administration pages to have of 'Cloud', 'Enterprise', and 'Open source' labels
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Set administration/enterprise-licensing pages to have 'Enterprise' labels
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Set administration/organization-management pages to have 'Enterprise' and 'Open source' labels
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Set administration/provisioning pages to have 'Enterprise' and 'Open source' labels
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Set administration/recorded-queries pages to have labels cloud,enterprise
* Set administration/roles-and-permissions/access-control pages to have labels cloud,enterprise
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Set administration/stats-and-license pages to have labels cloud,enterprise
* Set alerting pages to have labels cloud,enterprise,oss
* Set breaking-changes pages to have labels cloud,enterprise,oss
* Set dashboards pages to have labels cloud,enterprise,oss
* Set datasources pages to have labels cloud,enterprise,oss
* Set explore pages to have labels cloud,enterprise,oss
* Set fundamentals pages to have labels cloud,enterprise,oss
* Set introduction/grafana-cloud pages to have labels cloud
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Fix introduction pages products
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Set panels-visualizations pages to have labels cloud,enterprise,oss
* Set release-notes pages to have labels cloud,enterprise,oss
* Set search pages to have labels cloud,enterprise,oss
* Set setup-grafana/configure-security/audit-grafana pages to have labels cloud,enterprise
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Set setup-grafana/configure-security/configure-authentication pages to have labels cloud,enterprise,oss
* Set setup-grafana/configure-security/configure-authentication/enhanced-ldap pages to have labels cloud,enterprise
* Set setup-grafana/configure-security/configure-authentication/saml pages to have labels cloud,enterprise
* Set setup-grafana/configure-security/configure-database-encryption/encrypt-secrets-using-hashicorp-key-vault pages to have labels cloud,enterprise
* Set setup-grafana/configure-security/configure-request-security pages to have labels cloud,enterprise,oss
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Set setup-grafana/configure-security/configure-team-sync pages to have labels cloud,enterprise
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Set setup-grafana/configure-security/export-logs pages to have labels cloud,enterprise
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
* Set troubleshooting pages to have labels cloud,enterprise,oss
* Set whatsnew pages to have labels cloud,enterprise,oss
* Apply updated labels from review
Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
---------
Signed-off-by: Jack Baldry <jack.baldry@grafana.com>
Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com>
Co-authored-by: Isabel <76437239+imatwawana@users.noreply.github.com>
2023-07-18 16:10:12 +08:00
labels:
products:
- enterprise
- oss
2022-12-10 00:36:04 +08:00
title: Team HTTP API
2022-05-26 23:06:25 +08:00
---
2018-02-16 06:05:16 +08:00
# Team API
2022-02-09 20:44:38 +08:00
This API can be used to manage Teams and Team Memberships.
Access to these API endpoints is restricted as follows:
- All authenticated users are able to view details of teams they are a member of.
- Organization Admins are able to manage all teams and team members.
2018-02-16 06:05:16 +08:00
2025-03-06 20:59:08 +08:00
> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions](/docs/grafana/latest/administration/roles-and-permissions/access-control/custom-role-actions-scopes/) for more information.
2022-02-12 01:00:13 +08:00
2018-02-16 06:05:16 +08:00
## Team Search With Paging
2023-09-28 23:20:51 +08:00
`GET /api/teams/search?perpage=50&page=1&query=myteam&sort=memberCount-desc`
2018-02-16 06:05:16 +08:00
or
`GET /api/teams/search?name=myteam`
2022-05-21 03:48:52 +08:00
**Required permissions**
2022-02-12 01:00:13 +08:00
2025-03-06 20:59:08 +08:00
See note in the [introduction ](#team-api ) for an explanation.
2022-02-12 01:00:13 +08:00
| Action | Scope |
| ---------- | -------- |
| teams:read | teams:\* |
**Example Request**:
2018-02-16 06:05:16 +08:00
```http
2022-02-12 01:00:13 +08:00
GET /api/teams/search?perpage=10& page=1& query=mytestteam HTTP/1.1
2018-02-16 06:05:16 +08:00
Accept: application/json
Content-Type: application/json
2024-06-11 15:35:22 +08:00
Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt
2018-02-16 06:05:16 +08:00
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
2021-04-17 04:39:38 +08:00
{
2018-02-16 06:05:16 +08:00
"totalCount": 1,
"teams": [
{
"id": 1,
"orgId": 1,
"name": "MyTestTeam",
"email": "",
"avatarUrl": "\/avatar\/3f49c15916554246daa714b9bd0ee398",
"memberCount": 1
}
],
"page": 1,
"perPage": 1000
}
```
2022-02-12 01:00:13 +08:00
### Using the query parameter
Default value for the `perpage` parameter is `1000` and for the `page` parameter is `1` .
The `totalCount` field in the response can be used for pagination of the teams list E.g. if `totalCount` is equal to 100 teams and the `perpage` parameter is set to 10 then there are 10 pages of teams.
The `query` parameter is optional and it will return results where the query value is contained in the `name` field. Query values with spaces need to be URL encoded e.g. `query=my%20team` .
2023-09-28 23:20:51 +08:00
The `sort` param is an optional comma separated list of options to order the search result. Accepted values for the sort filter are: ` name-asc` , `name-desc` , `email-asc` , `email-desc` , `memberCount-asc` , `memberCount-desc` . By default, if `sort` is not specified, the teams list will be ordered by `name` in ascending order.
2022-02-12 01:00:13 +08:00
### Using the name parameter
The `name` parameter returns a single team if the parameter matches the `name` field.
#### Status Codes:
2018-02-16 06:05:16 +08:00
- **200** - Ok
2023-09-28 23:20:51 +08:00
- **400** - Bad Request
2018-02-16 06:05:16 +08:00
- **401** - Unauthorized
- **403** - Permission denied
2018-02-16 18:18:41 +08:00
- **404** - Team not found (if searching by name)
2018-02-16 06:05:16 +08:00
## Get Team By Id
`GET /api/teams/:id`
2022-05-21 03:48:52 +08:00
**Required permissions**
2022-02-12 01:00:13 +08:00
2025-03-06 20:59:08 +08:00
See note in the [introduction ](#team-api ) for an explanation.
2022-02-12 01:00:13 +08:00
| Action | Scope |
| ---------- | -------- |
| teams:read | teams:\* |
2018-02-16 06:05:16 +08:00
**Example Request**:
```http
GET /api/teams/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
2024-06-11 15:35:22 +08:00
Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt
2018-02-16 06:05:16 +08:00
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
{
"id": 1,
"orgId": 1,
"name": "MyTestTeam",
"email": "",
"created": "2017-12-15T10:40:45+01:00",
"updated": "2017-12-15T10:40:45+01:00"
}
```
Status Codes:
- **200** - Ok
- **401** - Unauthorized
- **403** - Permission denied
- **404** - Team not found
## Add Team
2024-11-06 20:53:48 +08:00
The Team `name` needs to be unique. `name` is required and `email` is optional.
2018-02-16 06:05:16 +08:00
`POST /api/teams`
2022-05-21 03:48:52 +08:00
**Required permissions**
2022-02-12 01:00:13 +08:00
2025-03-06 20:59:08 +08:00
See note in the [introduction ](#team-api ) for an explanation.
2022-02-12 01:00:13 +08:00
| Action | Scope |
| ------------ | ----- |
| teams:create | N/A |
2018-02-16 06:05:16 +08:00
**Example Request**:
```http
POST /api/teams HTTP/1.1
Accept: application/json
Content-Type: application/json
2024-06-11 15:35:22 +08:00
Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt
2018-02-16 06:05:16 +08:00
{
"name": "MyTestTeam",
2020-06-05 13:42:53 +08:00
"email": "email@test.com",
2018-02-16 06:05:16 +08:00
}
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
2025-01-23 19:03:56 +08:00
{"message":"Team created","teamId":2,"uid":"ceaulqadfoav4e"}
2018-02-16 06:05:16 +08:00
```
Status Codes:
- **200** - Ok
- **401** - Unauthorized
- **403** - Permission denied
- **409** - Team name is taken
## Update Team
There are two fields that can be updated for a team: `name` and `email` .
`PUT /api/teams/:id`
2022-05-21 03:48:52 +08:00
**Required permissions**
2022-02-12 01:00:13 +08:00
2025-03-06 20:59:08 +08:00
See note in the [introduction ](#team-api ) for an explanation.
2022-02-12 01:00:13 +08:00
| Action | Scope |
| ----------- | -------- |
| teams:write | teams:\* |
2018-02-16 06:05:16 +08:00
**Example Request**:
```http
PUT /api/teams/2 HTTP/1.1
Accept: application/json
Content-Type: application/json
2024-06-11 15:35:22 +08:00
Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt
2018-02-16 06:05:16 +08:00
{
"name": "MyTestTeam",
"email": "email@test.com"
}
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
{"message":"Team updated"}
```
2018-02-16 18:18:41 +08:00
Status Codes:
- **200** - Ok
- **401** - Unauthorized
- **403** - Permission denied
- **404** - Team not found
- **409** - Team name is taken
2018-02-16 06:05:16 +08:00
## Delete Team By Id
`DELETE /api/teams/:id`
2022-05-21 03:48:52 +08:00
**Required permissions**
2022-02-12 01:00:13 +08:00
2025-03-06 20:59:08 +08:00
See note in the [introduction ](#team-api ) for an explanation.
2022-02-12 01:00:13 +08:00
| Action | Scope |
| ------------ | -------- |
| teams:delete | teams:\* |
2018-02-16 06:05:16 +08:00
**Example Request**:
```http
DELETE /api/teams/2 HTTP/1.1
Accept: application/json
Content-Type: application/json
2024-06-11 15:35:22 +08:00
Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt
2018-02-16 06:05:16 +08:00
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
{"message":"Team deleted"}
```
Status Codes:
- **200** - Ok
- **401** - Unauthorized
- **403** - Permission denied
- **404** - Failed to delete Team. ID not found
## Get Team Members
`GET /api/teams/:teamId/members`
2022-05-21 03:48:52 +08:00
**Required permissions**
2022-02-12 01:00:13 +08:00
2025-03-06 20:59:08 +08:00
See note in the [introduction ](#team-api ) for an explanation.
2022-02-12 01:00:13 +08:00
| Action | Scope |
| ---------------------- | -------- |
| teams.permissions:read | teams:\* |
2018-02-16 06:05:16 +08:00
**Example Request**:
```http
GET /api/teams/1/members HTTP/1.1
Accept: application/json
Content-Type: application/json
2024-06-11 15:35:22 +08:00
Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt
2018-02-16 06:05:16 +08:00
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
[
{
"orgId": 1,
"teamId": 1,
"userId": 3,
"email": "user1@email.com",
"login": "user1",
"avatarUrl": "\/avatar\/1b3c32f6386b0185c40d359cdc733a79"
},
{
"orgId": 1,
"teamId": 1,
"userId": 2,
"email": "user2@email.com",
"login": "user2",
"avatarUrl": "\/avatar\/cad3c68da76e45d10269e8ef02f8e73e"
}
]
```
Status Codes:
- **200** - Ok
- **401** - Unauthorized
- **403** - Permission denied
## Add Team Member
`POST /api/teams/:teamId/members`
2022-05-21 03:48:52 +08:00
**Required permissions**
2022-02-12 01:00:13 +08:00
2025-03-06 20:59:08 +08:00
See note in the [introduction ](#team-api ) for an explanation.
2022-02-12 01:00:13 +08:00
| Action | Scope |
| ----------------------- | -------- |
| teams.permissions:write | teams:\* |
2018-02-16 06:05:16 +08:00
**Example Request**:
```http
POST /api/teams/1/members HTTP/1.1
Accept: application/json
Content-Type: application/json
2024-06-11 15:35:22 +08:00
Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt
2018-02-16 06:05:16 +08:00
{
"userId": 2
}
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
{"message":"Member added to Team"}
```
Status Codes:
- **200** - Ok
- **400** - User is already added to this team
- **401** - Unauthorized
- **403** - Permission denied
2018-02-16 18:18:41 +08:00
- **404** - Team not found
2018-02-16 06:05:16 +08:00
## Remove Member From Team
`DELETE /api/teams/:teamId/members/:userId`
2022-05-21 03:48:52 +08:00
**Required permissions**
2022-02-12 01:00:13 +08:00
2025-03-06 20:59:08 +08:00
See note in the [introduction ](#team-api ) for an explanation.
2022-02-12 01:00:13 +08:00
| Action | Scope |
| ----------------------- | -------- |
| teams.permissions:write | teams:\* |
2018-02-16 06:05:16 +08:00
**Example Request**:
```http
DELETE /api/teams/2/members/3 HTTP/1.1
Accept: application/json
Content-Type: application/json
2024-06-11 15:35:22 +08:00
Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt
2018-02-16 06:05:16 +08:00
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
{"message":"Team Member removed"}
```
Status Codes:
- **200** - Ok
- **401** - Unauthorized
- **403** - Permission denied
2018-02-16 18:18:41 +08:00
- **404** - Team not found/Team member not found
2018-11-15 00:59:32 +08:00
2024-08-12 16:58:55 +08:00
## Bulk Update Team Members
Allows bulk updating team members and administrators using user emails.
Will override all current members and administrators for the specified team.
`PUT /api/teams/:teamId/members
**Required permissions**
2025-03-06 20:59:08 +08:00
See note in the [introduction ](#team-api ) for an explanation.
2024-08-12 16:58:55 +08:00
| Action | Scope |
| ----------------------- | -------- |
| teams.permissions:write | teams:\* |
**Example Request**:
```http
PUT /api/teams/1/members HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer glsa_kcVxDhZtu5ISOZIEt
{
"members": ["user1@email.com", "user2@email.com"]
"admins": ["user3@email.com"]
}
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
{"message":"Team memberships have been updated"}
```
Status Codes:
- **200** - Ok
- **401** - Unauthorized
- **403** - Permission denied
- **404** - Team not found/Team member not found
- **500** - Internal error
2018-11-15 00:59:32 +08:00
## Get Team Preferences
`GET /api/teams/:teamId/preferences`
2022-05-21 03:48:52 +08:00
**Required permissions**
2022-02-12 01:00:13 +08:00
2025-03-06 20:59:08 +08:00
See note in the [introduction ](#team-api ) for an explanation.
2022-02-12 01:00:13 +08:00
| Action | Scope |
| ---------- | -------- |
| teams:read | teams:\* |
2018-11-15 00:59:32 +08:00
**Example Request**:
```http
GET /api/teams/2/preferences HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
{
"theme": "",
"homeDashboardId": 0,
2025-06-13 20:10:44 +08:00
"homeDashboardUID": "",
2018-11-15 00:59:32 +08:00
"timezone": ""
}
```
## Update Team Preferences
`PUT /api/teams/:teamId/preferences`
2022-05-21 03:48:52 +08:00
**Required permissions**
2022-02-12 01:00:13 +08:00
2025-03-06 20:59:08 +08:00
See note in the [introduction ](#team-api ) for an explanation.
2022-02-12 01:00:13 +08:00
| Action | Scope |
| ----------- | -------- |
| teams:write | teams:\* |
2018-11-15 00:59:32 +08:00
**Example Request**:
```http
PUT /api/teams/2/preferences HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
"theme": "dark",
"homeDashboardId": 39,
2025-06-13 20:10:44 +08:00
"homeDashboardUID": "jcIIG-07z",
2018-11-15 00:59:32 +08:00
"timezone": "utc"
}
```
JSON Body Schema:
2021-08-06 21:52:36 +08:00
- **theme** - One of: `light` , `dark` , or an empty string for the default theme
2025-06-13 20:10:44 +08:00
- **homeDashboardId** - Deprecated. Use `homeDashboardUID` instead.
- **homeDashboardUID** - The `:uid` of a dashboard
2021-08-06 21:52:36 +08:00
- **timezone** - One of: `utc` , `browser` , or an empty string for the default
2018-11-15 00:59:32 +08:00
Omitting a key will cause the current value to be replaced with the system default value.
**Example Response**:
```http
HTTP/1.1 200
Content-Type: text/plain; charset=utf-8
{
"message":"Preferences updated"
}
```