2016-11-24 17:16:24 +08:00
+++
title = "Authentication HTTP API "
description = "Grafana Authentication HTTP API"
keywords = ["grafana", "http", "documentation", "api", "authentication"]
2019-12-30 15:17:03 +08:00
aliases = ["/docs/grafana/latest/http_api/authentication/"]
2016-11-24 17:16:24 +08:00
type = "docs"
[menu.docs]
2018-08-13 20:28:41 +08:00
name = "Authentication HTTP API"
2016-11-24 17:16:24 +08:00
parent = "http_api"
+++
2016-02-03 14:59:22 +08:00
2016-02-05 17:15:09 +08:00
# Authentication API
2016-02-03 14:59:22 +08:00
2016-02-05 17:15:09 +08:00
## Tokens
2016-02-03 14:59:22 +08:00
2020-05-19 04:56:23 +08:00
Currently you can authenticate via an `API Token` or via a `Session cookie` (acquired using regular login or OAuth).
2016-02-03 14:59:22 +08:00
2016-02-05 17:15:09 +08:00
## Basic Auth
2016-02-03 14:59:22 +08:00
If basic auth is enabled (it is enabled by default) you can authenticate your HTTP request via
2016-12-13 16:15:52 +08:00
standard basic auth. Basic auth will also authenticate LDAP users.
2016-02-03 14:59:22 +08:00
curl example:
2017-10-06 01:01:03 +08:00
```bash
2016-02-03 14:59:22 +08:00
?curl http://admin:admin@localhost:3000/api/org
{"id":1,"name":"Main Org."}
```
2016-02-05 17:15:09 +08:00
## Create API Token
2016-02-03 14:59:22 +08:00
Open the sidemenu and click the organization dropdown and select the `API Keys` option.
2017-02-07 14:48:01 +08:00

2016-02-03 14:59:22 +08:00
You use the token in all requests in the `Authorization` header, like this:
**Example**:
2017-10-06 01:01:03 +08:00
```http
GET http://your.grafana.com/api/dashboards/db/mydash HTTP/1.1
Accept: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-02-03 14:59:22 +08:00
2016-02-05 17:15:09 +08:00
The `Authorization` header value should be `Bearer <your api key>` .
2017-04-20 19:59:36 +08:00
2018-06-28 18:08:32 +08:00
The API Token can also be passed as a Basic authorization password with the special username `api_key` :
curl example:
```bash
?curl http://api_key:eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk@localhost:3000/api/org
{"id":1,"name":"Main Org."}
```
2017-04-20 19:59:36 +08:00
# Auth HTTP resources / actions
## Api Keys
`GET /api/auth/keys`
**Example Request**:
2017-10-06 01:01:03 +08:00
```http
GET /api/auth/keys HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2017-04-20 19:59:36 +08:00
2019-11-20 19:14:57 +08:00
Query Parameters:
- `includeExpired` : boolean. enable listing of expired keys. Optional.
2017-04-20 19:59:36 +08:00
**Example Response**:
2017-10-06 01:01:03 +08:00
```http
HTTP/1.1 200
Content-Type: application/json
[
{
"id": 3,
"name": "API",
"role": "Admin"
},
{
"id": 1,
"name": "TestAdmin",
2019-06-26 14:47:03 +08:00
"role": "Admin",
"expiration": "2019-06-26T10:52:03+03:00"
2017-10-06 01:01:03 +08:00
}
]
```
2017-04-20 19:59:36 +08:00
## Create API Key
`POST /api/auth/keys`
**Example Request**:
2017-10-06 01:01:03 +08:00
```http
POST /api/auth/keys HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
2017-04-20 19:59:36 +08:00
2017-10-06 01:01:03 +08:00
{
"name": "mykey",
2019-06-26 14:47:03 +08:00
"role": "Admin",
"secondsToLive": 86400
2017-10-06 01:01:03 +08:00
}
```
2017-04-20 19:59:36 +08:00
JSON Body schema:
- **name** – The key name
2017-12-14 01:53:42 +08:00
- **role** – Sets the access level/Grafana Role for the key. Can be one of the following values: `Viewer` , `Editor` or `Admin` .
2019-06-26 14:47:03 +08:00
- **secondsToLive** – Sets the key expiration in seconds. It is optional. If it is a positive number an expiration date for the key is set. If it is null, zero or is omitted completely (unless `api_key_max_seconds_to_live` configuration option is set) the key will never expire.
Error statuses:
- **400** – `api_key_max_seconds_to_live` is set but no `secondsToLive` is specified or `secondsToLive` is greater than this value.
- **500** – The key was unable to be stored in the database.
2017-04-20 19:59:36 +08:00
**Example Response**:
2017-10-06 01:01:03 +08:00
```http
HTTP/1.1 200
Content-Type: application/json
2017-04-20 19:59:36 +08:00
2017-10-06 01:01:03 +08:00
{"name":"mykey","key":"eyJrIjoiWHZiSWd3NzdCYUZnNUtibE9obUpESmE3bzJYNDRIc0UiLCJuIjoibXlrZXkiLCJpZCI6MX1="}
```
2017-04-20 19:59:36 +08:00
## Delete API Key
`DELETE /api/auth/keys/:id`
**Example Request**:
2017-10-06 01:01:03 +08:00
```http
DELETE /api/auth/keys/3 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2017-04-20 19:59:36 +08:00
**Example Response**:
2017-10-06 01:01:03 +08:00
```http
HTTP/1.1 200
Content-Type: application/json
2017-04-20 19:59:36 +08:00
2017-10-06 01:01:03 +08:00
{"message":"API key deleted"}
2020-05-19 04:56:23 +08:00
```