2016-11-24 10:16:24 +01:00
+++
title = "Data source HTTP API "
description = "Grafana Data source HTTP API"
keywords = ["grafana", "http", "documentation", "api", "data source"]
2019-12-30 08:17:03 +01:00
aliases = ["/docs/grafana/latest/http_api/datasource/"]
2016-11-24 10:16:24 +01:00
type = "docs"
[menu.docs]
name = "Data source"
parent = "http_api"
+++
2016-02-02 22:59:22 -08:00
2016-02-05 01:47:34 -08:00
# Data source API
2016-02-02 22:59:22 -08:00
2019-09-19 15:04:56 -07:00
## Get all data sources
2016-02-02 22:59:22 -08:00
`GET /api/datasources`
**Example Request** :
2017-10-05 19:01:03 +02:00
```http
GET /api/datasources HTTP / 1.1
Accept : application/json
Content-Type : application/json
Authorization : Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-02-02 22:59:22 -08:00
**Example Response** :
2017-10-05 19:01:03 +02:00
```http
HTTP / 1.1 200
Content-Type : application/json
[
2019-12-10 15:30:06 +02:00
{
"id" : 1 ,
"orgId" : 1 ,
"name" : "datasource_elastic" ,
"type" : "elasticsearch" ,
"typeLogoUrl" : "public/app/plugins/datasource/elasticsearch/img/elasticsearch.svg" ,
"access" : "proxy" ,
"url" : "http://mydatasource.com" ,
"password" : "" ,
"user" : "" ,
"database" : "grafana-dash" ,
"basicAuth" : false ,
"isDefault" : false ,
"jsonData" : {
"esVersion" : 5 ,
"logLevelField" : "" ,
"logMessageField" : "" ,
"maxConcurrentShardRequests" : 256 ,
"timeField" : "@timestamp"
},
"readOnly" : false
}
2017-10-05 19:01:03 +02:00
]
```
2016-02-02 22:59:22 -08:00
2019-05-22 17:54:08 +02:00
## Get a single data source by Id
2016-02-02 22:59:22 -08:00
`GET /api/datasources/:datasourceId`
**Example Request** :
2017-10-05 19:01:03 +02:00
```http
GET /api/datasources/1 HTTP / 1.1
Accept : application/json
Content-Type : application/json
Authorization : Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-03-08 02:19:52 -08:00
**Example Response** :
2017-10-05 19:01:03 +02:00
```http
HTTP / 1.1 200
Content-Type : application/json
{
2019-12-10 15:30:06 +02:00
"id" : 1 ,
"orgId" : 1 ,
"name" : "test_datasource" ,
"type" : "graphite" ,
"typeLogoUrl" : "" ,
"access" : "proxy" ,
"url" : "http://mydatasource.com" ,
"password" : "" ,
"user" : "" ,
"database" : "" ,
"basicAuth" : false ,
"basicAuthUser" : "" ,
"basicAuthPassword" : "" ,
"withCredentials" : false ,
"isDefault" : false ,
"jsonData" : {
"graphiteType" : "default" ,
"graphiteVersion" : "1.1"
},
"secureJsonFields" : {},
"version" : 1 ,
"readOnly" : false
2017-10-05 19:01:03 +02:00
}
```
2016-03-08 02:19:52 -08:00
2016-03-10 01:31:10 -08:00
## Get a single data source by Name
2016-03-08 02:19:52 -08:00
2018-02-23 14:52:45 +01:00
`GET /api/datasources/name/:name`
2016-03-08 02:19:52 -08:00
**Example Request** :
2017-10-05 19:01:03 +02:00
```http
GET /api/datasources/name/test_datasource HTTP / 1.1
Accept : application/json
Content-Type : application/json
Authorization : Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-02-02 22:59:22 -08:00
**Example Response** :
2017-10-05 19:01:03 +02:00
```http
HTTP / 1.1 200
Content-Type : application/json
{
2019-12-10 15:30:06 +02:00
"id" : 1 ,
"orgId" : 1 ,
"name" : "test_datasource" ,
"type" : "graphite" ,
"typeLogoUrl" : "" ,
"access" : "proxy" ,
"url" : "http://mydatasource.com" ,
"password" : "" ,
"user" : "" ,
"database" : "" ,
"basicAuth" : false ,
"basicAuthUser" : "" ,
"basicAuthPassword" : "" ,
"withCredentials" : false ,
"isDefault" : false ,
"jsonData" : {
"graphiteType" : "default" ,
"graphiteVersion" : "1.1"
},
"secureJsonFields" : {},
"version" : 1 ,
"readOnly" : false
2017-10-05 19:01:03 +02:00
}
```
2016-02-02 22:59:22 -08:00
2016-03-10 01:31:10 -08:00
## Get data source Id by Name
`GET /api/datasources/id/:name`
**Example Request** :
2017-10-05 19:01:03 +02:00
```http
GET /api/datasources/id/test_datasource HTTP / 1.1
Accept : application/json
Content-Type : application/json
Authorization : Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-03-10 01:31:10 -08:00
**Example Response** :
2017-10-05 19:01:03 +02:00
```http
HTTP / 1.1 200
Content-Type : application/json
2016-03-10 01:31:10 -08:00
2017-10-05 19:01:03 +02:00
{
"id" : 1
}
```
2016-03-10 01:31:10 -08:00
2019-05-22 17:54:08 +02:00
## Create a data source
2016-02-02 22:59:22 -08:00
`POST /api/datasources`
2017-08-10 16:03:42 -07:00
**Example Graphite Request** :
2016-02-02 22:59:22 -08:00
2017-10-05 19:01:03 +02:00
```http
POST /api/datasources HTTP / 1.1
Accept : application/json
Content-Type : application/json
Authorization : Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
"name" : "test_datasource" ,
"type" : "graphite" ,
"url" : "http://mydatasource.com" ,
"access" : "proxy" ,
"basicAuth" : false
}
```
2016-02-02 22:59:22 -08:00
2019-12-10 15:30:06 +02:00
**Example Graphite Response** :
```http
HTTP / 1.1 200
Content-Type : application/json
{
"datasource" : {
"id" : 1 ,
"orgId" : 1 ,
"name" : "test_datasource" ,
"type" : "graphite" ,
"typeLogoUrl" : "" ,
"access" : "proxy" ,
"url" : "http://mydatasource.com" ,
"password" : "" ,
"user" : "" ,
"database" : "" ,
"basicAuth" : false ,
"basicAuthUser" : "" ,
"basicAuthPassword" : "" ,
"withCredentials" : false ,
"isDefault" : false ,
"jsonData" : {},
"secureJsonFields" : {},
"version" : 1 ,
"readOnly" : false
},
"id" : 1 ,
"message" : "Datasource added" ,
"name" : "test_datasource"
}
```
> NOTE: `password` and `basicAuthPassword` should be defined under `secureJsonData` in order to be stored securely as an encrypted blob in the database. Then, the encrypted fields are listed under `secureJsonFields` section in the response. See also the [Encrypting Sensitive Data]({{< relref "../plugins/developing/auth-for-datasources.md/#encrypting-sensitive-data">}}) documentation for more details.
**Example Graphite Request with basic auth enabled** :
```http
POST /api/datasources HTTP / 1.1
Accept : application/json
Content-Type : application/json
Authorization : Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
"name" : "test_datasource" ,
"type" : "graphite" ,
"url" : "http://mydatasource.com" ,
"access" : "proxy" ,
"basicAuth" : true ,
"basicAuthUser" : "basicuser" ,
"secureJsonData" : {
"basicAuthPassword" : "basicpassword"
}
}
```
**Example Response with basic auth enabled** :
```http
HTTP / 1.1 200
Content-Type : application/json
{
"datasource" : {
"id" : 1 ,
"orgId" : 1 ,
"name" : "test_datasource" ,
"type" : "graphite" ,
"typeLogoUrl" : "" ,
"access" : "proxy" ,
"url" : "http://mydatasource.com" ,
"password" : "" ,
"user" : "" ,
"database" : "" ,
"basicAuth" : true ,
"basicAuthUser" : "basicuser" ,
"basicAuthPassword" : "" ,
"withCredentials" : false ,
"isDefault" : false ,
"jsonData" : {},
"secureJsonFields" : {
"basicAuthPassword" : true
},
"version" : 1 ,
"readOnly" : false
},
"id" : 102 ,
"message" : "Datasource added" ,
"name" : "test_datasource"
}
```
2017-08-10 16:03:42 -07:00
**Example CloudWatch Request** :
2017-10-05 19:01:03 +02:00
```http
POST /api/datasources HTTP / 1.1
Accept : application/json
Content-Type : application/json
Authorization : Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
"name" : "test_datasource" ,
"type" : "cloudwatch" ,
"url" : "http://monitoring.us-west-1.amazonaws.com" ,
"access" : "proxy" ,
"jsonData" : {
"authType" : "keys" ,
"defaultRegion" : "us-west-1"
},
"secureJsonData" : {
2019-01-18 16:37:43 +01:00
"accessKey" : "Ol4pIDpeKSA6XikgOl4p" ,
"secretKey" : "dGVzdCBrZXkgYmxlYXNlIGRvbid0IHN0ZWFs"
2017-08-10 16:03:42 -07:00
}
2017-10-05 19:01:03 +02:00
}
```
2016-02-02 22:59:22 -08:00
2016-02-05 01:47:34 -08:00
## Update an existing data source
2016-02-02 22:59:22 -08:00
`PUT /api/datasources/:datasourceId`
**Example Request** :
2017-10-05 19:01:03 +02:00
```http
PUT /api/datasources/1 HTTP / 1.1
Accept : application/json
Content-Type : application/json
Authorization : Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
"id" : 1 ,
"orgId" : 1 ,
"name" : "test_datasource" ,
"type" : "graphite" ,
"access" : "proxy" ,
"url" : "http://mydatasource.com" ,
"password" : "" ,
"user" : "" ,
"database" : "" ,
"basicAuth" : true ,
"basicAuthUser" : "basicuser" ,
2019-12-10 15:30:06 +02:00
"secureJsonData" : {
"basicAuthPassword" : "basicpassword"
},
2017-10-05 19:01:03 +02:00
"isDefault" : false ,
"jsonData" : null
}
```
2016-02-02 22:59:22 -08:00
**Example Response** :
2017-10-05 19:01:03 +02:00
```http
HTTP / 1.1 200
Content-Type : application/json
2016-02-02 22:59:22 -08:00
2019-12-10 15:30:06 +02:00
{
"datasource" : {
"id" : 1 ,
"orgId" : 1 ,
"name" : "test_datasource" ,
"type" : "graphite" ,
"typeLogoUrl" : "" ,
"access" : "proxy" ,
"url" : "http://mydatasource.com" ,
"password" : "" ,
"user" : "" ,
"database" : "" ,
"basicAuth" : true ,
"basicAuthUser" : "basicuser" ,
"basicAuthPassword" : "" ,
"withCredentials" : false ,
"isDefault" : false ,
"jsonData" : {},
"secureJsonFields" : {
"basicAuthPassword" : true
},
"version" : 1 ,
"readOnly" : false
},
"id" : 102 ,
"message" : "Datasource updated" ,
"name" : "test_datasource"
}
2017-10-05 19:01:03 +02:00
```
2016-02-02 22:59:22 -08:00
2019-12-10 15:30:06 +02:00
> NOTE: Similar to [creating a data source](#create-a-data-source), `password` and `basicAuthPassword` should be defined under `secureJsonData` in order to be stored securely as an encrypted blob in the database. Then, the encrypted fields are listed under `secureJsonFields` section in the response. See also the [Encrypting Sensitive Data]({{< relref "../plugins/developing/auth-for-datasources.md/#encrypting-sensitive-data">}}) documentation for more details.
2017-02-14 10:40:55 +01:00
## Delete an existing data source by id
2016-02-02 22:59:22 -08:00
`DELETE /api/datasources/:datasourceId`
**Example Request** :
2017-10-05 19:01:03 +02:00
```http
DELETE /api/datasources/1 HTTP / 1.1
Accept : application/json
Content-Type : application/json
Authorization : Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-02-02 22:59:22 -08:00
**Example Response** :
2017-10-05 19:01:03 +02:00
```http
HTTP / 1.1 200
Content-Type : application/json
2016-02-02 22:59:22 -08:00
2017-10-05 19:01:03 +02:00
{ "message" : "Data source deleted" }
```
2016-02-02 22:59:22 -08:00
2017-02-14 10:40:55 +01:00
## Delete an existing data source by name
`DELETE /api/datasources/name/:datasourceName`
**Example Request** :
2017-10-05 19:01:03 +02:00
```http
DELETE /api/datasources/name/test_datasource HTTP / 1.1
Accept : application/json
Content-Type : application/json
Authorization : Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2017-02-14 10:40:55 +01:00
**Example Response** :
2017-10-05 19:01:03 +02:00
```http
HTTP / 1.1 200
Content-Type : application/json
2017-02-14 10:40:55 +01:00
2017-10-05 19:01:03 +02:00
{ "message" : "Data source deleted" }
```
2017-02-14 10:40:55 +01:00
2016-02-02 22:59:22 -08:00
## Data source proxy calls
`GET /api/datasources/proxy/:datasourceId/*`
2019-09-19 15:04:56 -07:00
Proxies all calls to the actual data source.