Skip to main content

Data Sources API

The Data Sources API provides endpoints for managing data source configurations in Grafana.

Get All Data Sources

Retrieve all data sources for the current organization.
curl -X GET http://localhost:3000/api/datasources \
  -u admin:admin
id
integer
Data source internal ID
uid
string
Data source unique identifier
name
string
Data source name
type
string
Data source type (e.g., “prometheus”, “mysql”, “postgres”)
access
string
Access mode: “proxy” (via Grafana backend) or “direct” (from browser)
url
string
Data source URL
isDefault
boolean
Whether this is the default data source

Get Data Source by UID

Retrieve a single data source by its UID.
curl -X GET http://localhost:3000/api/datasources/uid/P1809F7CD0C75ACF3 \
  -u admin:admin
uid
string
required
Data source unique identifier

Create Data Source

Create a new data source.
curl -X POST http://localhost:3000/api/datasources \
  -u admin:admin \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Prometheus",
    "type": "prometheus",
    "url": "http://localhost:9090",
    "access": "proxy",
    "isDefault": false,
    "jsonData": {
      "httpMethod": "POST"
    }
  }'
name
string
required
Data source name
type
string
required
Data source type (e.g., “prometheus”, “mysql”, “postgres”)
url
string
required
Data source URL
access
string
default:"proxy"
Access mode: “proxy” or “direct”
database
string
Database name (for database data sources)
user
string
Database user (for database data sources)
basicAuth
boolean
default:"false"
Enable basic authentication
basicAuthUser
string
Basic auth username
isDefault
boolean
default:"false"
Set as default data source
jsonData
object
Additional data source configuration (varies by type)
secureJsonData
object
Secure configuration fields (passwords, API keys). These are encrypted when stored.
secureJsonData.password
string
Database password or API password
secureJsonData.basicAuthPassword
string
Basic authentication password

Update Data Source by UID

Update an existing data source.
curl -X PUT http://localhost:3000/api/datasources/uid/P1809F7CD0C75ACF3 \
  -u admin:admin \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Prometheus Updated",
    "type": "prometheus",
    "url": "http://localhost:9090",
    "access": "proxy",
    "isDefault": false,
    "jsonData": {
      "httpMethod": "POST"
    }
  }'
uid
string
required
Data source unique identifier
The request body uses the same parameters as creating a data source.

Delete Data Source by UID

Delete a data source by its UID.
curl -X DELETE http://localhost:3000/api/datasources/uid/P1809F7CD0C75ACF3 \
  -u admin:admin
uid
string
required
Data source unique identifier

Get Data Source by Name

Retrieve a data source by its name.
curl -X GET http://localhost:3000/api/datasources/name/Prometheus \
  -u admin:admin
name
string
required
Data source name
This endpoint is deprecated. Use the UID-based endpoint instead.

Get Data Source ID by Name

Retrieve a data source ID by its name.
curl -X GET http://localhost:3000/api/datasources/id/Prometheus \
  -u admin:admin
name
string
required
Data source name
This endpoint is deprecated. Use the UID-based endpoint instead.

Check Data Source Health

Send a health check request to a data source.
curl -X GET http://localhost:3000/api/datasources/uid/P1809F7CD0C75ACF3/health \
  -u admin:admin
uid
string
required
Data source unique identifier
status
string
Health status: “OK”, “ERROR”, or “UNKNOWN”
message
string
Health check message
details
object
Additional health check details (optional)

Permissions

If you are running Grafana Enterprise with Fine-grained access control enabled:
  • Read: Requires datasources:read permission
  • Create: Requires datasources:create permission
  • Update: Requires datasources:write permission with scope datasources:uid:<uid>
  • Delete: Requires datasources:delete permission with scope datasources:uid:<uid>
  • Query: Requires datasources:query permission with scope datasources:uid:<uid>

Build docs developers (and LLMs) love