Grafana API sandbox

Grafana

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.

REST · 181 endpointsMCP-ready

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.

Live host
grafana.sandboxapis.dev
Pinned hosts
None yet
Serving since
2026-10-24
Lifecycle
Live

Served & 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

Point your client at a different base URL.

No SDK of ours, no shim, no recorded fixtures. The same client library you already use, one environment variable different.

shell
curl "https://grafana.sandboxapis.dev/api/search?type=dash-db"

Verified drop-in clients

  • mcp-grafana2.1.1

The 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

Every read surface, grouped the way Grafana groups it.

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

served & verified
answers with real universe data, and this build checked that response against the vendor's spec.
deviation
served and faithful to the real provider, but failing the vendored spec — usually a bug in the spec.
retired
the vendor removed the endpoint; snapshots pinned before that date still serve it.
planned / deferred
not served yet — an explicit coverage error naming the gap, never invented data.
excluded
out of the claim by policy (writes, and surfaces we refuse); not in any denominator on this page.

Mode — what kind of answer a row gets

derive
the response is computed from artifact rows that already exist
generate
canon does not carry this yet; the generator will produce it, then derive
empty
the true answer for this universe is an empty collection — reason + reviewed date required
refuse
mirror the provider's OWN refusal (e.g. its 403 for a non-admin token) — reason + reviewed date required
read-only
a write named in the manifest because clients probe it; the read-only 403 IS its final response, and it never joins the badge denominator
scratch
a write this replica ACCEPTS, into a per-key 24-hour overlay, answering with the provider's own success shape - reason + reviewed date required. The compiled artifact is unchanged and no other caller ever sees the row; a caller WITHOUT a scratch-enabled key gets the read-only refusal on the identical path. Like read-only it never joins the badge denominator (founder ruling 5, 2026-09-17: the published figure has meant READ operations served since A0.1), and unlike read-only it ANSWERS, so the generation report counts it in its own `scratch` column rather than in (excluded). Scratch never creates a pull request, a branch, a commit or a diff - those are canon structure the overlay cannot invent

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

Full
every published read row has a final answer
Deep
60% up to 100%
Partial
25% up to 60%
Preview
under 25%

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

alerting36 of 55 served & verified
GET
/prometheus/{DatasourceUID}/api/v1/alerts
served & verified
Core
GET
/prometheus/{DatasourceUID}/api/v1/rules
served & verified
Core
GET
/prometheus/grafana/api/v1/alerts
served & verified
Core
GET
/prometheus/grafana/api/v1/rules
served & verified
Core
GET
/v1/provisioning/alert-rules
served & verified
Core
GET
/v1/provisioning/alert-rules/{UID}
served & verified
Core
GET
/alertmanager/grafana/api/v2/alerts
served & verified
Next
GET
/alertmanager/grafana/api/v2/alerts/groups
served & verified
Next
GET
/alertmanager/grafana/api/v2/silences

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)

served & verified
Next
GET
/alertmanager/grafana/config/api/v1/receivers
served & verified
Next
GET
/ruler/grafana/api/v1/export/rules
served & verified
Next
GET
/ruler/grafana/api/v1/rule/{RuleUID}
served & verified
Next
GET
/ruler/grafana/api/v1/rule/{RuleUID}/versions
served & verified
Next
GET
/ruler/grafana/api/v1/rules
served & verified
Next
GET
/ruler/grafana/api/v1/rules/{Namespace}
served & verified
Next
GET
/ruler/grafana/api/v1/rules/{Namespace}/{Groupname}
served & verified
Next
GET
/v1/provisioning/alert-rules/{UID}/export
served & verified
Next
GET
/v1/provisioning/alert-rules/export
served & verified
Next
GET
/v1/provisioning/contact-points

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)

served & verified
Next
GET
/v1/provisioning/contact-points/export
served & verified
Next
GET
/v1/provisioning/folder/{FolderUID}/rule-groups/{Group}
served & verified
Next
GET
/v1/provisioning/folder/{FolderUID}/rule-groups/{Group}/export
served & verified
Next
GET
/v1/provisioning/mute-timings

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)

