{"openapi":"3.1.0","info":{"title":"PagerDuty (BYOK) API","version":"0.1.0","description":"PagerDuty (BYOK) lets an AI assistant read your own PagerDuty data through the PagerDuty API with a key you supply (REST API key). Read-only: 9 tools (list_incidents, get_incident, list_services, get_service, list_oncalls, list_schedules, get_schedule, list_escalation_policies, list_users). The BYOK key travels with each request, is used for that one call only and is never stored, logged or...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-pagerduty.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-pagerduty/docs"},"termsOfService":"https://connectorbay.com/byok-pagerduty/terms"},"servers":[{"url":"https://byok-pagerduty.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-pagerduty/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_incidents":{"post":{"operationId":"list_incidents","summary":"List PagerDuty incidents (newest first unless sorted otherwise) filtered by status, urgency, service and time range, wit","description":"List PagerDuty incidents (newest first unless sorted otherwise) filtered by status, urgency, service and time range, with service, assignees and priority. Use for \"Which PagerDuty incidents are triggered right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"statuses":{"anyOf":[{"enum":["triggered","acknowledged","resolved"],"type":"string"},{"type":"null"}],"default":null,"description":"Only incidents with this status.","title":"Statuses"},"urgencies":{"anyOf":[{"enum":["high","low"],"type":"string"},{"type":"null"}],"default":null,"description":"Only incidents with this urgency.","title":"Urgencies"},"service_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only incidents of this service ID (for example 'PABC123').","title":"Service Id"},"since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the time range, ISO 8601 (for example 2026-10-01T00:00:00Z); default is one month back; a range may span at most 6 months.","title":"Since"},"until":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the time range, ISO 8601; the range may span at most 6 months.","title":"Until"},"sort_by":{"anyOf":[{"enum":["created_at:desc","created_at:asc","incident_number:desc","incident_number:asc","resolved_at:desc","resolved_at:asc"],"type":"string"},{"type":"null"}],"default":"created_at:desc","description":"Order, as field:direction.","title":"Sort By"},"time_zone":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"IANA time zone name used to render times, for example 'America/Los_Angeles'; default is the account's time zone.","title":"Time Zone"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100; offset plus limit must not exceed 10000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging (the answer's 'more' field says whether another page exists).","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/get_incident":{"post":{"operationId":"get_incident","summary":"Get one PagerDuty incident by ID or incident number: status, urgency, times, service, escalation policy, assignees and a","description":"Get one PagerDuty incident by ID or incident number: status, urgency, times, service, escalation policy, assignees and alert counts. Use for \"What is the state of PagerDuty incident Q1ABC23\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"incident_id":{"description":"Incident ID (for example 'Q1ABC23') or the incident number.","maxLength":200,"title":"Incident Id","type":"string"}},"required":["incident_id"],"title":"get_incidentArguments","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_services":{"post":{"operationId":"list_services","summary":"List PagerDuty services with status, escalation policy and timeouts, optionally filtered by name. Use for \"What services","description":"List PagerDuty services with status, escalation policy and timeouts, optionally filtered by name. Use for \"What services are configured in PagerDuty\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only services whose name matches this text.","title":"Query"},"sort_by":{"anyOf":[{"enum":["name","name:asc","name:desc"],"type":"string"},{"type":"null"}],"default":"name","description":"Order by name.","title":"Sort By"},"time_zone":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"IANA time zone name used to render times, for example 'America/Los_Angeles'; default is the account's time zone.","title":"Time Zone"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100; offset plus limit must not exceed 10000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging (the answer's 'more' field says whether another page exists).","title":"Offset"}},"title":"list_servicesArguments","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_service":{"post":{"operationId":"get_service","summary":"Get one PagerDuty service: status, escalation policy, timeouts, alert creation mode, urgency rule and support hours. Use","description":"Get one PagerDuty service: status, escalation policy, timeouts, alert creation mode, urgency rule and support hours. Use for \"Show the PagerDuty service PABC123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"service_id":{"description":"Service ID, for example 'PABC123'.","maxLength":200,"title":"Service Id","type":"string"}},"required":["service_id"],"title":"get_serviceArguments","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_oncalls":{"post":{"operationId":"list_oncalls","summary":"List who is on call now (or in a time range), with user, schedule, escalation policy, escalation level and shift start a","description":"List who is on call now (or in a time range), with user, schedule, escalation policy, escalation level and shift start and end. Use for \"Who is on call in PagerDuty right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"schedule_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only on-calls of this schedule ID.","title":"Schedule Id"},"escalation_policy_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only on-calls of this escalation policy ID.","title":"Escalation Policy Id"},"user_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only on-calls of this user ID.","title":"User Id"},"since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range, ISO 8601; default is now; at most 90 days ahead.","title":"Since"},"until":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range, ISO 8601; default is now; at most 90 days ahead.","title":"Until"},"earliest":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to return only the earliest on-call per escalation policy, level and user.","title":"Earliest"},"time_zone":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"IANA time zone name used to render times, for example 'America/Los_Angeles'; default is the account's time zone.","title":"Time Zone"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100; offset plus limit must not exceed 10000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging (the answer's 'more' field says whether another page exists).","title":"Offset"}},"title":"list_oncallsArguments","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 PagerDuty on-call schedules with name, time zone, description, users and escalation policies. Use for \"What on-call","description":"List PagerDuty on-call schedules with name, time zone, description, users and escalation policies. Use for \"What on-call schedules exist in PagerDuty\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only schedules whose name matches this text.","title":"Query"},"time_zone":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"IANA time zone name used to render times, for example 'America/Los_Angeles'; default is the account's time zone.","title":"Time Zone"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100; offset plus limit must not exceed 10000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging (the answer's 'more' field says whether another page exists).","title":"Offset"}},"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_schedule":{"post":{"operationId":"get_schedule","summary":"Get one PagerDuty schedule, with its layers and rendered shifts for a time range when since and until are given. Use for","description":"Get one PagerDuty schedule, with its layers and rendered shifts for a time range when since and until are given. Use for \"Who is scheduled next week on PagerDuty schedule PSCHED1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"schedule_id":{"description":"Schedule ID, for example 'PSCHED1'.","maxLength":200,"title":"Schedule Id","type":"string"},"since":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range for rendered shifts, ISO 8601.","title":"Since"},"until":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range for rendered shifts, ISO 8601.","title":"Until"},"time_zone":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"IANA time zone name used to render times, for example 'America/Los_Angeles'; default is the account's time zone.","title":"Time Zone"}},"required":["schedule_id"],"title":"get_scheduleArguments","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 PagerDuty escalation policies with their rules, delays, targets and loop count. Use for \"What PagerDuty escalation ","description":"List PagerDuty escalation policies with their rules, delays, targets and loop count. Use for \"What PagerDuty escalation policies do we have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only policies whose name matches this text.","title":"Query"},"sort_by":{"anyOf":[{"enum":["name","name:asc","name:desc"],"type":"string"},{"type":"null"}],"default":"name","description":"Order by name.","title":"Sort By"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100; offset plus limit must not exceed 10000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging (the answer's 'more' field says whether another page exists).","title":"Offset"}},"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_users":{"post":{"operationId":"list_users","summary":"List PagerDuty users with name, email, role, job title and time zone, optionally filtered by name. Use for \"Who are the ","description":"List PagerDuty users with name, email, role, job title and time zone, optionally filtered by name. Use for \"Who are the users in our PagerDuty account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only users whose name matches this text.","title":"Query"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100; offset plus limit must not exceed 10000).","title":"Limit"},"offset":{"anyOf":[{"maximum":10000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging (the answer's 'more' field says whether another page exists).","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}}}}