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

2016-02-02 22:59:22 -08:00
You use the token in all requests in the `Authorization` header, like this:
**Example**:
2017-10-05 19:01:03 +02:00
```http
GET http://your.grafana.com/api/dashboards/db/mydash HTTP/1.1
Accept: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-02-02 22:59:22 -08:00
2016-02-05 01:15:09 -08:00
The `Authorization` header value should be `Bearer <your api key>` .
2017-04-20 13:59:36 +02:00
2018-06-28 12:08:32 +02: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 13:59:36 +02:00
# Auth HTTP resources / actions
## Api Keys
`GET /api/auth/keys`
**Example Request**:
2017-10-05 19:01:03 +02:00
```http
GET /api/auth/keys HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2017-04-20 13:59:36 +02:00
2019-11-20 13:14:57 +02:00
Query Parameters:
- `includeExpired` : boolean. enable listing of expired keys. Optional.
2017-04-20 13:59:36 +02:00
**Example Response**:
2017-10-05 19:01:03 +02:00
```http
HTTP/1.1 200
Content-Type: application/json
[
{
"id": 3,
"name": "API",
"role": "Admin"
},
{
"id": 1,
"name": "TestAdmin",
2019-06-26 09:47:03 +03:00
"role": "Admin",
"expiration": "2019-06-26T10:52:03+03:00"
2017-10-05 19:01:03 +02:00
}
]
```
2017-04-20 13:59:36 +02:00
## Create API Key
`POST /api/auth/keys`
**Example Request**:
2017-10-05 19:01:03 +02:00
```http
POST /api/auth/keys HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
2017-04-20 13:59:36 +02:00
2017-10-05 19:01:03 +02:00
{
"name": "mykey",
2019-06-26 09:47:03 +03:00
"role": "Admin",
"secondsToLive": 86400
2017-10-05 19:01:03 +02:00
}
```
2017-04-20 13:59:36 +02:00
JSON Body schema:
- **name** – The key name
2017-12-13 18:53:42 +01: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 09:47:03 +03: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 13:59:36 +02:00
**Example Response**:
2017-10-05 19:01:03 +02:00
```http
HTTP/1.1 200
Content-Type: application/json
2017-04-20 13:59:36 +02:00
2017-10-05 19:01:03 +02:00
{"name":"mykey","key":"eyJrIjoiWHZiSWd3NzdCYUZnNUtibE9obUpESmE3bzJYNDRIc0UiLCJuIjoibXlrZXkiLCJpZCI6MX1="}
```
2017-04-20 13:59:36 +02:00
## Delete API Key
`DELETE /api/auth/keys/:id`
**Example Request**:
2017-10-05 19:01:03 +02:00
```http
DELETE /api/auth/keys/3 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2017-04-20 13:59:36 +02:00
**Example Response**:
2017-10-05 19:01:03 +02:00
```http
HTTP/1.1 200
Content-Type: application/json
2017-04-20 13:59:36 +02:00
2017-10-05 19:01:03 +02:00
{"message":"API key deleted"}
2020-05-19 02:26:23 +05:30
```