served & verified
Next
GET
/v1/provisioning/mute-timings/export
served & verified
Next
GET
/v1/provisioning/policies
served & verified
Next
GET
/v1/provisioning/policies/export
served & verified
Next
GET
/v1/provisioning/templates

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)

served & verified
Next
GET
/v1/rules/history
served & verified
Next
GET
/alertmanager/grafana/api/v2/status
served & verified
Long tail
GET
/alertmanager/grafana/config/api/v1/alerts
served & verified
Long tail
GET
/alertmanager/grafana/config/history
served & verified
Long tail
GET
/convert/api/prom/rules

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)

served & verified
Long tail
GET
/convert/prometheus/config/v1/rules

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)

served & verified
Long tail
POST
/v1/eval
served & verified
Long tail
GET
/v1/ngalert
served & verified
Long tail
GET
/v1/ngalert/alertmanagers

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)

served & verified
Long tail
GET
/alertmanager/{DatasourceUID}/api/v2/alerts

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)

deferred
Next
GET
/alertmanager/{DatasourceUID}/api/v2/alerts/groups

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)

deferred
Next
GET
/alertmanager/{DatasourceUID}/api/v2/silence/{SilenceId}

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)

deferred
Next
GET
/alertmanager/{DatasourceUID}/api/v2/silences

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)

deferred
Next
GET
/alertmanager/{DatasourceUID}/api/v2/status

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)

deferred
Next
GET
/alertmanager/{DatasourceUID}/config/api/v1/alerts

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)

deferred
Next
GET
/alertmanager/grafana/api/v2/silence/{SilenceId}

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)

deferred
Next
GET
/ruler/{DatasourceUID}/api/v1/rules

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)

deferred
Next
GET
/ruler/{DatasourceUID}/api/v1/rules/{Namespace}

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)

deferred
Next
GET
/ruler/{DatasourceUID}/api/v1/rules/{Namespace}/{Groupname}

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)

deferred
Next
GET
/v1/provisioning/mute-timings/{name}

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)

deferred
Next
GET
/v1/provisioning/mute-timings/{name}/export

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)

deferred
Next
GET
/v1/provisioning/templates/{name}

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)

deferred
Next
GET
/convert/api/prom/rules/{NamespaceTitle}

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)

deferred
Long tail
GET
/convert/api/prom/rules/{NamespaceTitle}/{Group}

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)

deferred
Long tail
GET
/convert/api/v1/alerts

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)

deferred
Long tail
GET
/convert/prometheus/config/v1/rules/{NamespaceTitle}

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)

deferred
Long tail
GET
/convert/prometheus/config/v1/rules/{NamespaceTitle}/{Group}

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)

deferred
Long tail
GET
/v1/ngalert/admin_config

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)

deferred
Long tail
enterprise0 of 19 served & verified
GET
/datasources/{dataSourceUID}/cache

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)

deferred
Long tail
GET
/datasources/uid/{uid}/lbac/teams

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)

deferred
Long tail
GET
/licensing/check

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)

deferred
Long tail
GET
/licensing/custom-permissions

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)

deferred
Long tail
GET
/licensing/custom-permissions-csv

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)

deferred
Long tail
GET
/licensing/refresh-stats

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)

deferred
Long tail
GET
/licensing/token

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)

deferred
Long tail
GET
/logout/saml

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)

deferred
Long tail
GET
/recording-rules

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)

deferred
Long tail
GET
/recording-rules/writer

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)

deferred
Long tail
GET
/reports

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)

deferred
Long tail
GET
/reports/{id}

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)

deferred
Long tail
GET
/reports/dashboards/{uid}

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)

deferred
Long tail
GET
/reports/images/:image

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)

deferred
Long tail
GET
/reports/render/csvs

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)

deferred
Long tail
GET
/reports/render/pdfs

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)

deferred
Long tail
GET
/reports/settings

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)

deferred
Long tail
GET
/saml/metadata

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)

deferred
Long tail
GET
/saml/slo

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)

