{"openapi":"3.1.0","info":{"title":"Grafana On-Call (BYOK) API","version":"0.1.0","description":"Grafana On-Call (BYOK) lets an AI assistant read your own Grafana On-Call data through the Grafana On-Call API with a key you supply (Grafana OnCall API key). Read-only: 10 tools (list_integrations, get_integration, list_routes, list_escalation_chains, list_escalation_policies, list_schedules, list_alert_groups, list_teams, list_slack_channels, list_user_groups). The BYOK key travels with each...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-grafana-oncall.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-grafana-oncall/docs"},"termsOfService":"https://connectorbay.com/byok-grafana-oncall/terms"},"servers":[{"url":"https://byok-grafana-oncall.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-grafana-oncall/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_integrations":{"post":{"operationId":"list_integrations","summary":"List alert integrations with name, type, team and default route escalation chain. Inbound webhook links and templates ar","description":"List alert integrations with name, type, team and default route escalation chain. Inbound webhook links and templates are left out. Returns the first page only (about 50 items); narrow with the filters. Use for \"Which Grafana OnCall integrations do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oncall_host":{"description":"First label of your Grafana OnCall endpoint host, for example 'oncall-prod-us-central-0' for https://oncall-prod-us-central-0.grafana.net/oncall (shown on the OnCall Settings page).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Oncall Host","type":"string"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only integrations with exactly this name.","title":"Name"}},"required":["oncall_host"],"title":"list_integrationsArguments","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_integration":{"post":{"operationId":"get_integration","summary":"Get one integration by id: name, type, team and default route. Use for \"Show Grafana OnCall integration CFRPV98RPR1U8\".","description":"Get one integration by id: name, type, team and default route. Use for \"Show Grafana OnCall integration CFRPV98RPR1U8\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oncall_host":{"description":"First label of your Grafana OnCall endpoint host, for example 'oncall-prod-us-central-0' for https://oncall-prod-us-central-0.grafana.net/oncall (shown on the OnCall Settings page).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Oncall Host","type":"string"},"integration_id":{"description":"Integration id from list_integrations.","maxLength":40,"title":"Integration Id","type":"string"}},"required":["oncall_host","integration_id"],"title":"get_integrationArguments","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_routes":{"post":{"operationId":"list_routes","summary":"List alert routing rules (regex on the alert, position, target escalation chain). Filter by integration. Returns the fir","description":"List alert routing rules (regex on the alert, position, target escalation chain). Filter by integration. Returns the first page only (about 50 items); narrow with the filters. Use for \"How are Grafana OnCall alerts routed for integration CFRPV98RPR1U8\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oncall_host":{"description":"First label of your Grafana OnCall endpoint host, for example 'oncall-prod-us-central-0' for https://oncall-prod-us-central-0.grafana.net/oncall (shown on the OnCall Settings page).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Oncall Host","type":"string"},"integration_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only routes of this integration id.","title":"Integration Id"},"routing_regex":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Only routes with exactly this regex.","title":"Routing Regex"}},"required":["oncall_host"],"title":"list_routesArguments","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_escalation_chains":{"post":{"operationId":"list_escalation_chains","summary":"List escalation chains with id, name and team. Returns the first page only (about 50 items); narrow with the filters. Us","description":"List escalation chains with id, name and team. Returns the first page only (about 50 items); narrow with the filters. Use for \"Which escalation chains exist in Grafana OnCall\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oncall_host":{"description":"First label of your Grafana OnCall endpoint host, for example 'oncall-prod-us-central-0' for https://oncall-prod-us-central-0.grafana.net/oncall (shown on the OnCall Settings page).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Oncall Host","type":"string"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only chains with exactly this name.","title":"Name"}},"required":["oncall_host"],"title":"list_escalation_chainsArguments","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_escalation_policies":{"post":{"operationId":"list_escalation_policies","summary":"List escalation policy steps (position, type such as wait or notify_person_next_each_time, duration). Filter by escalati","description":"List escalation policy steps (position, type such as wait or notify_person_next_each_time, duration). Filter by escalation chain. Returns the first page only (about 50 items); narrow with the filters. Use for \"What are the steps of Grafana OnCall escalation chain F5JU6KJET33FE\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oncall_host":{"description":"First label of your Grafana OnCall endpoint host, for example 'oncall-prod-us-central-0' for https://oncall-prod-us-central-0.grafana.net/oncall (shown on the OnCall Settings page).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Oncall Host","type":"string"},"escalation_chain_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only steps of this escalation chain id.","title":"Escalation Chain Id"}},"required":["oncall_host"],"title":"list_escalation_policiesArguments","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_schedules":{"post":{"operationId":"list_schedules","summary":"List on-call schedules with name, type (calendar, ical, web), time zone, team and the ids of the users on call now. iCal","description":"List on-call schedules with name, type (calendar, ical, web), time zone, team and the ids of the users on call now. iCal URLs are left out. Returns the first page only (about 50 items); narrow with the filters. Use for \"Which Grafana OnCall schedules exist and who is on call\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oncall_host":{"description":"First label of your Grafana OnCall endpoint host, for example 'oncall-prod-us-central-0' for https://oncall-prod-us-central-0.grafana.net/oncall (shown on the OnCall Settings page).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Oncall Host","type":"string"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only schedules with exactly this name.","title":"Name"},"team_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only schedules of this team id.","title":"Team Id"}},"required":["oncall_host"],"title":"list_schedulesArguments","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_groups":{"post":{"operationId":"list_alert_groups","summary":"List alert groups with state (new, acknowledged, resolved, silenced), title, alert count, integration, route and key tim","description":"List alert groups with state (new, acknowledged, resolved, silenced), title, alert count, integration, route and key times. Alert payloads are left out. Returns the first page only (about 50 items); narrow with the filters. Use for \"Which Grafana OnCall alert groups are still new\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oncall_host":{"description":"First label of your Grafana OnCall endpoint host, for example 'oncall-prod-us-central-0' for https://oncall-prod-us-central-0.grafana.net/oncall (shown on the OnCall Settings page).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Oncall Host","type":"string"},"state":{"anyOf":[{"enum":["new","acknowledged","resolved","silenced"],"type":"string"},{"type":"null"}],"default":null,"description":"Only alert groups in this state.","title":"State"},"integration_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only alert groups of this integration id.","title":"Integration Id"},"route_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only alert groups of this route id.","title":"Route Id"},"team_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only alert groups of this team id.","title":"Team Id"},"started_at":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Time range as 'start_end' in ISO 8601 without zone, for example 2026-10-01T00:00:00_2026-10-02T00:00:00.","title":"Started At"},"label":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"A label filter as key:value, for example 'env:prod'.","title":"Label"}},"required":["oncall_host"],"title":"list_alert_groupsArguments","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_teams":{"post":{"operationId":"list_teams","summary":"List teams with id, Grafana team id and name. Filter by exact name. Use for \"Which teams does Grafana OnCall know about\"","description":"List teams with id, Grafana team id and name. Filter by exact name. Use for \"Which teams does Grafana OnCall know about\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oncall_host":{"description":"First label of your Grafana OnCall endpoint host, for example 'oncall-prod-us-central-0' for https://oncall-prod-us-central-0.grafana.net/oncall (shown on the OnCall Settings page).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Oncall Host","type":"string"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the team with exactly this name.","title":"Name"}},"required":["oncall_host"],"title":"list_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}},"/v1/tools/list_slack_channels":{"post":{"operationId":"list_slack_channels","summary":"List Slack channels known to OnCall with name and Slack id. Use for \"Which Slack channels can Grafana OnCall post to\".","description":"List Slack channels known to OnCall with name and Slack id. Use for \"Which Slack channels can Grafana OnCall post to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oncall_host":{"description":"First label of your Grafana OnCall endpoint host, for example 'oncall-prod-us-central-0' for https://oncall-prod-us-central-0.grafana.net/oncall (shown on the OnCall Settings page).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Oncall Host","type":"string"},"channel_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only channels with this name.","title":"Channel Name"}},"required":["oncall_host"],"title":"list_slack_channelsArguments","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_user_groups":{"post":{"operationId":"list_user_groups","summary":"List Slack user groups used for on-call tagging: id, type and Slack group name and handle. Use for \"Which Slack user gro","description":"List Slack user groups used for on-call tagging: id, type and Slack group name and handle. Use for \"Which Slack user groups does Grafana OnCall use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"oncall_host":{"description":"First label of your Grafana OnCall endpoint host, for example 'oncall-prod-us-central-0' for https://oncall-prod-us-central-0.grafana.net/oncall (shown on the OnCall Settings page).","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Oncall Host","type":"string"}},"required":["oncall_host"],"title":"list_user_groupsArguments","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}}}}