2022-05-26 10:06:25 -05:00
---
aliases:
- /docs/grafana/latest/developers/http_api/data_source/
- /docs/grafana/latest/http_api/data_source/
- /docs/grafana/latest/http_api/datasource/
description: Grafana Data source HTTP API
keywords:
- grafana
- http
- documentation
- api
- data source
title: 'Data source HTTP API '
---
2016-11-24 03:16:24 -06:00
2016-02-05 03:47:34 -06:00
# Data source API
2016-02-03 00:59:22 -06:00
2022-05-27 07:42:51 -05:00
> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information.
2021-09-29 10:45:27 -05:00
2019-09-19 17:04:56 -05:00
## Get all data sources
2016-02-03 00:59:22 -06:00
`GET /api/datasources`
2022-05-20 14:48:52 -05:00
**Required permissions**
2021-09-29 10:45:27 -05:00
See note in the [introduction ]({{< ref "#data-source-api" >}} ) for an explanation.
| Action | Scope |
| ---------------- | -------------- |
| datasources:read | datasources:\* |
### Examples
2016-02-03 00:59:22 -06:00
**Example Request**:
2017-10-05 12:01:03 -05:00
```http
GET /api/datasources HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-02-03 00:59:22 -06:00
**Example Response**:
2017-10-05 12:01:03 -05:00
```http
HTTP/1.1 200
Content-Type: application/json
[
2019-12-10 07:30:06 -06:00
{
"id": 1,
"orgId": 1,
2021-01-13 12:16:27 -06:00
"uid": "H8joYFVGz"
2019-12-10 07:30:06 -06:00
"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 12:01:03 -05:00
]
```
2016-02-03 00:59:22 -06:00
2022-05-23 09:11:47 -05:00
## Get a single data source by id
2016-02-03 00:59:22 -06:00
`GET /api/datasources/:datasourceId`
2022-05-23 09:11:47 -05:00
> **Warning:** This API is deprecated since Grafana v9.0.0 and will be removed in a future release. Refer to the [API for getting a single data source by UID](#get-a-single-data-source-by-uid) or to the [API for getting a single data source by its name](#get-a-single-data-source-by-name).
2022-05-20 14:48:52 -05:00
**Required permissions**
2021-09-29 10:45:27 -05:00
See note in the [introduction ]({{< ref "#data-source-api" >}} ) for an explanation.
| Action | Scope |
| ---------------- | ---------------------------------------------------------------------------- |
| datasources:read | datasources:\*< br > datasources:id:\*< br > datasources:id:1 (single data source) |
### Examples
2016-02-03 00:59:22 -06:00
**Example Request**:
2017-10-05 12:01:03 -05:00
```http
GET /api/datasources/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-03-08 04:19:52 -06:00
**Example Response**:
2017-10-05 12:01:03 -05:00
```http
HTTP/1.1 200
Content-Type: application/json
{
2019-12-10 07:30:06 -06:00
"id": 1,
2021-01-13 12:16:27 -06:00
"uid": "kLtEtcRGk",
"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
}
```
2022-05-23 09:11:47 -05:00
## Get a single data source by uid
2021-01-13 12:16:27 -06:00
`GET /api/datasources/uid/:uid`
2022-05-20 14:48:52 -05:00
**Required permissions**
2021-09-29 10:45:27 -05:00
See note in the [introduction ]({{< ref "#data-source-api" >}} ) for an explanation.
| Action | Scope |
| ---------------- | -------------------------------------------------------------------------------------- |
| datasources:read | datasources:\*< br > datasources:uid:\*< br > datasources:uid:kLtEtcRGk (single data source) |
### Examples
2021-01-13 12:16:27 -06:00
**Example request:**
```http
GET /api/datasources/uid/kLtEtcRGk HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
{
"id": 1,
"uid": "kLtEtcRGk",
2019-12-10 07:30:06 -06:00
"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 12:01:03 -05:00
}
```
2016-03-08 04:19:52 -06:00
2022-05-23 09:11:47 -05:00
## Get a single data source by name
2016-03-08 04:19:52 -06:00
2018-02-23 07:52:45 -06:00
`GET /api/datasources/name/:name`
2016-03-08 04:19:52 -06:00
2022-05-20 14:48:52 -05:00
**Required permissions**
2021-09-29 10:45:27 -05:00
See note in the [introduction ]({{< ref "#data-source-api" >}} ) for an explanation.
| Action | Scope |
| ---------------- | ---------------------------------------------------------------------------------------------- |
| datasources:read | datasources:\*< br > datasources:name:\*< br > datasources:name:test_datasource (single data source) |
### Examples
2016-03-08 04:19:52 -06:00
**Example Request**:
2017-10-05 12:01:03 -05:00
```http
GET /api/datasources/name/test_datasource HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-02-03 00:59:22 -06:00
**Example Response**:
2017-10-05 12:01:03 -05:00
```http
HTTP/1.1 200
Content-Type: application/json
{
2019-12-10 07:30:06 -06:00
"id": 1,
2021-01-13 12:16:27 -06:00
"uid": "kLtEtcRGk",
2019-12-10 07:30:06 -06:00
"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 12:01:03 -05:00
}
```
2016-02-03 00:59:22 -06:00
2022-05-23 09:11:47 -05:00
## Get data source Id by name
2016-03-10 03:31:10 -06:00
`GET /api/datasources/id/:name`
2022-05-20 14:48:52 -05:00
**Required permissions**
2021-09-29 10:45:27 -05:00
See note in the [introduction ]({{< ref "#data-source-api" >}} ) for an explanation.
| Action | Scope |
| ------------------- | ---------------------------------------------------------------------------------------------- |
2021-10-05 02:39:00 -05:00
| datasources.id:read | datasources:\*< br > datasources:name:\*< br > datasources:name:test_datasource (single data source) |
2021-09-29 10:45:27 -05:00
### Examples
2016-03-10 03:31:10 -06:00
**Example Request**:
2017-10-05 12:01:03 -05:00
```http
GET /api/datasources/id/test_datasource HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-03-10 03:31:10 -06:00
**Example Response**:
2017-10-05 12:01:03 -05:00
```http
HTTP/1.1 200
Content-Type: application/json
2016-03-10 03:31:10 -06:00
2017-10-05 12:01:03 -05:00
{
"id":1
}
```
2016-03-10 03:31:10 -06:00
2019-05-22 10:54:08 -05:00
## Create a data source
2016-02-03 00:59:22 -06:00
`POST /api/datasources`
2022-05-20 14:48:52 -05:00
**Required permissions**
2021-09-29 10:45:27 -05:00
See note in the [introduction ]({{< ref "#data-source-api" >}} ) for an explanation.
| Action | Scope |
| ------------------ | ----- |
| datasources:create | n/a |
### Examples
2017-08-10 18:03:42 -05:00
**Example Graphite Request**:
2016-02-03 00:59:22 -06:00
2017-10-05 12:01:03 -05: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-03 00:59:22 -06:00
2019-12-10 07:30:06 -06: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"
}
```
2020-06-11 05:12:27 -05:00
> **Note:** By defining `password` and `basicAuthPassword` under `secureJsonData` Grafana encrypts them securely as an encrypted blob in the database. The response then lists the encrypted fields under `secureJsonFields`.
2019-12-10 07:30:06 -06:00
**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"
}
}
```
2021-08-06 08:52:36 -05:00
2019-12-10 07:30:06 -06:00
**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 18:03:42 -05:00
**Example CloudWatch Request**:
2017-10-05 12:01:03 -05: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 09:37:43 -06:00
"accessKey": "Ol4pIDpeKSA6XikgOl4p",
"secretKey": "dGVzdCBrZXkgYmxlYXNlIGRvbid0IHN0ZWFs"
2017-08-10 18:03:42 -05:00
}
2017-10-05 12:01:03 -05:00
}
```
2016-02-03 00:59:22 -06:00
2022-05-23 08:13:13 -05:00
## Update an existing data source by id
2016-02-03 00:59:22 -06:00
`PUT /api/datasources/:datasourceId`
2022-05-23 08:13:13 -05:00
> **Warning:** This API is deprecated since Grafana v9.0.0 and will be removed in a future release. Refer to the [new data source update API](#update-an-existing-data-source).
2022-05-20 14:48:52 -05:00
**Required permissions**
2021-09-29 10:45:27 -05:00
See note in the [introduction ]({{< ref "#data-source-api" >}} ) for an explanation.
| Action | Scope |
| ----------------- | ---------------------------------------------------------------------------- |
| datasources:write | datasources:\*< br > datasources:id:\*< br > datasources:id:1 (single data source) |
### Examples
2016-02-03 00:59:22 -06:00
**Example Request**:
2017-10-05 12:01:03 -05: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 07:30:06 -06:00
"secureJsonData": {
"basicAuthPassword": "basicpassword"
},
2017-10-05 12:01:03 -05:00
"isDefault":false,
"jsonData":null
}
```
2016-02-03 00:59:22 -06:00
**Example Response**:
2017-10-05 12:01:03 -05:00
```http
HTTP/1.1 200
Content-Type: application/json
2016-02-03 00:59:22 -06:00
2019-12-10 07:30:06 -06:00
{
"datasource": {
"id": 1,
2022-05-23 08:13:13 -05:00
"uid": "kLtEtcRGk",
2019-12-10 07:30:06 -06:00
"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 12:01:03 -05:00
```
2016-02-03 00:59:22 -06:00
2020-06-11 05:12:27 -05: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.
2019-12-10 07:30:06 -06:00
2022-05-23 08:13:13 -05:00
## Update an existing data source
`PUT /api/datasources/uid/:uid`
**Required permissions**
See note in the [introduction ]({{< ref "#data-source-api" >}} ) for an explanation.
| Action | Scope |
| ----------------- | -------------------------------------------------------------------------------------- |
| datasources:write | datasources:\*< br > datasources:uid:\*< br > datasources:uid:kLtEtcRGk (single data source) |
### Examples
**Example Request**:
```http
PUT /api/datasources/uid/kLtEtcRGk HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
{
"id":1,
"uid": "updated UID",
"orgId":1,
"name":"test_datasource",
"type":"graphite",
"access":"proxy",
"url":"http://mydatasource.com",
"password":"",
"user":"",
"database":"",
"basicAuth":true,
"basicAuthUser":"basicuser",
"secureJsonData": {
"basicAuthPassword": "basicpassword"
},
"isDefault":false,
"jsonData":null
}
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
{
"datasource": {
"id": 1,
"uid": "updated UID",
"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"
}
```
> **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.## Update an existing data source by id
2017-02-14 03:40:55 -06:00
## Delete an existing data source by id
2016-02-03 00:59:22 -06:00
`DELETE /api/datasources/:datasourceId`
2022-05-23 09:11:47 -05:00
> **Warning:** This API is deprecated since Grafana v9.0.0 and will be removed in a future release. Refer to the [API for deleting an existing data source by UID](#delete-an-existing-data-source-by-uid) or to the [API for deleting an existing data source by its name](#delete-an-existing-data-source-by-name)
2022-05-20 14:48:52 -05:00
**Required permissions**
2021-09-29 10:45:27 -05:00
See note in the [introduction ]({{< ref "#data-source-api" >}} ) for an explanation.
| Action | Scope |
| ------------------ | ---------------------------------------------------------------------------- |
| datasources:delete | datasources:\*< br > datasources:id:\*< br > datasources:id:1 (single data source) |
### Examples
2016-02-03 00:59:22 -06:00
**Example Request**:
2017-10-05 12:01:03 -05:00
```http
DELETE /api/datasources/1 HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2016-02-03 00:59:22 -06:00
**Example Response**:
2017-10-05 12:01:03 -05:00
```http
HTTP/1.1 200
Content-Type: application/json
2016-02-03 00:59:22 -06:00
2017-10-05 12:01:03 -05:00
{"message":"Data source deleted"}
```
2016-02-03 00:59:22 -06:00
2022-05-23 09:11:47 -05:00
## Delete an existing data source by uid
2021-01-13 12:16:27 -06:00
`DELETE /api/datasources/uid/:uid`
2022-05-20 14:48:52 -05:00
**Required permissions**
2021-09-29 10:45:27 -05:00
See note in the [introduction ]({{< ref "#data-source-api" >}} ) for an explanation.
| Action | Scope |
| ------------------ | -------------------------------------------------------------------------------------- |
| datasources:delete | datasources:\*< br > datasources:uid:\*< br > datasources:uid:kLtEtcRGk (single data source) |
### Examples
2021-01-13 12:16:27 -06:00
**Example request:**
```http
DELETE /api/datasources/uid/kLtEtcRGk HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example response**:
```http
HTTP/1.1 200
Content-Type: application/json
2021-11-05 09:06:14 -05:00
{
"message": "Data source deleted",
"id": 1
}
2021-01-13 12:16:27 -06:00
```
2017-02-14 03:40:55 -06:00
## Delete an existing data source by name
`DELETE /api/datasources/name/:datasourceName`
2022-05-20 14:48:52 -05:00
**Required permissions**
2021-09-29 10:45:27 -05:00
See note in the [introduction ]({{< ref "#data-source-api" >}} ) for an explanation.
| Action | Scope |
| ------------------ | ---------------------------------------------------------------------------------------------- |
| datasources:delete | datasources:\*< br > datasources:name:\*< br > datasources:name:test_datasource (single data source) |
### Examples
2017-02-14 03:40:55 -06:00
**Example Request**:
2017-10-05 12:01:03 -05:00
```http
DELETE /api/datasources/name/test_datasource HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
2017-02-14 03:40:55 -06:00
**Example Response**:
2017-10-05 12:01:03 -05:00
```http
HTTP/1.1 200
Content-Type: application/json
2017-02-14 03:40:55 -06:00
2020-07-31 01:22:09 -05:00
{
"message":"Data source deleted",
"id": 1
}
2017-10-05 12:01:03 -05:00
```
2017-02-14 03:40:55 -06:00
2022-05-23 09:11:47 -05:00
## Data source proxy calls by id
> **Warning:** This API is deprecated since Grafana v9.0.0 and will be removed in a future release. Refer to the [new data source API for proxying requests](#data-source-proxy-calls).
2016-02-03 00:59:22 -06:00
`GET /api/datasources/proxy/:datasourceId/*`
2022-05-23 09:11:47 -05:00
Proxies all calls to the actual data source identified by the `datasourceId` .
## Data source proxy calls
`GET /api/datasources/proxy/uid/:uid/*`
Proxies all calls to the actual data source identified by the `uid` .
2021-02-22 12:44:24 -06:00
2022-05-19 11:27:59 -05:00
## Check data source health by id
> **Warning:** This API is deprecated since Grafana v9.0.0 and will be removed in a future release. Refer to the [new data source health check API](#check-data-source-health).
`GET /api/datasources/:datasourceId/health`
Makes a call to the health endpoint of data source identified by the given `dashboardId` .
### Examples
**Example Request**:
```http
GET api/datasources/112/health HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
{
"message": "1. Successfully queried the CloudWatch metrics API.\n2. Successfully queried the CloudWatch logs API.",
"status": "OK"
}
```
## Check data source health
`GET /api/datasources/uid/:uid/health`
Makes a call to the health endpoint of data source identified by the given `uid` .
### Examples
**Example Request**:
```http
GET api/datasources/uid/P8045C56BDA891CB2/health HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
{
"message": "1. Successfully queried the CloudWatch metrics API.\n2. Successfully queried the CloudWatch logs API.",
"status": "OK"
}
```
## Fetch data source resources by id
> **Warning:** This API is deprecated since Grafana v9.0.0 and will be removed in a future release. Refer to the [new data source resources API](#fetch-data-source-resources).
`GET /api/datasources/:datasourceId/resources/*`
Makes a call to the resources endpoint of data source identified by the given `dashboardId` .
### Examples
**Example Request**:
```http
GET api/datasources/112/resources/dimension-keys?region=us-east-2& namespace=AWS%2FEC2& dimensionFilters=%7B%7D& metricName=CPUUtilization HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
[
{
"text": "AutoScalingGroupName",
"value": "AutoScalingGroupName",
"label": "AutoScalingGroupName"
},
{
"text": "ImageId",
"value": "ImageId",
"label": "ImageId"
},
{
"text": "InstanceId",
"value": "InstanceId",
"label": "InstanceId"
},
{
"text": "InstanceType",
"value": "InstanceType",
"label": "InstanceType"
}
]
```
## Fetch data source resources
`GET /api/datasources/uid/:uid/resources/*`
Makes a call to the resources endpoint of data source identified by the given `uid` .
### Examples
**Example Request**:
```http
GET api/datasources/uid/P8045C56BDA891CB2/resources/dimension-keys?region=us-east-2& namespace=AWS%2FEC2& dimensionFilters=%7B%7D& metricName=CPUUtilization HTTP/1.1
Accept: application/json
Content-Type: application/json
Authorization: Bearer eyJrIjoiT0tTcG1pUlY2RnVKZTFVaDFsNFZXdE9ZWmNrMkZYbk
```
**Example Response**:
```http
HTTP/1.1 200
Content-Type: application/json
[
{
"text": "AutoScalingGroupName",
"value": "AutoScalingGroupName",
"label": "AutoScalingGroupName"
},
{
"text": "ImageId",
"value": "ImageId",
"label": "ImageId"
},
{
"text": "InstanceId",
"value": "InstanceId",
"label": "InstanceId"
},
{
"text": "InstanceType",
"value": "InstanceType",
"label": "InstanceType"
}
]
```
2022-03-30 10:46:06 -05:00
## Query a data source
2021-02-22 12:44:24 -06:00
2022-03-30 10:46:06 -05:00
Queries a data source having a backend implementation.
`POST /api/ds/query`
> **Note:** Grafana's built-in data sources usually have a backend implementation.
**Example request for the Test data source**:
```http
POST /api/ds/query HTTP/1.1
Accept: application/json
Content-Type: application/json
{
"queries":[
{
"refId":"A",
"scenarioId":"csv_metric_values",
"datasource":{
"uid":"PD8C576611E62080A"
},
"format": "table"
"maxDataPoints":1848,
"intervalMs":200,
"stringInput":"1,20,90,30,5,0",
}
],
"from":"now-5m",
"to":"now"
}
```
JSON Body schema:
- **from/to** – Specifies the time range for the queries. The time can be either epoch timestamps in milliseconds or relative using Grafana time units. For example, `now-5m` .
- **queries** – Specifies one or more queries. Must contain at least 1.
- **queries.datasource.uid** – Specifies the UID of data source to be queried. Each query in the request must have a unique `datasource` .
- **queries.refId** – Specifies an identifier of the query. Defaults to "A".
- **queries.format** – Specifies the format the data should be returned in. Valid options are `time_series` or `table` depending on the data source.
- **queries.maxDataPoints** - Species the maximum amount of data points that a dashboard panel can render. Defaults to 100.
- **queries.intervalMs** - Specifies the time series time interval in milliseconds. Defaults to 1000.
In addition, specific properties of each data source should be added in a request (for example **queries.stringInput** as shown in the request above). To better understand how to form a query for a certain data source, use the Developer Tools in your browser of choice and inspect the HTTP requests being made to `/api/ds/query` .
**Example Test data source time series query response:**
```json
{
"results": {
"A": {
"frames": [
{
"schema": {
"refId": "A",
"fields": [
{
"name": "time",
"type": "time",
"typeInfo": {
"frame": "time.Time"
}
},
{
"name": "A-series",
"type": "number",
"typeInfo": {
"frame": "int64",
"nullable": true
}
}
]
},
"data": {
"values": [
[1644488152084, 1644488212084, 1644488272084, 1644488332084, 1644488392084, 1644488452084],
[1, 20, 90, 30, 5, 0]
]
}
}
]
}
}
}
```
2022-05-03 11:02:20 -05:00
#### Status codes
| Code | Description |
| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 200 | All data source queries returned a successful response. |
| 400 | Bad request due to invalid JSON, missing content type, missing or invalid fields, etc. Or one or more data source queries were unsuccessful. Refer to the body for more details. |
| 403 | Access denied. |
| 404 | Either the data source or plugin required to fulfil the request could not be found. |
| 500 | Unexpected error. Refer to the body and/or server logs for more details. |