2016-11-24 03:16:24 -06:00
+++
title = "Authentication HTTP API "
description = "Grafana Authentication HTTP API"
keywords = ["grafana", "http", "documentation", "api", "authentication"]
2019-12-30 01:17:03 -06:00
aliases = ["/docs/grafana/latest/http_api/authentication/"]
2016-11-24 03:16:24 -06:00
type = "docs"
[menu.docs]
2018-08-13 07:28:41 -05:00
name = "Authentication HTTP API"
2016-11-24 03:16:24 -06:00
parent = "http_api"
+++
2016-02-03 00:59:22 -06:00
2016-02-05 03:15:09 -06:00
# Authentication API
2016-02-03 00:59:22 -06:00
2016-02-05 03:15:09 -06:00
## Tokens
2016-02-03 00:59:22 -06:00
2020-05-18 15:56:23 -05:00
Currently you can authenticate via an `API Token` or via a `Session cookie` (acquired using regular login or OAuth).
2016-02-03 00:59:22 -06:00
2016-02-05 03:15:09 -06:00
## Basic Auth
2016-02-03 00:59:22 -06:00
2020-07-06 09:56:26 -05:00
If basic auth is enabled (it is enabled by default), then you can authenticate your HTTP request via
2016-12-13 02:15:52 -06:00
standard basic auth. Basic auth will also authenticate LDAP users.
2016-02-03 00:59:22 -06:00
curl example:
2017-10-05 12:01:03 -05:00
```bash
2016-02-03 00:59:22 -06:00
?curl http://admin:admin@localhost:3000/api/org
{"id":1,"name":"Main Org."}
```
2016-02-05 03:15:09 -06:00
## Create API Token
2016-02-03 00:59:22 -06:00
Open the sidemenu and click the organization dropdown and select the `API Keys` option.
2017-02-07 00:48:01 -06:00
![](/img/docs/v2/orgdropdown_api_keys.png)
2016-02-03 00:59:22 -06:00
You use the token in all requests in the `Authorization` header, like this:
**Example**:
2017-10-05 12:01:03 -05:00
```http
GET http://your.grafana.com/api/dashboards/db/mydash HTTP/1.1
Accept: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-02-03 00:59:22 -06:00
2016-02-05 03:15:09 -06:00
The `Authorization` header value should be `Bearer <your api key>` .
2017-04-20 06:59:36 -05:00
2018-06-28 05:08:32 -05: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 06:59:36 -05:00
# Auth HTTP resources / actions
## Api Keys
`GET /api/auth/keys`
**Example Request**:
2017-10-05 12:01:03 -05:00
```http
GET /api/auth/keys HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2017-04-20 06:59:36 -05:00
2019-11-20 05:14:57 -06:00
Query Parameters:
- `includeExpired` : boolean. enable listing of expired keys. Optional.
2017-04-20 06:59:36 -05:00
**Example Response**:
2017-10-05 12:01:03 -05:00
```http
HTTP/1.1 200
Content-Type: application/json
[
{
"id": 3,
"name": "API",
"role": "Admin"
},
{
"id": 1,
"name": "TestAdmin",
2019-06-26 01:47:03 -05:00
"role": "Admin",
"expiration": "2019-06-26T10:52:03+03:00"
2017-10-05 12:01:03 -05:00
}
]
```
2017-04-20 06:59:36 -05:00
## Create API Key
`POST /api/auth/keys`
**Example Request**:
2017-10-05 12:01:03 -05:00
```http
POST /api/auth/keys HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
2017-04-20 06:59:36 -05:00
2017-10-05 12:01:03 -05:00
{
"name": "mykey",
2019-06-26 01:47:03 -05:00
"role": "Admin",
"secondsToLive": 86400
2017-10-05 12:01:03 -05:00
}
```
2017-04-20 06:59:36 -05:00
JSON Body schema:
- **name** – The key name
2017-12-13 11:53:42 -06: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 01:47:03 -05: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 06:59:36 -05:00
**Example Response**:
2017-10-05 12:01:03 -05:00
```http
HTTP/1.1 200
Content-Type: application/json
2017-04-20 06:59:36 -05:00
2017-10-05 12:01:03 -05:00
{"name":"mykey","key":"eyJrIjoiWHZiSWd3NzdCYUZnNUtibE9obUpESmE3bzJYNDRIc0UiLCJuIjoibXlrZXkiLCJpZCI6MX1="}
```
2017-04-20 06:59:36 -05:00
## Delete API Key
`DELETE /api/auth/keys/:id`
**Example Request**:
2017-10-05 12:01:03 -05:00
```http
DELETE /api/auth/keys/3 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2017-04-20 06:59:36 -05:00
**Example Response**:
2017-10-05 12:01:03 -05:00
```http
HTTP/1.1 200
Content-Type: application/json
2017-04-20 06:59:36 -05:00
2017-10-05 12:01:03 -05:00
{"message":"API key deleted"}
2020-05-18 15:56:23 -05:00
```