deferred
Long tail
admin6 of 15 served & verified
GET
/admin/stats
served & verified
Next
GET
/admin/users/{user_id}/auth-tokens

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)

served & verified
Long tail
GET
/anonymous/devices

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)

served & verified
Long tail
GET
/anonymous/search

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)

served & verified
Long tail
GET
/v1/sso-settings
served & verified
Long tail
GET
/v1/sso-settings/{key}
served & verified
Long tail
GET
/admin/settings

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

deferred
Next
GET
/admin/ldap-sync-status

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)

deferred
Long tail
GET
/admin/ldap/{user_name}

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)

deferred
Long tail
GET
/admin/ldap/status

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)

deferred
Long tail
GET
/admin/users/{user_id}/quotas

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)

deferred
Long tail
GET
/org/quotas

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)

deferred
Long tail
GET
/orgs/{org_id}/quotas

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)

deferred
Long tail
GET
/signing-keys/keys

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

deferred
Long tail
GET
/user/quotas

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)

deferred
Long tail
dashboards7 of 14 served & verified
GET
/dashboards/uid/{uid}
served & verified
Core
GET
/dashboard/snapshots

no dashboard snapshot was ever taken in this data set's Grafana, so the snapshot search is the CAPTURED empty array (2026-10-24)

served & verified
Long tail
GET
/dashboards/public-dashboards

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)

served & verified
Long tail
GET
/dashboards/tags
served & verified
Long tail
GET
/dashboards/uid/{uid}/permissions

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)

served & verified
Long tail
GET
/dashboards/uid/{uid}/versions
served & verified
Long tail
GET
/dashboards/uid/{uid}/versions/{DashboardVersionID}
served & verified
Long tail
GET
/dashboards/home

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

deferred
Long tail
GET
/dashboards/uid/{dashboardUid}/public-dashboards

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)

deferred
Long tail
GET
/public/dashboards/{accessToken}

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)

deferred
Long tail
GET
/public/dashboards/{accessToken}/annotations

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)

deferred
Long tail
POST
/public/dashboards/{accessToken}/panels/{panelId}/query

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)

deferred
Long tail
GET
/snapshots-delete/{deleteKey}

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)

deferred
Long tail
GET
/snapshots/{key}

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)

deferred
Long tail
datasources11 of 12 served & verified
GET
/datasources
served & verified
Core
GET
/datasources/name/{name}
served & verified
Core
GET
/datasources/proxy/uid/{uid}/{datasource_proxy_route}
served & verified
Core
POST
/datasources/proxy/uid/{uid}/{datasource_proxy_route}
served & verified
Core
GET
/datasources/uid/{uid}
served & verified
Core
GET
/datasources/uid/{uid}/resources/{datasource_proxy_route}
served & verified
Core
POST
/ds/query
served & verified
Core
GET
/datasources/uid/{uid}/health
served & verified
Next
GET
/datasources/correlations

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)

served & verified
Long tail
GET
/datasources/id/{name}
served & verified
Long tail
GET
/datasources/uid/{sourceUID}/correlations

the one datasource has no correlation configured, so its list is the CAPTURED empty array (2026-10-24)

served & verified
Long tail
GET
/datasources/uid/{sourceUID}/correlations/{correlationUID}

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)

deferred
Long tail
users11 of 12 served & verified
GET
/user
served & verified
Next
GET
/user/orgs
served & verified
Next
GET
/user/teams
served & verified
Next
GET
/users
served & verified
Next
GET
/users/{user_id}
served & verified
Next
GET
/users/{user_id}/orgs
served & verified
Next
GET
/users/{user_id}/teams
served & verified
Next
GET
/users/lookup
served & verified
Next
GET
/users/search
served & verified
Next
GET
/user/auth-tokens

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)

served & verified
Long tail
GET
/user/preferences
served & verified
Long tail
GET
/user/email/update

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)

deferred
Long tail
access_control1 of 10 served & verified
GET
/access-control/{resource}/description
served & verified
Long tail
GET
/access-control/{resource}/{resourceID}

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

