{"openapi":"3.1.0","info":{"title":"Grafana Cloud (BYOK) API","version":"0.1.0","description":"Grafana Cloud (BYOK) lets an AI assistant read your own Grafana Cloud data through the Grafana Cloud API with a key you supply (service account token). Read-only: 10 tools (get_current_user, get_current_org, get_health, search_dashboards, get_dashboard, list_folders, list_data_sources, list_alert_rules, list_annotations, search_teams). The BYOK key travels with each request, is used for that one...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-grafana.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-grafana/docs"},"termsOfService":"https://connectorbay.com/byok-grafana/terms"},"servers":[{"url":"https://byok-grafana.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-grafana/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_current_user":{"post":{"operationId":"get_current_user","summary":"Show the identity the token resolves to in your stack: login, name, email, organization id and admin flag. Use for \"Whic","description":"Show the identity the token resolves to in your stack: login, name, email, organization id and admin flag. Use for \"Which Grafana identity is my token using\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stack":{"description":"Your Grafana Cloud stack name: the part before .grafana.net, for example 'mystack' for mystack.grafana.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Stack","type":"string"}},"required":["stack"],"title":"get_current_userArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_current_org":{"post":{"operationId":"get_current_org","summary":"Show the current Grafana organization of your stack: id, name and address. Use for \"What is my Grafana organization call","description":"Show the current Grafana organization of your stack: id, name and address. Use for \"What is my Grafana organization called\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stack":{"description":"Your Grafana Cloud stack name: the part before .grafana.net, for example 'mystack' for mystack.grafana.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Stack","type":"string"}},"required":["stack"],"title":"get_current_orgArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_health":{"post":{"operationId":"get_health","summary":"Show the Grafana version, build commit and database status of your stack. Use for \"Which Grafana version is my stack run","description":"Show the Grafana version, build commit and database status of your stack. Use for \"Which Grafana version is my stack running\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stack":{"description":"Your Grafana Cloud stack name: the part before .grafana.net, for example 'mystack' for mystack.grafana.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Stack","type":"string"}},"required":["stack"],"title":"get_healthArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_dashboards":{"post":{"operationId":"search_dashboards","summary":"Search dashboards and folders by title, tag or type. Returns uid, title, folder, tags and URL; use the uid with get_dash","description":"Search dashboards and folders by title, tag or type. Returns uid, title, folder, tags and URL; use the uid with get_dashboard. Use for \"Which dashboards do I have that mention latency\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stack":{"description":"Your Grafana Cloud stack name: the part before .grafana.net, for example 'mystack' for mystack.grafana.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Stack","type":"string"},"query":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text to match in dashboard or folder titles.","title":"Query"},"type":{"anyOf":[{"enum":["dash-db","dash-folder"],"type":"string"},{"type":"null"}],"default":null,"description":"Restrict to dash-db (dashboards) or dash-folder (folders).","title":"Type"},"tag":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items with this tag.","title":"Tag"},"starred":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to list only dashboards you starred.","title":"Starred"},"sort":{"anyOf":[{"enum":["alpha-asc","alpha-desc"],"type":"string"},{"type":"null"}],"default":"alpha-asc","description":"Title order: alpha-asc or alpha-desc.","title":"Sort"},"limit":{"anyOf":[{"maximum":5000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many results to return (1 to 5000).","title":"Limit"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["stack"],"title":"search_dashboardsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_dashboard":{"post":{"operationId":"get_dashboard","summary":"Get one dashboard by uid: title, tags, refresh and time range, plus metadata such as folder, version, who last changed i","description":"Get one dashboard by uid: title, tags, refresh and time range, plus metadata such as folder, version, who last changed it and when. Use for \"When was dashboard abc123 last updated and who changed it\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stack":{"description":"Your Grafana Cloud stack name: the part before .grafana.net, for example 'mystack' for mystack.grafana.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Stack","type":"string"},"uid":{"description":"Dashboard uid as returned by search_dashboards, for example 'cIBgcSjkk'.","maxLength":200,"title":"Uid","type":"string"}},"required":["stack","uid"],"title":"get_dashboardArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_folders":{"post":{"operationId":"list_folders","summary":"List folders of your stack (top level, or the children of one parent folder) with uid and title. Use for \"What dashboard","description":"List folders of your stack (top level, or the children of one parent folder) with uid and title. Use for \"What dashboard folders exist in my Grafana\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stack":{"description":"Your Grafana Cloud stack name: the part before .grafana.net, for example 'mystack' for mystack.grafana.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Stack","type":"string"},"parent_uid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Uid of a parent folder to list its sub-folders; leave out for the top level.","title":"Parent Uid"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many folders to return (1 to 1000).","title":"Limit"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["stack"],"title":"list_foldersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_data_sources":{"post":{"operationId":"list_data_sources","summary":"List the data sources configured in your stack with name, type, uid and whether each is the default. Use for \"Which data","description":"List the data sources configured in your stack with name, type, uid and whether each is the default. Use for \"Which data sources are configured in my Grafana\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stack":{"description":"Your Grafana Cloud stack name: the part before .grafana.net, for example 'mystack' for mystack.grafana.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Stack","type":"string"}},"required":["stack"],"title":"list_data_sourcesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_alert_rules":{"post":{"operationId":"list_alert_rules","summary":"List all Grafana-managed alert rules with title, folder, rule group, evaluation interval, paused flag, labels and last u","description":"List all Grafana-managed alert rules with title, folder, rule group, evaluation interval, paused flag, labels and last update. Use for \"Which alert rules do I have and are any paused\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stack":{"description":"Your Grafana Cloud stack name: the part before .grafana.net, for example 'mystack' for mystack.grafana.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Stack","type":"string"}},"required":["stack"],"title":"list_alert_rulesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_annotations":{"post":{"operationId":"list_annotations","summary":"List annotations (events marked on dashboards, including alert state changes) in a time range, newest first. Use for \"Wh","description":"List annotations (events marked on dashboards, including alert state changes) in a time range, newest first. Use for \"What annotations were added to my dashboards today\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stack":{"description":"Your Grafana Cloud stack name: the part before .grafana.net, for example 'mystack' for mystack.grafana.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Stack","type":"string"},"from_time":{"anyOf":[{"maximum":9999999999999,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Start of the range as epoch milliseconds.","title":"From Time"},"to_time":{"anyOf":[{"maximum":9999999999999,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"End of the range as epoch milliseconds.","title":"To Time"},"dashboard_uid":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only annotations of the dashboard with this uid.","title":"Dashboard Uid"},"type":{"anyOf":[{"enum":["alert","annotation"],"type":"string"},{"type":"null"}],"default":null,"description":"Restrict to alert or annotation entries.","title":"Type"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many annotations to return (1 to 1000).","title":"Limit"}},"required":["stack"],"title":"list_annotationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_teams":{"post":{"operationId":"search_teams","summary":"Search teams in your stack by name with member counts. Use for \"How many members does the platform team have in Grafana\"","description":"Search teams in your stack by name with member counts. Use for \"How many members does the platform team have in Grafana\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"stack":{"description":"Your Grafana Cloud stack name: the part before .grafana.net, for example 'mystack' for mystack.grafana.net.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Stack","type":"string"},"query":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text to match in team names.","title":"Query"},"perpage":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many teams to return (1 to 1000).","title":"Perpage"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["stack"],"title":"search_teamsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}