Grafana API sandbox
Point a Grafana client at https://grafana.sandboxapis.dev, a base-URL swap. Paths are /api/... exactly as on a Grafana server: mcp-grafana takes `GRAFANA_URL=https://grafana.sandboxapis.dev` with any service-account token, grafana-client takes `GrafanaApi.from_url("https://grafana.sandboxapis.dev")`, and the Terraform provider takes it as `url`. Auth: any 'Authorization: Bearer' token, any Basic pair, or none; you are the data set's founding member, a Grafana server admin. THE DATA ENDS AT 00:00 UTC TODAY on the live host: that instant is "now", so a time range like now-6h to now is the data set's last six hours. WHAT IS RENDERED: this host emulates Grafana OSS 13.2.4. One folder per team (uid team-<team slug>), one dashboard per service (uid svc-<service slug>) with a timeseries panel per metric series, and one Prometheus datasource (uid prometheus) that IS the Prometheus host: /api/datasources/uid/prometheus/resources/api/v1/... and /api/datasources/proxy/uid/prometheus/api/v1/... answer exactly what prom.sandboxapis.dev answers, and POST /api/ds/query returns the same series as data frames. One Grafana-managed alert rule per canon monitor (one group per service, in its team's folder), linked to the panel of the series it watches: /api/prometheus/grafana/api/v1/rules, /api/v1/provisioning/alert-rules, the ruler API and the YAML export all list them, /api/v1/rules/history and /api/annotations carry every state change at the canon fire and resolve times, and the incident is an annotation region on its service's dashboard. The members are the users (organization roles from the data set's membership roles), the teams are the teams, and the organization's one group token is the token of its one service account (metadata only, never a key). WHAT IS NOT: Enterprise-only APIs (role-based access control, reporting, licensing, SAML, recording rules, team sync) answer OSS's own 404; LDAP and quotas are off; there are no public dashboards, snapshots, playlists, library elements, silences or contact points; no Loki datasource, no IRM incidents or OnCall; the app-platform APIs under /apis answer 404 (mcp-grafana then uses the /api paths); every write is refused (this universe is read-only). Live host only: no pinned snapshot exists for this provider yet. Check https://sandboxapis.dev/providers/grafana for the row-by-row picture.
Coverage badge
Deep174/181 · 96%
The share of read rows with a final answer — served and verified, a deviation, retired upstream, or a reviewed empty/refusal. Computed in the coverage manifest, copied here.
grafana.sandboxapis.devServed & verified
103 / 57%
Answering with real universe data, each response checked against Grafana's published spec by the conformance suite on this build.
The full read API
181
Every read surface Grafana publishes, deferred long tail included, minus the rows excluded by policy. Writes are out of scope: this universe is read-only.
Not served yet
78
Each returns an explicit, provider-shaped coverage error naming the gap — never invented data.
01 / The swap
No SDK of ours, no shim, no recorded fixtures. The same client library you already use, one environment variable different.
curl "https://grafana.sandboxapis.dev/api/search?type=dash-db"Verified drop-in clients
mcp-grafana2.1.1The versions the conformance suite drives against this host on every build — pinned in coverage/client-pins.yaml, and watched weekly for upstream releases, because a client library moving without us is how a shipped integration breaks silently.
02 / Coverage by family
All 181 rows the coverage manifest carries for Grafana, deferred long tail included and nothing capped. Open a family, or filter by path to find the exact endpoint your client calls.
Status — what a conformance test found
Mode — what kind of answer a row gets
A row with no mode shown has not been judged yet. Modes are the manifest's own words, from coverage/MODES.yaml; every empty and refuse carries a written reason and a review date before it counts as final.
Badge — where Deep starts
REST + GraphQL + git rows that are not `excluded`. Write operations are NOT rows (DECISIONS 2026-09-01 decision 9): they are counted in meta.write_operations and never enter this ratio.
181 read surfaces in 19 families
this data set models planned work as PagerDuty maintenance windows, not as Grafana silences, so the built-in alertmanager holds none, and its list is the CAPTURED empty array (2026-10-24)
this data set pages through PagerDuty's escalation policies, not through Grafana: the built-in alertmanager runs OSS 13.2.4's default configuration, whose one receiver ("empty") has no integration, so the contact point list is the CAPTURED empty array (2026-10-24)
no mute timing is configured in this data set's Grafana (planned work is PagerDuty maintenance windows), so the list is the CAPTURED empty array (2026-10-24)
no notification template is written in this data set's Grafana (it sends no notification of its own), so the list is the CAPTURED empty array (2026-10-24)
the Cortex-compatible form of the conversion list beside it: no rule was imported from a Prometheus rule file, so it is the CAPTURED empty YAML document {} (2026-10-24)
no rule was imported into this data set's Grafana from a Prometheus rule file (its rules are Grafana-managed), so the conversion API's list is the CAPTURED empty YAML document {} (2026-10-24)
no external alertmanager is configured (alertmanagersChoice internal, numExternalAlertmanagers 0 on /v1/ngalert), so the discovery lists are the CAPTURED empty {activeAlertManagers: [], droppedAlertManagers: []} (2026-10-24)
refuse — ENTAILED by the datasource list on the same host: this data set's Grafana has one datasource and it is Prometheus, so no alertmanager datasource exists, and OSS 13.2.4's own answer is CAPTURED as 400 {"message":"unexpected datasource type 'prometheus', expected alertmanager"} for the Prometheus uid and 404 {"message":"data source not found"} for any other (2026-10-24)
refuse — ENTAILED by the datasource list on the same host: this data set's Grafana has one datasource and it is Prometheus, so no alertmanager datasource exists, and OSS 13.2.4's own answer is CAPTURED as 400 {"message":"unexpected datasource type 'prometheus', expected alertmanager"} for the Prometheus uid and 404 {"message":"data source not found"} for any other (2026-10-24)
refuse — ENTAILED by the datasource list on the same host: this data set's Grafana has one datasource and it is Prometheus, so no alertmanager datasource exists, and OSS 13.2.4's own answer is CAPTURED as 400 {"message":"unexpected datasource type 'prometheus', expected alertmanager"} for the Prometheus uid and 404 {"message":"data source not found"} for any other (2026-10-24)
refuse — ENTAILED by the datasource list on the same host: this data set's Grafana has one datasource and it is Prometheus, so no alertmanager datasource exists, and OSS 13.2.4's own answer is CAPTURED as 400 {"message":"unexpected datasource type 'prometheus', expected alertmanager"} for the Prometheus uid and 404 {"message":"data source not found"} for any other (2026-10-24)
refuse — ENTAILED by the datasource list on the same host: this data set's Grafana has one datasource and it is Prometheus, so no alertmanager datasource exists, and OSS 13.2.4's own answer is CAPTURED as 400 {"message":"unexpected datasource type 'prometheus', expected alertmanager"} for the Prometheus uid and 404 {"message":"data source not found"} for any other (2026-10-24)
refuse — ENTAILED by the datasource list on the same host: this data set's Grafana has one datasource and it is Prometheus, so no alertmanager datasource exists, and OSS 13.2.4's own answer is CAPTURED as 400 {"message":"unexpected datasource type 'prometheus', expected alertmanager"} for the Prometheus uid and 404 {"message":"data source not found"} for any other (2026-10-24)
refuse — ENTAILED by the empty silence list (/alertmanager/grafana/api/v2/silences) on the same host: no silence exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 errutil alerting.notifications.silences.notFound "[alerting.notifications.silences.notFound] silence <id> not found" (2026-10-24)
refuse — ENTAILED by the datasource's own health check on the same host (rulerApiEnabled false): the one datasource is a Prometheus server, which has no ruler API, and OSS 13.2.4's own answer when asked for its ruler is CAPTURED as 500 {"message":"unexpected content type from upstream. expected YAML, got text/html; charset=utf-8"} (2026-10-24)
refuse — ENTAILED by the datasource's own health check on the same host (rulerApiEnabled false): the one datasource is a Prometheus server, which has no ruler API, and OSS 13.2.4's own answer when asked for its ruler is CAPTURED as 404 {"message":"404 page not found\n"} (2026-10-24)
refuse — ENTAILED by the datasource's own health check on the same host (rulerApiEnabled false): the one datasource is a Prometheus server, which has no ruler API, and OSS 13.2.4's own answer when asked for its ruler is CAPTURED as 404 {"message":"404 page not found\n"} (2026-10-24)
refuse — ENTAILED by the empty mute timing list (/v1/provisioning/mute-timings) on the same host: no mute timing exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"statusCode":404,"messageId":"alerting.notifications.time-intervals.notFound","message":"NotFound"} (2026-10-24)
refuse — ENTAILED by the empty mute timing list (/v1/provisioning/mute-timings) on the same host: no mute timing exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 with an empty body (2026-10-24)
refuse — ENTAILED by the empty template list (/v1/provisioning/templates) on the same host: no notification template exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"statusCode":404,"messageId":"alerting.notifications.templates.notFound","message":"NotFound"} (2026-10-24)
refuse — ENTAILED by the empty converted rule list (/convert/prometheus/config/v1/rules) on the same host: no rule imported from a Prometheus rule file, so no namespace or group of them exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 with an empty body (2026-10-24)
refuse — ENTAILED by the empty converted rule list (/convert/prometheus/config/v1/rules) on the same host: no rule imported from a Prometheus rule file, so no namespace or group of them exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 with an empty body (2026-10-24)
refuse — importing an Alertmanager configuration through the Prometheus conversion API is not implemented in OSS 13.2.4, whose own answer is CAPTURED as 501 {"message":"Not Implemented"} (2026-10-24)
refuse — ENTAILED by the empty converted rule list (/convert/prometheus/config/v1/rules) on the same host: no rule imported from a Prometheus rule file, so no namespace or group of them exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 with an empty body (2026-10-24)
refuse — ENTAILED by the empty converted rule list (/convert/prometheus/config/v1/rules) on the same host: no rule imported from a Prometheus rule file, so no namespace or group of them exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 with an empty body (2026-10-24)
refuse — no alerting admin configuration is set on this data set's Grafana server (alertmanagersChoice is the default internal one, /v1/ngalert says so), and OSS 13.2.4's own answer is CAPTURED as 404 {"message":"no admin configuration available"} (2026-10-24)
refuse — Query and resource caching is an Enterprise feature: Grafana's own openapi3.json at v13.2.4 tags the operation `enterprise`, and this host emulates Grafana OSS 13.2.4, whose router answers the route with its CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Label-based access control for a data source is an Enterprise feature: Grafana's own openapi3.json at v13.2.4 tags the operation `enterprise`, and this host emulates Grafana OSS 13.2.4, whose router answers the route with its CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Licensing is only available in Grafana Enterprise." (licensing.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Licensing is only available in Grafana Enterprise." (licensing.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Licensing is only available in Grafana Enterprise." (licensing.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Licensing is only available in Grafana Enterprise." (licensing.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Licensing is only available in Grafana Enterprise." (licensing.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — SAML authentication is an Enterprise feature: Grafana's own openapi3.json at v13.2.4 tags the operation `enterprise`, and this host emulates Grafana OSS 13.2.4, whose router answers the route with its CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Recorded queries is an Enterprise feature: Grafana's own openapi3.json at v13.2.4 tags the operation `enterprise`, and this host emulates Grafana OSS 13.2.4, whose router answers the route with its CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Recorded queries is an Enterprise feature: Grafana's own openapi3.json at v13.2.4 tags the operation `enterprise`, and this host emulates Grafana OSS 13.2.4, whose router answers the route with its CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Reporting is only available in Grafana Enterprise." (reporting.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Reporting is only available in Grafana Enterprise." (reporting.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Reporting is only available in Grafana Enterprise." (reporting.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Reporting is only available in Grafana Enterprise." (reporting.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Reporting is only available in Grafana Enterprise." (reporting.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Reporting is only available in Grafana Enterprise." (reporting.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Reporting is only available in Grafana Enterprise." (reporting.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — SAML authentication is an Enterprise feature: Grafana's own openapi3.json at v13.2.4 tags the operation `enterprise`, and this host emulates Grafana OSS 13.2.4, whose router answers the route with its CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — SAML authentication is an Enterprise feature: Grafana's own openapi3.json at v13.2.4 tags the operation `enterprise`, and this host emulates Grafana OSS 13.2.4, whose router answers the route with its CAPTURED 404 {"message":"Not found"} (2026-10-24)
the data set records no browser sign-in to its Grafana, so no user holds a session token, and each user's list is the CAPTURED empty array (2026-10-24)
anonymous access is off on this data set's Grafana (/api/frontend/settings reports anonymousEnabled false), so no anonymous device was ever seen, and the list is the CAPTURED empty array (2026-10-24)
anonymous access is off on this data set's Grafana, so no anonymous device was ever seen, and the search is the CAPTURED empty {totalCount: 0, devices: [], page, perPage} (2026-10-24)
generate — OPEN: the server's whole configuration (every grafana.ini section and value). Serving it would copy Grafana's AGPL default configuration text for a server this data set does not run, which ruling Q8 names as the one server-admin read the admin caller is not served. Answers the coverage 404
refuse — Active LDAP synchronisation is an Enterprise feature: Grafana's own openapi3.json at v13.2.4 tags the operation `enterprise`, and this host emulates Grafana OSS 13.2.4, whose router answers the route with its CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — LDAP is not enabled on this data set's Grafana server (no [auth.ldap] enabled = true; its /api/frontend/settings reports ldapEnabled false), and OSS 13.2.4's own answer is CAPTURED as 400 {"message":"LDAP is not enabled"} (2026-10-24)
refuse — LDAP is not enabled on this data set's Grafana server (no [auth.ldap] enabled = true; its /api/frontend/settings reports ldapEnabled false), and OSS 13.2.4's own answer is CAPTURED as 400 {"message":"LDAP is not enabled"} (2026-10-24)
refuse — quotas are not enabled on this data set's Grafana server ([quota] enabled = false, the OSS default), and under that setting OSS 13.2.4 answers every quota read with its own CAPTURED 500 {"message":"Failed to get org quotas"} (2026-10-24)
refuse — quotas are not enabled on this data set's Grafana server ([quota] enabled = false, the OSS default), and under that setting OSS 13.2.4 answers every quota read with its own CAPTURED 500 {"message":"failed to get quota"} (2026-10-24)
refuse — quotas are not enabled on this data set's Grafana server ([quota] enabled = false, the OSS default), and under that setting OSS 13.2.4 answers every quota read with its own CAPTURED 500 {"message":"failed to get quota"} (2026-10-24)
generate — OPEN: the server's JSON Web Key Set, whose keys are generated by the running server at first start. Serving one would invent key material no data set fact backs. Answers the coverage 404
refuse — quotas are not enabled on this data set's Grafana server ([quota] enabled = false, the OSS default), and under that setting OSS 13.2.4 answers every quota read with its own CAPTURED 400 {"statusCode":400,"messageId":"quota.bad-request","message":"BadRequest"} (2026-10-24)
no dashboard snapshot was ever taken in this data set's Grafana, so the snapshot search is the CAPTURED empty array (2026-10-24)
no dashboard in this data set's Grafana is published as a public dashboard, so the list is the CAPTURED empty {publicDashboards: [], totalCount: 0, page, perPage} (2026-10-24)
every dashboard in this data set's Grafana is provisioned into its team's folder and carries no permission of its own (it inherits the folder's, which /folders/{folder_uid}/permissions serves), and a provisioned dashboard's own list is CAPTURED as [] (2026-10-24)
generate — OPEN: with no home dashboard set, Grafana answers its built-in default home dashboard, a vendor-authored JSON document (welcome, news and getting-started panels) rather than anything this data set holds. Answers the coverage 404
refuse — ENTAILED by the empty public dashboard list (/dashboards/public-dashboards) on the same host: no public dashboard exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"statusCode":404,"messageId":"publicdashboards.notFound","message":"Dashboard not found"} (2026-10-24)
refuse — ENTAILED by the empty public dashboard list (/dashboards/public-dashboards) on the same host: no public dashboard and so no access token exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 400 {"statusCode":400,"messageId":"publicdashboards.invalidAccessToken","message":"Invalid access token"} (2026-10-24)
refuse — ENTAILED by the empty public dashboard list (/dashboards/public-dashboards) on the same host: no public dashboard and so no access token exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 400 {"statusCode":400,"messageId":"publicdashboards.invalidAccessToken","message":"Invalid access token"} (2026-10-24)
refuse — ENTAILED by the empty public dashboard list (/dashboards/public-dashboards) on the same host: no public dashboard and so no access token exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 400 {"statusCode":400,"messageId":"publicdashboards.invalidAccessToken","message":"Invalid access token"} (2026-10-24)
refuse — ENTAILED by the empty snapshot list (/dashboard/snapshots) on the same host: no snapshot and so no delete key exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"message":"Snapshot not found"} (2026-10-24)
refuse — ENTAILED by the empty snapshot list (/dashboard/snapshots) on the same host: no snapshot exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"statusCode":404,"messageId":"dashboardsnapshots.not-found","message":"Snapshot not found"} (2026-10-24)
no correlation between datasources is configured (this data set's Grafana has one datasource), so the list is the CAPTURED empty {correlations: [], totalCount: 0, ...} (2026-10-24)
the one datasource has no correlation configured, so its list is the CAPTURED empty array (2026-10-24)
refuse — ENTAILED by the empty correlation lists (/datasources/correlations and the datasource's own) on the same host: no correlation exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"message":"Correlation not found"} (2026-10-24)
the data set records no browser sign-in to its Grafana, so the caller holds no session token, and the list is the CAPTURED empty array (2026-10-24)
refuse — the email verification and update flow is not enabled on this data set's Grafana server (no [user] verify_email_enabled), so OSS 13.2.4 does not register the route and answers its router's CAPTURED 404 {"message":"Not found"} (2026-10-24)
generate — OPEN: a resource's permission list as the server's role store holds it (managed role names, role database ids and the full action vocabulary per role), which would be invented ids and vendor vocabulary. Answers the coverage 404; the folder permission list beside it is served
refuse — Only available in Grafana Enterprise: "Role-based access control API is only available in Grafana Cloud or Grafana Enterprise." (access_control.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Role-based access control API is only available in Grafana Cloud or Grafana Enterprise." (access_control.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Role-based access control API is only available in Grafana Cloud or Grafana Enterprise." (access_control.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Role-based access control API is only available in Grafana Cloud or Grafana Enterprise." (access_control.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Role-based access control API is only available in Grafana Cloud or Grafana Enterprise." (access_control.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Role-based access control API is only available in Grafana Cloud or Grafana Enterprise." (access_control.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Role-based access control API is only available in Grafana Cloud or Grafana Enterprise." (access_control.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Role-based access control API is only available in Grafana Cloud or Grafana Enterprise." (access_control.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
this data set's Grafana has never been migrated to a Grafana Cloud stack, so the session list is the CAPTURED empty {sessions: []} (2026-10-24)
no cloud migration session exists, so no snapshot does either, and OSS 13.2.4 answers the list for any session id with the CAPTURED empty {snapshots: []} (2026-10-24)
refuse — ENTAILED by the empty migration session list (/cloudmigration/migration) on the same host: no cloud migration session exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"statusCode":404,"messageId":"cloudmigrations.sessionNotFound","message":"NotFound"} (2026-10-24)
refuse — ENTAILED by the empty migration session list (/cloudmigration/migration) on the same host: no cloud migration session exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"statusCode":404,"messageId":"cloudmigrations.sessionNotFound","message":"NotFound"} (2026-10-24)
generate — OPEN: a constant graph of which Grafana resource types a cloud migration moves together, Grafana's own vocabulary rather than a fact about this data set, not covered by the narrow vocabulary rulings. Answers the coverage 404
refuse — no cloud migration token has been created on this data set's Grafana server (it migrates to no Grafana Cloud stack), and OSS 13.2.4's own answer with none is CAPTURED as 500 {"message":"fetching cloud migration access token"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Team Sync is only available in Grafana Enterprise." (team_sync.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
refuse — Only available in Grafana Enterprise: "Team Sync is only available in Grafana Enterprise." (team_sync.md, docs/sources/developer-resources/api-reference/http-api/api-legacy/ at v13.2.4). This host emulates Grafana OSS 13.2.4, whose router answers the route with its own CAPTURED 404 {"message":"Not found"} (2026-10-24)
no library panel or variable was created in this data set's Grafana (its dashboards carry their panels inline), so the search is the CAPTURED empty {result: {totalCount: 0, elements: [], ...}} (2026-10-24)
refuse — ENTAILED by the empty library element search (/library-elements) on the same host: no library panel or variable exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"message":"library element could not be found"} (2026-10-24)
refuse — ENTAILED by the empty library element search (/library-elements) on the same host: no library panel or variable exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"message":"library element could not be found","title":"Not found"} (2026-10-24)
refuse — ENTAILED by the empty library element search (/library-elements) on the same host: no library panel or variable exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"message":"library element could not be found"} (2026-10-24)
no playlist was created in this data set's Grafana, so the list is the CAPTURED empty array (2026-10-24)
refuse — ENTAILED by the empty playlist list (/playlists) on the same host: no playlist exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"message":"playlists.playlist.grafana.app \"<uid>\" not found","traceID":""} (2026-10-24)
refuse — ENTAILED by the empty playlist list (/playlists) on the same host: no playlist exists in this data set's Grafana, so every id is unknown, and OSS 13.2.4's own answer is CAPTURED as 404 {"message":"playlists.playlist.grafana.app \"<uid>\" not found","traceID":""} (2026-10-24)
generate — OPEN: Grafana's own list of search sort options, whose required display names and descriptions are vendor UI text (and carry an en-dash this host does not author). Answers the coverage 404 until a vocabulary ruling covers it
the data set records no Explore session in its Grafana, so no query is in anyone's history, and the search is the CAPTURED empty {result: {totalCount: 0, queryHistory: null, ...}} (2026-10-24)
generate — OPEN: the server's external snapshot configuration, whose OSS defaults name a vendor-run external snapshot service; that is default configuration text, not a fact this data set records. Answers the coverage 404
03 / What's simulated
Each line below is one assertion in the conformance suite named beside it — run on every build, over one artifact, through the real renderers. Nothing is claimed here that no expect checks.
The dashboard for the incident's service charts the Prometheus host's own series through its datasource, sample for sample, and the alert rule watching that series is linked to the panel that charts it.
Against Prometheus · parity/incident-parity.test.ts
A rule's Alerting annotation is written at the canon fire time, which is the instant the incident opens on PagerDuty and the instant Prometheus starts reporting the alert as firing, on the service the rule's service label names.
Against PagerDuty, Prometheus · parity/incident-parity.test.ts
05 / Pinned snapshots
No snapshot is pinned for Grafana yet — the live host is the only way to reach it, and its data moves. Pin a provider you test against before you depend on exact values.
Need an endpoint that is not served yet?
Every row Grafana's manifest carries is on this page, so “not here” is an answer rather than a gap in the rendering. Tell us which path and which client, and it moves up the queue — the order is set by what people ask for.