deferred
Long tail
GET
/access-control/roles

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)

deferred
Long tail
GET
/access-control/roles/{roleUID}

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)

deferred
Long tail
GET
/access-control/roles/{roleUID}/assignments

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)

deferred
Long tail
GET
/access-control/status

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)

deferred
Long tail
GET
/access-control/teams/{teamId}/roles

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)

deferred
Long tail
POST
/access-control/teams/roles/search

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)

deferred
Long tail
GET
/access-control/users/{userId}/roles

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)

deferred
Long tail
POST
/access-control/users/roles/search

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)

deferred
Long tail
org10 of 10 served & verified
GET
/org
served & verified
Next
GET
/org/users
served & verified
Next
GET
/org/users/lookup
served & verified
Next
GET
/org/invites
served & verified
Long tail
GET
/org/preferences
served & verified
Long tail
GET
/orgs
served & verified
Long tail
GET
/orgs/{org_id}
served & verified
Long tail
GET
/orgs/{org_id}/users
served & verified
Long tail
GET
/orgs/{org_id}/users/search
served & verified
Long tail
GET
/orgs/name/{org_name}
served & verified
Long tail
migrations2 of 6 served & verified
GET
/cloudmigration/migration

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)

served & verified
Long tail
GET
/cloudmigration/migration/{uid}/snapshots

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)

served & verified
Long tail
GET
/cloudmigration/migration/{uid}

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)

deferred
Long tail
GET
/cloudmigration/migration/{uid}/snapshot/{snapshotUid}

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)

deferred
Long tail
GET
/cloudmigration/resources/dependencies

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

deferred
Long tail
GET
/cloudmigration/token

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)

deferred
Long tail
teams4 of 6 served & verified
GET
/teams/{team_id}
served & verified
Next
GET
/teams/{team_id}/members
served & verified
Next
GET
/teams/search
served & verified
Next
GET
/teams/{team_id}/preferences
served & verified
Long tail
GET
/teams/{teamId}/groups

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)

deferred
Long tail
GET
/teams/{teamId}/groups/search

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)

deferred
Long tail
folders4 of 4 served & verified
GET
/folders
served & verified
Core
GET
/folders/{folder_uid}
served & verified
Next
GET
/folders/{folder_uid}/counts
served & verified
Long tail
GET
/folders/{folder_uid}/permissions
served & verified
Long tail
library_elements1 of 4 served & verified
GET
/library-elements

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)

served & verified
Long tail
GET
/library-elements/{library_element_uid}

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)

deferred
Long tail
GET
/library-elements/{library_element_uid}/connections/

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)

deferred
Long tail
GET
/library-elements/name/{library_element_name}

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)

deferred
Long tail
annotations3 of 3 served & verified
GET
/annotations
served & verified
Core
GET
/annotations/{annotation_id}
served & verified
Next
GET
/annotations/tags
served & verified
Long tail
playlists1 of 3 served & verified
GET
/playlists

no playlist was created in this data set's Grafana, so the list is the CAPTURED empty array (2026-10-24)

served & verified
Long tail
GET
/playlists/{uid}

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)

deferred
Long tail
GET
/playlists/{uid}/items

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)

deferred
Long tail
service_accounts3 of 3 served & verified
GET
/serviceaccounts/{serviceAccountId}
served & verified
Next
GET
/serviceaccounts/{serviceAccountId}/tokens
served & verified
Next
GET
/serviceaccounts/search
served & verified
Next
search1 of 2 served & verified
GET
/search
served & verified
Core
GET
/search/sorting

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

deferred
Long tail
health1 of 1 served & verified
GET
/health
served & verified
Core
query_history1 of 1 served & verified
GET
/query-history

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)

served & verified
Long tail
snapshots0 of 1 served & verified
GET
/snapshot/shared-options

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

deferred
Long tail

03 / What's simulated

One data set, rendered in Grafana's dialect.

What another provider has to agree with, and the test that makes it

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.

05 / Pinned snapshots

Universes that never change, on their own hostnames.

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.

Request coverage