Why Grafana's API?
Grafana is the go-to open-source platform for monitoring and observability. But most developers only use the UI. The Grafana HTTP API lets you automate everything: create dashboards, manage alerts, provision data sources — all programmatically.
Grafana Cloud free tier: 10K metrics, 50GB logs, 50GB traces. More than enough to get started.
Getting Started
1. Get Your API Key
Grafana Cloud (free): Sign up at grafana.com, go to Configuration → API Keys → Add API key.
Self-hosted: Same path in your Grafana instance.
export GRAFANA_URL="https://your-instance.grafana.net"
export GRAFANA_API_KEY="your-api-key"
2. List All Dashboards
curl -s -H "Authorization: Bearer $GRAFANA_API_KEY" \
"$GRAFANA_URL/api/search?type=dash-db" | jq '.[].title'
3. Create a Dashboard via API
import requests
GRAFANA_URL = "https://your-instance.grafana.net"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
dashboard = {
"dashboard": {
"title": "API Metrics Dashboard",
"panels": [
{
"title": "Request Rate",
"type": "timeseries",
"gridPos": {"h": 8, "w": 12, "x": 0, "y": 0},
"targets": [{
"expr": "rate(http_requests_total[5m])",
"legendFormat": "{{method}} {{path}}"
}]
},
{
"title": "Error Rate",
"type": "stat",
"gridPos": {"h": 8, "w": 12, "x": 12, "y": 0},
"targets": [{
"expr": "rate(http_requests_total{status=~'5..'}[5m])"
}]
}
],
"timezone": "browser"
},
"overwrite": False
}
resp = requests.post(f"{GRAFANA_URL}/api/dashboards/db", json=dashboard, headers=HEADERS)
print(f"Dashboard created: {resp.json()['url']}")
4. Manage Alerts Programmatically
alert_rule = {
"title": "High Error Rate",
"condition": "C",
"data": [{
"refId": "A",
"queryType": "",
"model": {"expr": "rate(http_requests_total{status=~'5..'}[5m])", "refId": "A"}
}],
"for": "5m"
}
resp = requests.post(f"{GRAFANA_URL}/api/v1/provisioning/alert-rules", json=alert_rule, headers=HEADERS)
print(f"Alert created: {resp.status_code}")
Node.js Example
const axios = require("axios");
const grafana = axios.create({
baseURL: "https://your-instance.grafana.net",
headers: { Authorization: "Bearer YOUR_API_KEY" }
});
// Get all dashboards
const { data } = await grafana.get("/api/search?type=dash-db");
console.log(`Found ${data.length} dashboards`);
// Get dashboard by UID
const dashboard = await grafana.get(`/api/dashboards/uid/${data[0].uid}`);
console.log(dashboard.data.dashboard.title);
// Create annotation (mark deployments, incidents)
await grafana.post("/api/annotations", {
text: "Deployed v2.1.0",
tags: ["deployment", "production"],
time: Date.now()
});
Common API Endpoints
| Endpoint | Method | Description |
|---|---|---|
| /api/search | GET | Search dashboards |
| /api/dashboards/db | POST | Create/update dashboard |
| /api/datasources | GET/POST | Manage data sources |
| /api/annotations | POST | Add annotations |
| /api/alerts | GET | List alerts |
| /api/org/users | GET | List organization users |
Use Cases
- CI/CD integration — auto-create dashboards per service deployment
- Multi-tenant monitoring — programmatically provision per-customer dashboards
- Incident response — auto-annotate dashboards during incidents
- Infrastructure as Code — version-control your dashboards alongside app code
Need to collect data for your Grafana dashboards? I build production-ready web scrapers and data pipelines. Check out my Apify actors or email me at spinov001@gmail.com for custom solutions.
How do you use Grafana's API? Share your setup in the comments!
Top comments (0)