{"openapi":"3.1.0","info":{"title":"Grafana Alerting (BYOK) API","version":"0.1.0","description":"Grafana Alerting (BYOK) lets an AI assistant read your own Grafana Alerting data through the Grafana Alerting API with a key you supply (service account token (Viewer role is enough)). Read-only: 8 tools (list_contact_points, get_notification_policy_tree, list_mute_timings, get_mute_timing, list_message_templates, get_message_template, get_alert_rule, get_alert_rule_group). The BYOK key travels...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-grafana-alerting.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-grafana-alerting/docs"},"termsOfService":"https://connectorbay.com/byok-grafana-alerting/terms"},"servers":[{"url":"https://byok-grafana-alerting.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-grafana-alerting/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/list_contact_points":{"post":{"operationId":"list_contact_points","summary":"List alert contact points with name, type (email, slack, pagerduty, webhook ...), uid and provenance. Connection setting","description":"List alert contact points with name, type (email, slack, pagerduty, webhook ...), uid and provenance. Connection settings are left out. Optional name filter. Use for \"Which alert contact points does my Grafana stack have\".","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"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only contact points with exactly this name.","title":"Name"}},"required":["stack"],"title":"list_contact_pointsArguments","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_notification_policy_tree":{"post":{"operationId":"get_notification_policy_tree","summary":"Get the notification policy tree: default receiver, grouping, timing, mute intervals and nested routes with matchers. Us","description":"Get the notification policy tree: default receiver, grouping, timing, mute intervals and nested routes with matchers. Use for \"How are Grafana alert notifications routed\".","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_notification_policy_treeArguments","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_mute_timings":{"post":{"operationId":"list_mute_timings","summary":"List mute timings (recurring windows when notifications are silenced) with their time intervals. Use for \"Which mute tim","description":"List mute timings (recurring windows when notifications are silenced) with their time intervals. Use for \"Which mute timings are set in Grafana alerting\".","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_mute_timingsArguments","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_mute_timing":{"post":{"operationId":"get_mute_timing","summary":"Get one mute timing by name with its time intervals. Use for \"Show the Grafana mute timing weekends\".","description":"Get one mute timing by name with its time intervals. Use for \"Show the Grafana mute timing weekends\".","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"},"name":{"description":"Mute timing name from list_mute_timings.","maxLength":200,"title":"Name","type":"string"}},"required":["stack","name"],"title":"get_mute_timingArguments","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_message_templates":{"post":{"operationId":"list_message_templates","summary":"List notification template groups with name, template text, version and provenance. Use for \"Which Grafana notification ","description":"List notification template groups with name, template text, version and provenance. Use for \"Which Grafana notification templates exist\".","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_message_templatesArguments","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_message_template":{"post":{"operationId":"get_message_template","summary":"Get one notification template group by name. Use for \"Show the Grafana notification template slack-default\".","description":"Get one notification template group by name. Use for \"Show the Grafana notification template slack-default\".","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"},"name":{"description":"Template group name from list_message_templates.","maxLength":200,"title":"Name","type":"string"}},"required":["stack","name"],"title":"get_message_templateArguments","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_alert_rule":{"post":{"operationId":"get_alert_rule","summary":"Get one alert rule by UID: title, folder, rule group, condition, pending period, no-data and error states, labels, annot","description":"Get one alert rule by UID: title, folder, rule group, condition, pending period, no-data and error states, labels, annotations, receiver and paused flag. Queries are left out. Use for \"Show Grafana alert rule abc123\".","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":"Alert rule UID (from the existing list_alert_rules tool or the Grafana UI).","maxLength":100,"title":"Uid","type":"string"}},"required":["stack","uid"],"title":"get_alert_ruleArguments","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_alert_rule_group":{"post":{"operationId":"get_alert_rule_group","summary":"Get a rule group of a folder: evaluation interval in seconds and its rules with title, state settings, labels and annota","description":"Get a rule group of a folder: evaluation interval in seconds and its rules with title, state settings, labels and annotations. Queries are left out. Use for \"Which alert rules are in the node group of Grafana folder fold1\".","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"},"folder_uid":{"description":"Folder UID (list folders with the existing list_folders tool).","maxLength":100,"title":"Folder Uid","type":"string"},"group":{"description":"Rule group name.","maxLength":200,"title":"Group","type":"string"}},"required":["stack","folder_uid","group"],"title":"get_alert_rule_groupArguments","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}}}}