{"openapi":"3.1.0","info":{"title":"Opsgenie (BYOK) API","version":"0.1.0","description":"Opsgenie (BYOK) lets an AI assistant read your own Opsgenie data through the Opsgenie API with a key you supply (API key (API integration key)). Read-only: 10 tools (list_alerts, get_alert, count_alerts, list_incidents, list_schedules, get_on_calls, list_teams, list_users, list_escalations, list_heartbeats). The BYOK key travels with each request, is used for that one call only and is never...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-opsgenie.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-opsgenie/docs"},"termsOfService":"https://connectorbay.com/byok-opsgenie/terms"},"servers":[{"url":"https://byok-opsgenie.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-opsgenie/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_alerts":{"post":{"operationId":"list_alerts","summary":"List Opsgenie alerts (newest first by default) with message, status, priority, acknowledged flag, tags, occurrence count","description":"List Opsgenie alerts (newest first by default) with message, status, priority, acknowledged flag, tags, occurrence count and source. Supports Opsgenie search queries. US-region accounts only (api.opsgenie.com). Use for \"What open P1 alerts do I have in Opsgenie\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Opsgenie search query, for example 'status:open AND priority:P1'. If you also pass a saved search, the query wins.","title":"Query"},"sort":{"anyOf":[{"enum":["createdAt","updatedAt","tinyId","alias","message","status","acknowledged","isSeen","snoozed","snoozedUntil","count","lastOccurredAt","source","owner"],"type":"string"},{"type":"null"}],"default":"createdAt","description":"Field to sort by.","title":"Sort"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort order: desc or asc.","title":"Order"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100; the API default is 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":19999,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging. Offset plus limit must stay below 20000.","title":"Offset"}},"title":"list_alertsArguments","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":{"post":{"operationId":"get_alert","summary":"Get one alert by id, tiny id or alias: message, status, priority, acknowledgement, tags, source, owner and counts. Alias","description":"Get one alert by id, tiny id or alias: message, status, priority, acknowledgement, tags, source, owner and counts. Alias lookups do not work for closed alerts. Use for \"Show Opsgenie alert 1791\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"identifier":{"description":"The alert's id (a UUID), tiny id (the short number) or alias; set identifier_type to match.","maxLength":200,"title":"Identifier","type":"string"},"identifier_type":{"anyOf":[{"enum":["id","tiny","alias"],"type":"string"},{"type":"null"}],"default":"id","description":"What identifier is: id, tiny or alias.","title":"Identifier Type"}},"required":["identifier"],"title":"get_alertArguments","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/count_alerts":{"post":{"operationId":"count_alerts","summary":"Count the alerts matching an Opsgenie search query (all alerts when no query is given). Use for \"How many open alerts do","description":"Count the alerts matching an Opsgenie search query (all alerts when no query is given). Use for \"How many open alerts does Opsgenie have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Opsgenie search query, for example 'status:open AND priority:P1'. If you also pass a saved search, the query wins.","title":"Query"}},"title":"count_alertsArguments","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_incidents":{"post":{"operationId":"list_incidents","summary":"List Opsgenie incidents with message, status, priority, tags, responders and impacted services. Supports incident search","description":"List Opsgenie incidents with message, status, priority, tags, responders and impacted services. Supports incident search queries. Use for \"Which incidents are open in Opsgenie\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Opsgenie search query, for example 'status:open AND priority:P1'. If you also pass a saved search, the query wins.","title":"Query"},"sort":{"anyOf":[{"enum":["createdAt","insertedAt","updatedAt","status","priority","postmortemStatus","postmortemPublishDueDate"],"type":"string"},{"type":"null"}],"default":"insertedAt","description":"Field to sort by.","title":"Sort"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Sort order: desc or asc.","title":"Order"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100; the API default is 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":19999,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging. Offset plus limit must stay below 20000.","title":"Offset"}},"title":"list_incidentsArguments","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, time zone, enabled flag and owner team; expand=rotation adds the rotations and partici","description":"List on-call schedules with name, time zone, enabled flag and owner team; expand=rotation adds the rotations and participants. Use for \"What on-call schedules do we have in Opsgenie\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"expand":{"anyOf":[{"const":"rotation","type":"string"},{"type":"null"}],"default":null,"description":"Pass 'rotation' to include rotations and participants.","title":"Expand"}},"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/get_on_calls":{"post":{"operationId":"get_on_calls","summary":"Show who is on call for one schedule right now (or at a given date): returns the on-call user emails when flat is true, ","description":"Show who is on call for one schedule right now (or at a given date): returns the on-call user emails when flat is true, otherwise the participant tree. Use for \"Who is on call for the ops_team_schedule schedule in Opsgenie\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"schedule":{"description":"Schedule id (UUID) or schedule name; set schedule_identifier_type to match.","maxLength":200,"title":"Schedule","type":"string"},"schedule_identifier_type":{"anyOf":[{"enum":["id","name"],"type":"string"},{"type":"null"}],"default":"id","description":"What schedule is: id or name.","title":"Schedule Identifier Type"},"flat":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to return only the on-call user emails (onCallRecipients).","title":"Flat"},"date":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Time to check, ISO 8601 with offset such as 2026-10-15T08:00:00+02:00; leave out for now.","title":"Date"}},"required":["schedule"],"title":"get_on_callsArguments","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 all teams of the account (not paginated) with id, name and description. Use for \"Which teams exist in Opsgenie\".","description":"List all teams of the account (not paginated) with id, name and description. Use for \"Which teams exist in Opsgenie\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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_users":{"post":{"operationId":"list_users","summary":"List Opsgenie users with username (email), full name, role, time zone and blocked/verified flags. Supports field queries","description":"List Opsgenie users with username (email), full name, role, time zone and blocked/verified flags. Supports field queries like 'role:admin'. Use for \"Who are the admins in our Opsgenie account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Field:value search, for example 'role:admin' or 'fullName:doe'. Fields: username, fullName, blocked, verified, role, locale, timeZone, createdAt.","title":"Query"},"sort":{"anyOf":[{"enum":["username","fullName","createdAt"],"type":"string"},{"type":"null"}],"default":"username","description":"Sort field.","title":"Sort"},"order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"asc","description":"Sort order: asc or desc.","title":"Order"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many users to return (1 to 100; default 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many users to skip, for paging.","title":"Offset"}},"title":"list_usersArguments","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_escalations":{"post":{"operationId":"list_escalations","summary":"List escalation policies with name, owner team, rules (who is notified after what delay) and repeat settings. Use for \"H","description":"List escalation policies with name, owner team, rules (who is notified after what delay) and repeat settings. Use for \"How are our Opsgenie escalations configured\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_escalationsArguments","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_heartbeats":{"post":{"operationId":"list_heartbeats","summary":"List heartbeats (expected periodic pings from jobs and systems) with interval, enabled flag, owner team and alert settin","description":"List heartbeats (expected periodic pings from jobs and systems) with interval, enabled flag, owner team and alert settings. Use for \"Which heartbeats are configured in Opsgenie\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_heartbeatsArguments","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}}}}