{"openapi": "3.1.0", "info": {"title": "OpsDuty API", "version": "1", "description": "\nCreate and work on incidents, read who is on call, manage your services and\nheartbeats, and tell customers what is happening on a status page, from your\nown systems.\n\n## Base URL\n\nEvery endpoint lives under `/api/v1/`.\n\n## Authenticating\n\nSend an access token as a bearer token on every request:\n\n```\nAuthorization: Bearer <your token>\n```\n\nTokens belong to an OAuth2 application. Create one under API Access in OpsDuty,\nthen run the authorization code flow with PKCE to get a token. The token needs\nthe `api:v1` scope.\n\nThe session cookie also authenticates, but that is how the OpsDuty web app\ntalks to itself. Build your integration on bearer tokens.\n\n## Paging through lists\n\nLists are paged with a cursor. Ask for the `first` items in the list or the\n`last` ones, then page on with `after` or `before`, using the `end_cursor` and\n`start_cursor` the previous response gave you. Items come back in list order\nwhichever direction you page.\n\n## When something goes wrong\n\nErrors answer with `{\"detail\": ...}`. A missing or expired token is a `401`, a\nresource that does not exist or that your token cannot see is a `404`, a\npayload that does not validate is a `422`, and too many requests is a `429`.\n"}, "paths": {"/api/v1/heartbeats/states/": {"post": {"operationId": "opsduty_api_v1_heartbeats_create_heartbeat_state", "summary": "Add an environment to a heartbeat", "parameters": [], "responses": {"201": {"description": "Created", "content": {"application/json": {"schema": {"anyOf": [{"$ref": "#/components/schemas/CronHeartbeatStateSchema"}, {"$ref": "#/components/schemas/IntervalHeartbeatStateSchema"}], "title": "Response"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Start expecting check-ins from one environment of a job.\n\nA heartbeat on its own watches nothing. Each environment you add here gets\nits own schedule and its own check-in URL, so the same job in staging and\nproduction alert separately.\n\nSet `type` to `interval` and give `interval_seconds` for a job that runs\nevery so often, or `cron` with `cron_expression` and `cron_timezone` for\none on a fixed timetable. `timeout_seconds` is the grace period on top of\nthat before OpsDuty decides the check-in is missing.", "tags": ["heartbeats"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateHeartbeatStateInput"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/heartbeats/states/{heartbeat_state_id}/": {"put": {"operationId": "opsduty_api_v1_heartbeats_update_heartbeat_state", "summary": "Update an environment on a heartbeat", "parameters": [{"in": "path", "name": "heartbeat_state_id", "schema": {"title": "Heartbeat State Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"anyOf": [{"$ref": "#/components/schemas/CronHeartbeatStateSchema"}, {"$ref": "#/components/schemas/IntervalHeartbeatStateSchema"}], "title": "Response"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Change what one environment expects, or stop it alerting.\n\nEvery field is replaced, so send the whole state and not only the parts\nyou are changing. Set `muted` while a job is knowingly off, which keeps\nthe environment and its history but stops it raising incidents.", "tags": ["heartbeats"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpdateHeartbeatStateInput"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}, "delete": {"operationId": "opsduty_api_v1_heartbeats_delete_heartbeat_state", "summary": "Remove an environment from a heartbeat", "parameters": [{"in": "path", "name": "heartbeat_state_id", "schema": {"title": "Heartbeat State Id", "type": "integer"}, "required": true}], "responses": {"204": {"description": "No Content"}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Stop watching one environment, and drop its check-in history with it.\n\nCheck-ins sent to that environment's URL afterwards are answered with a\n404. To stop the alerts but keep the history, update the state and set\n`muted` instead.", "tags": ["heartbeats"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/heartbeats/checkin/{service_id}/{name}/{environment}": {"get": {"operationId": "opsduty_api_v1_heartbeats_healthcheck_environment_checkin", "summary": "Send a check-in by name", "parameters": [{"in": "path", "name": "service_id", "schema": {"title": "Service Id", "type": "integer"}, "required": true}, {"in": "path", "name": "name", "schema": {"title": "Name", "type": "string"}, "required": true}, {"in": "path", "name": "environment", "schema": {"title": "Environment", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK"}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Send a check-in, naming the heartbeat instead of using its key.\n\nThe public check-in URL identifies a heartbeat by a key that is awkward to\nhold in a deploy script. This one takes the service, the heartbeat name and\nthe environment, which you already know, and needs a token instead.\n\nRate limited to 5 check-ins a minute per heartbeat and environment.", "tags": ["heartbeats"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/heartbeats/": {"get": {"operationId": "opsduty_api_v1_heartbeats_list_heartbeats", "summary": "List heartbeats", "parameters": [{"in": "query", "name": "service", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Service"}, "required": false}, {"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedHeartbeatSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List the heartbeats you can see, oldest first, with their environments.\n\nNarrow the list to one service with `service`.", "tags": ["heartbeats"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}, "post": {"operationId": "opsduty_api_v1_heartbeats_create_heartbeat", "summary": "Create a heartbeat", "parameters": [], "responses": {"201": {"description": "Created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HeartbeatSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Register a job you want to watch.\n\nThis does not start watching on its own. Add at least one environment with\n`POST /api/v1/heartbeats/states/` to say how often the job should check in\nand where to send the check-in.\n\nMissed check-ins raise an incident on `service`, which decides who is\npaged. `incident_urgency` overrides the service default.", "tags": ["heartbeats"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/CreateHeartbeatInput"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/heartbeats/{heartbeat_id}/": {"get": {"operationId": "opsduty_api_v1_heartbeats_retrieve_heartbeat", "summary": "Retrieve a heartbeat", "parameters": [{"in": "path", "name": "heartbeat_id", "schema": {"title": "Heartbeat Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HeartbeatSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Read one heartbeat and the environments it is watching.", "tags": ["heartbeats"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}, "put": {"operationId": "opsduty_api_v1_heartbeats_update_heartbeat", "summary": "Update a heartbeat", "parameters": [{"in": "path", "name": "heartbeat_id", "schema": {"title": "Heartbeat Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/HeartbeatSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Change a heartbeat's details.\n\nEvery field is replaced, so send the whole heartbeat. This covers what the\njob is and who hears about it; the schedule it checks in on lives on each\nenvironment.", "tags": ["heartbeats"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/UpdateHeartbeatInput"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}, "delete": {"operationId": "opsduty_api_v1_heartbeats_delete_heartbeat", "summary": "Delete a heartbeat", "parameters": [{"in": "path", "name": "heartbeat_id", "schema": {"title": "Heartbeat Id", "type": "integer"}, "required": true}], "responses": {"204": {"description": "No Content"}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Delete a heartbeat, its environments and their check-in history.\n\nAnything still checking in gets a 404 afterwards. Mute the environments\ninstead if the job is only paused.", "tags": ["heartbeats"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/incidents/": {"get": {"operationId": "opsduty_api_v1_incidents_list_incidents", "summary": "List incidents", "parameters": [{"in": "query", "name": "since", "schema": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Since"}, "required": false}, {"in": "query", "name": "until", "schema": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Until"}, "required": false}, {"in": "query", "name": "service", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Service"}, "required": false}, {"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedIncidentGroupSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List incidents on the services you can see, newest first.", "tags": ["incidents"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/incidents/{incident_group_id}/": {"get": {"operationId": "opsduty_api_v1_incidents_retrieve_incident", "summary": "Read an incident", "parameters": [{"in": "path", "name": "incident_group_id", "schema": {"title": "Incident Group Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentGroupDetailSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Read one incident, including its service and its notes.", "tags": ["incidents"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/incidents/incident-reference/{incident_reference_id}/": {"get": {"operationId": "opsduty_api_v1_incidents_retrieve_incident_reference", "summary": "Look up an incident by reference", "parameters": [{"in": "path", "name": "incident_reference_id", "schema": {"title": "Incident Reference Id", "type": "string"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentReferenceSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Find the incident an event you sent ended up in.\n\nSubmitting an event returns an incident reference. Events are processed in\nthe background, so the reference resolves to an incident once that work\nfinishes rather than the moment you send it.", "tags": ["incidents"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/incidents/{incident_group_id}/responders/": {"get": {"operationId": "opsduty_api_v1_incidents_list_incident_responders", "summary": "List an incident's responders", "parameters": [{"in": "path", "name": "incident_group_id", "schema": {"title": "Incident Group Id", "type": "integer"}, "required": true}, {"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedIncidentGroupResponderSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List who this incident has reached, and whether they responded.", "tags": ["incidents"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/incidents/{incident_group_id}/notes/": {"post": {"operationId": "opsduty_api_v1_incidents_add_incident_note_endpoint", "summary": "Add a note to an incident", "parameters": [{"in": "path", "name": "incident_group_id", "schema": {"title": "Incident Group Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentGroupDetailNoteSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Record context on the incident timeline without changing its status, for\nexample what an automation did or where the investigation got to. The note\nis attributed to the account the token belongs to.", "tags": ["incidents"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/AddIncidentNoteInputSchema"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/incidents/{incident_group_id}/acknowledge/": {"post": {"operationId": "opsduty_api_v1_incidents_acknowledge_incident_endpoint", "summary": "Acknowledge an incident", "parameters": [{"in": "path", "name": "incident_group_id", "schema": {"title": "Incident Group Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentGroupDetailSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Signal that someone is handling the incident. This stops it escalating any\nfurther. Acknowledging an attached or maintenance incident is rejected.", "tags": ["incidents"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/incidents/{incident_group_id}/unacknowledge/": {"post": {"operationId": "opsduty_api_v1_incidents_un_acknowledge_incident_endpoint", "summary": "Un-acknowledge an incident", "parameters": [{"in": "path", "name": "incident_group_id", "schema": {"title": "Incident Group Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentGroupDetailSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Hand an acknowledged incident back, so it escalates again. Rejected if the\nincident is not acknowledged, or is already resolved.", "tags": ["incidents"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/incidents/{incident_group_id}/resolve/": {"post": {"operationId": "opsduty_api_v1_incidents_resolve_incident_endpoint", "summary": "Resolve an incident", "parameters": [{"in": "path", "name": "incident_group_id", "schema": {"title": "Incident Group Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentGroupDetailSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Close the incident. Pass an optional note to record why it was resolved on\nthe incident timeline.", "tags": ["incidents"], "requestBody": {"content": {"application/json": {"schema": {"anyOf": [{"$ref": "#/components/schemas/ResolveIncidentInputSchema"}, {"type": "null"}]}}}, "required": false}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/incidents/{incident_group_id}/unresolve/": {"post": {"operationId": "opsduty_api_v1_incidents_un_resolve_incident_endpoint", "summary": "Re-open a resolved incident", "parameters": [{"in": "path", "name": "incident_group_id", "schema": {"title": "Incident Group Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentGroupDetailSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Re-open an incident that was resolved too early. Rejected if the incident is\nnot resolved.", "tags": ["incidents"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/schedules/": {"get": {"operationId": "opsduty_api_v1_schedules_list_services", "summary": "List schedules", "parameters": [{"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedScheduleSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List the on-call schedules you can see, oldest first.", "tags": ["schedules"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/schedules/{schedule_id}/shifts/": {"get": {"operationId": "opsduty_api_v1_schedules_list_schedule_shifts", "summary": "List schedule shifts", "parameters": [{"in": "path", "name": "schedule_id", "schema": {"title": "Schedule Id", "type": "integer"}, "required": true}, {"in": "query", "name": "datetime_start", "schema": {"format": "date-time", "title": "Datetime Start", "type": "string"}, "required": true}, {"in": "query", "name": "datetime_end", "schema": {"format": "date-time", "title": "Datetime End", "type": "string"}, "required": true}, {"in": "query", "name": "overflow", "schema": {"default": true, "title": "Overflow", "type": "boolean"}, "required": false}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/ScheduleShiftSchema"}, "title": "Response", "type": "array"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Work out who is on call between two times, layers and overrides applied.\n\n`datetime_start` and `datetime_end` are required and must be at most 120\ndays apart. Shifts are computed rather than stored, so this is not paged\nand returns the whole range at once.\n\nA shift that starts before the range or ends after it is returned with its\nreal handover times. Pass `overflow=false` to cut those shifts back to the\nrange you asked for instead.", "tags": ["schedules"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/schedules/{schedule_id}/overrides/": {"get": {"operationId": "opsduty_api_v1_schedules_list_schedule_overrides", "summary": "List schedule overrides", "parameters": [{"in": "path", "name": "schedule_id", "schema": {"title": "Schedule Id", "type": "integer"}, "required": true}, {"in": "query", "name": "since", "schema": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Since"}, "required": false}, {"in": "query", "name": "until", "schema": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Until"}, "required": false}, {"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedScheduleOverrideSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List the overrides on a schedule, earliest first.\n\nAn override hands a stretch of a rotation to one person, on top of the\nlayers. Narrow the list with `since` to drop overrides that already ended,\nand `until` to drop ones that have not started.", "tags": ["schedules"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}, "post": {"operationId": "opsduty_api_v1_schedules_create_schedule_override", "summary": "Create a schedule override", "parameters": [{"in": "path", "name": "schedule_id", "schema": {"title": "Schedule Id", "type": "integer"}, "required": true}], "responses": {"201": {"description": "Created", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ScheduleOverrideSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Put one person on call for a stretch of a schedule, covering the rotation.\n\nUse this to arrange cover when someone cannot take their shift. `user` has\nto be a member of the schedule, and is rejected otherwise.", "tags": ["schedules"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ScheduleOverrideInputSchema"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/schedules/{schedule_id}/overrides/{override_id}/": {"delete": {"operationId": "opsduty_api_v1_schedules_delete_schedule_override", "summary": "Delete a schedule override", "parameters": [{"in": "path", "name": "schedule_id", "schema": {"title": "Schedule Id", "type": "integer"}, "required": true}, {"in": "path", "name": "override_id", "schema": {"title": "Override Id", "type": "integer"}, "required": true}], "responses": {"204": {"description": "No Content"}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Remove an override, handing the time back to the normal rotation.\n\nWhoever the layers put on call for that stretch is on call again, so check\nthat somebody is before removing cover that is already running.", "tags": ["schedules"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/services/": {"get": {"operationId": "opsduty_api_v1_services_list_services", "summary": "List services", "parameters": [{"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedServiceSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List the services you can see, oldest first.\n\nThat includes services your team responds for through an escalation policy\nor schedule another team shared with it. Each service your team owns\ncarries the routing key you send events to.", "tags": ["services"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/services/{service_id}/oncall/": {"get": {"operationId": "opsduty_api_v1_services_list_service_oncall", "summary": "List who is on call for a service", "parameters": [{"in": "path", "name": "service_id", "schema": {"title": "Service Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"items": {"$ref": "#/components/schemas/ServiceOncallUserSchema"}, "title": "Response", "type": "array"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List who an incident on this service would reach first.\n\nThese are the people the first notify step of the service's escalation\npolicy resolves to right now. The list is empty when the service has no\nescalation policy, when that policy has no notify step, or when the step\nresolves to nobody, which all mean an incident here pages no one.", "tags": ["services"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/services/{service_id}/maintenance/": {"post": {"operationId": "opsduty_api_v1_services_start_service_maintenance", "summary": "Start maintenance mode", "parameters": [{"in": "path", "name": "service_id", "schema": {"title": "Service Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ServiceSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Put a service into maintenance mode so a planned change does not page\nanyone. Maintenance mode ends by itself once the duration elapses, and\nstarting it on a service that is already in maintenance is rejected.", "tags": ["services"], "requestBody": {"content": {"application/json": {"schema": {"anyOf": [{"$ref": "#/components/schemas/StartMaintenanceInputSchema"}, {"type": "null"}]}}}, "required": false}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}, "delete": {"operationId": "opsduty_api_v1_services_stop_service_maintenance", "summary": "End maintenance mode", "parameters": [{"in": "path", "name": "service_id", "schema": {"title": "Service Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ServiceSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "End maintenance mode early, before its duration has elapsed. Ending\nmaintenance on a service that is not in maintenance does nothing.", "tags": ["services"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/": {"get": {"operationId": "opsduty_api_v1_statuspages_list_status_pages", "summary": "List status pages", "parameters": [{"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedStatusPageSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List the status pages you can publish to.", "tags": ["statuspages"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/{status_page_id}/components/": {"get": {"operationId": "opsduty_api_v1_statuspages_list_status_page_components", "summary": "List status page components", "parameters": [{"in": "path", "name": "status_page_id", "schema": {"title": "Status Page Id", "type": "integer"}, "required": true}, {"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedComponentSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List the components on a status page, in the order the page shows them.\n\nThese are the ids to pass as `component_ids` when declaring an incident,\nand what the `component_ids` on an incident refer to.", "tags": ["statuspages"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/{status_page_id}/component-groups/": {"get": {"operationId": "opsduty_api_v1_statuspages_list_status_page_component_groups", "summary": "List status page component groups", "parameters": [{"in": "path", "name": "status_page_id", "schema": {"title": "Status Page Id", "type": "integer"}, "required": true}, {"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedComponentGroupSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List the groups components are shown under, in the order the page shows them.", "tags": ["statuspages"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}, "post": {"operationId": "opsduty_api_v1_statuspages_create_status_page_component_group", "summary": "Create a status page component group", "parameters": [{"in": "path", "name": "status_page_id", "schema": {"title": "Status Page Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ComponentGroupSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Add a group to the bottom of a status page. Customers see it once it has\ncomponents in it.", "tags": ["statuspages"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ComponentGroupInputSchema"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/component-groups/{component_group_id}/": {"put": {"operationId": "opsduty_api_v1_statuspages_update_status_page_component_group", "summary": "Update a status page component group", "parameters": [{"in": "path", "name": "component_group_id", "schema": {"title": "Component Group Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ComponentGroupSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Rename a component group or change its description.", "tags": ["statuspages"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/ComponentGroupInputSchema"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}, "delete": {"operationId": "opsduty_api_v1_statuspages_delete_status_page_component_group", "summary": "Delete a status page component group", "parameters": [{"in": "path", "name": "component_group_id", "schema": {"title": "Component Group Id", "type": "integer"}, "required": true}], "responses": {"204": {"description": "No Content"}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Delete a component group and every component in it. Customers stop seeing\nthem straight away, and incidents no longer list them as affected.", "tags": ["statuspages"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/component-groups/{component_group_id}/move/": {"post": {"operationId": "opsduty_api_v1_statuspages_move_status_page_component_group", "summary": "Move a status page component group", "parameters": [{"in": "path", "name": "component_group_id", "schema": {"title": "Component Group Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ComponentGroupSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Move a component group up, down, to the top or to the bottom of the page.", "tags": ["statuspages"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/MoveComponentGroupSchema"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/{status_page_id}/uptime/": {"get": {"operationId": "opsduty_api_v1_statuspages_get_status_page_uptime", "summary": "Read a status page's component uptime", "parameters": [{"in": "path", "name": "status_page_id", "schema": {"title": "Status Page Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/StatusPageUptimeSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "The ninety day uptime this page reports for each of its components.\n\nThis is the same figure the public page shows, so a dashboard built on it\nagrees with what customers read rather than recomputing it and drifting.\nDowntime is any period a component was showing degraded performance or\nworse, whether an incident explained it or somebody set the status\ndirectly.", "tags": ["statuspages"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/components/{component_id}/status/": {"post": {"operationId": "opsduty_api_v1_statuspages_set_status_page_component_status", "summary": "Set a status page component's status", "parameters": [{"in": "path", "name": "component_id", "schema": {"title": "Component Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/ComponentSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Say what a component is doing right now, without declaring an incident.\n\nCustomers see this immediately, on the component and in the headline the\npage rolls up from every component.\n\nAn incident that was told to keep this component in step with its impact\nstill wins while it is open, because that is what somebody asked it to do.\nUse this for a component nothing has declared an incident about.", "tags": ["statuspages"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetComponentStatusSchema"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/{status_page_id}/incidents/": {"get": {"operationId": "opsduty_api_v1_statuspages_list_status_page_incidents", "summary": "List status page incidents", "parameters": [{"in": "path", "name": "status_page_id", "schema": {"title": "Status Page Id", "type": "integer"}, "required": true}, {"in": "query", "name": "status", "schema": {"anyOf": [{"items": {"$ref": "#/components/schemas/IncidentStatus"}, "type": "array"}, {"type": "null"}], "description": "Only incidents in one of these statuses.", "title": "Status"}, "required": false, "description": "Only incidents in one of these statuses."}, {"in": "query", "name": "type", "schema": {"anyOf": [{"enum": ["planned", "unplanned"], "type": "string"}, {"type": "null"}], "description": "Only planned work (scheduled, in progress or completed), or only unplanned incidents.", "title": "Type"}, "required": false, "description": "Only planned work (scheduled, in progress or completed), or only unplanned incidents."}, {"in": "query", "name": "created_after", "schema": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "description": "Only incidents declared at or after this time.", "title": "Created After"}, "required": false, "description": "Only incidents declared at or after this time."}, {"in": "query", "name": "created_before", "schema": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "description": "Only incidents declared before this time.", "title": "Created Before"}, "required": false, "description": "Only incidents declared before this time."}, {"in": "query", "name": "component_id", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "Only incidents affecting this component.", "title": "Component Id"}, "required": false, "description": "Only incidents affecting this component."}, {"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedIncidentSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List the incidents on a status page, newest first, drafts included.\n\nNarrow the list by status, by planned or unplanned work, by when incidents\nwere declared, or to the ones affecting a component.", "tags": ["statuspages"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}, "post": {"operationId": "opsduty_api_v1_statuspages_declare_status_page_incident", "summary": "Declare a status page incident", "parameters": [{"in": "path", "name": "status_page_id", "schema": {"title": "Status Page Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Publish an incident to a status page. It is visible to customers as soon\nas this returns, so send the wording you want them to read.\n\nPass `incident_group_id` to tie it to the operational incident your team is\nalready working on. The two then stay linked in OpsDuty, and the incident's\ntimeline records that customers were told.\n\nAdd `derive_affected_components` to have the affected components worked out\nfrom that incident's service, the same way the web app does, instead of\nlooking them up and listing them yourself.\n\nAdd `sync_component_status` to have those components report the impact you\nset while this is open, and go back to operational when you resolve it.\n\nPass `published: false` to save a draft instead. Customers see nothing of\nit, and its components are left alone, until you publish it.", "tags": ["statuspages"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/DeclareIncidentSchema"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/incidents/{incident_id}/publish/": {"post": {"operationId": "opsduty_api_v1_statuspages_publish_status_page_incident", "summary": "Publish a draft status page incident", "parameters": [{"in": "path", "name": "incident_id", "schema": {"title": "Incident Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Publish a draft incident, putting it on the status page.\n\nThe incident is dated from now rather than from when the draft was written,\nso a draft prepared ahead of time does not go out as an outage that has\nbeen running since then.", "tags": ["statuspages"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/incidents/{incident_id}/updates/": {"post": {"operationId": "opsduty_api_v1_statuspages_post_status_page_incident_update", "summary": "Post a status page incident update", "parameters": [{"in": "path", "name": "incident_id", "schema": {"title": "Incident Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentUpdateSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Post an update to a published incident, optionally moving it to a new\nstatus. The update appears on the public timeline right away, unless\n`display_at` schedules it for later.", "tags": ["statuspages"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/PostIncidentUpdateSchema"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}, "get": {"operationId": "opsduty_api_v1_statuspages_list_status_page_incident_updates", "summary": "List status page incident updates", "parameters": [{"in": "path", "name": "incident_id", "schema": {"title": "Incident Id", "type": "integer"}, "required": true}, {"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedIncidentUpdateSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List the updates posted to an incident, newest first.", "tags": ["statuspages"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/incidents/{incident_id}/postmortem/": {"get": {"operationId": "opsduty_api_v1_statuspages_read_status_page_incident_postmortem", "summary": "Read a status page incident's postmortem", "parameters": [{"in": "path", "name": "incident_id", "schema": {"title": "Incident Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentPostmortemSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Read the postmortem written for an incident, published or not.\n\nRaises a validation error when the incident has no postmortem yet.", "tags": ["statuspages"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}, "put": {"operationId": "opsduty_api_v1_statuspages_write_status_page_incident_postmortem", "summary": "Write a status page incident's postmortem", "parameters": [{"in": "path", "name": "incident_id", "schema": {"title": "Incident Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentPostmortemSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Write the postmortem for an incident, creating it or replacing what is\nthere. Publishing it puts it on the public incident page and in the feed,\nand it lands on the operational incident's timeline when this incident was\ndeclared from one.", "tags": ["statuspages"], "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/SetIncidentPostmortemSchema"}}}, "required": true}, "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/statuspages/incidents/{incident_id}/postmortem/draft/": {"get": {"operationId": "opsduty_api_v1_statuspages_read_status_page_incident_postmortem_draft", "summary": "Read a starting point for an incident's postmortem", "parameters": [{"in": "path", "name": "incident_id", "schema": {"title": "Incident Id", "type": "integer"}, "required": true}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/IncidentPostmortemDraftSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "404": {"description": "Nothing in the path with that id, or the token cannot see it.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "Assemble the markdown a postmortem starts from, out of what OpsDuty already\nrecords about the incident. Nothing is saved: write it back through the\npostmortem endpoint when you are happy with it.", "tags": ["statuspages"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}, "/api/v1/users/": {"get": {"operationId": "opsduty_api_v1_users_list_users", "summary": "List users", "parameters": [{"in": "query", "name": "first", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "required": false, "description": "How many items to return from the start of the list, or after `after`."}, {"in": "query", "name": "last", "schema": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "required": false, "description": "How many items to return from the end of the list, or before `before`. They are still in list order."}, {"in": "query", "name": "before", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "required": false, "description": "A `start_cursor` to page back from."}, {"in": "query", "name": "after", "schema": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}, "required": false, "description": "An `end_cursor` to page on from."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/PagedUserSchema"}}}}, "422": {"description": "The request was understood but its parameters or body cannot be used.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "array", "items": {}}}, "required": ["detail"]}}}}, "401": {"description": "The token is missing, expired, or lacks the scope this endpoint needs.", "content": {"application/json": {"schema": {"type": "object", "properties": {"detail": {"type": "string"}}, "required": ["detail"]}}}}}, "description": "List the members of your organization, oldest first.", "tags": ["users"], "security": [{"AccessTokenAuth": []}, {"SessionAuthWhenSignedIn": []}]}}}, "components": {"schemas": {"CronHeartbeatStateSchema": {"properties": {"type": {"const": "cron", "title": "Type", "type": "string"}, "cron_expression": {"title": "Cron Expression", "type": "string"}, "cron_timezone": {"title": "Cron Timezone", "type": "string"}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "environment": {"anyOf": [{"maxLength": 64, "type": "string"}, {"type": "null"}], "title": "Environment"}, "muted": {"default": false, "title": "Muted", "type": "boolean"}, "resolve_incident": {"default": true, "title": "Resolve Incident", "type": "boolean"}, "timeout_seconds": {"default": 0, "title": "Timeout Seconds", "type": "integer"}}, "required": ["type", "cron_expression", "cron_timezone"], "title": "CronHeartbeatStateSchema", "type": "object"}, "IntervalHeartbeatStateSchema": {"properties": {"type": {"const": "interval", "title": "Type", "type": "string"}, "interval_seconds": {"title": "Interval Seconds", "type": "integer"}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "environment": {"anyOf": [{"maxLength": 64, "type": "string"}, {"type": "null"}], "title": "Environment"}, "muted": {"default": false, "title": "Muted", "type": "boolean"}, "resolve_incident": {"default": true, "title": "Resolve Incident", "type": "boolean"}, "timeout_seconds": {"default": 0, "title": "Timeout Seconds", "type": "integer"}}, "required": ["type", "interval_seconds"], "title": "IntervalHeartbeatStateSchema", "type": "object"}, "CreateHeartbeatStateInput": {"properties": {"heartbeat_id": {"title": "Heartbeat Id", "type": "integer"}, "environment": {"title": "Environment", "type": "string"}, "type": {"$ref": "#/components/schemas/HeartbeatType"}, "cron_expression": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cron Expression"}, "cron_timezone": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cron Timezone"}, "interval_seconds": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Interval Seconds"}, "timeout_seconds": {"title": "Timeout Seconds", "type": "integer"}, "muted": {"title": "Muted", "type": "boolean"}, "resolve_incident": {"title": "Resolve Incident", "type": "boolean"}}, "required": ["heartbeat_id", "environment", "type", "timeout_seconds", "muted", "resolve_incident"], "title": "CreateHeartbeatStateInput", "type": "object"}, "HeartbeatType": {"enum": ["cron", "interval"], "title": "HeartbeatType", "type": "string"}, "UpdateHeartbeatStateInput": {"properties": {"type": {"$ref": "#/components/schemas/HeartbeatType"}, "cron_expression": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cron Expression"}, "cron_timezone": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Cron Timezone"}, "interval_seconds": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Interval Seconds"}, "timeout_seconds": {"title": "Timeout Seconds", "type": "integer"}, "muted": {"title": "Muted", "type": "boolean"}, "resolve_incident": {"title": "Resolve Incident", "type": "boolean"}}, "required": ["type", "timeout_seconds", "muted", "resolve_incident"], "title": "UpdateHeartbeatStateInput", "type": "object"}, "HeartBeatFilter": {"properties": {"service": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Service"}}, "title": "HeartBeatFilter", "type": "object"}, "Input": {"properties": {"first": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the start of the list, or after `after`.", "title": "First"}, "last": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How many items to return from the end of the list, or before `before`. They are still in list order.", "title": "Last"}, "before": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "A `start_cursor` to page back from.", "title": "Before"}, "after": {"anyOf": [{"type": "string"}, {"type": "null"}], "description": "An `end_cursor` to page on from.", "title": "After"}}, "title": "Input", "type": "object"}, "HeartbeatSchema": {"properties": {"states": {"items": {"anyOf": [{"$ref": "#/components/schemas/CronHeartbeatStateSchema"}, {"$ref": "#/components/schemas/IntervalHeartbeatStateSchema"}]}, "title": "States", "type": "array"}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "public_primary_key": {"maxLength": 20, "title": "Public Primary Key", "type": "string"}, "name": {"maxLength": 150, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "default": "", "title": "Description"}, "link": {"anyOf": [{"maxLength": 500, "type": "string"}, {"type": "null"}], "title": "Link"}, "service": {"title": "Service", "type": "integer"}, "incident_urgency": {"anyOf": [{"maxLength": 32, "type": "string"}, {"type": "null"}], "title": "Incident Urgency"}}, "required": ["states", "name", "service"], "title": "HeartbeatSchema", "type": "object"}, "PageInfo": {"properties": {"has_next_page": {"title": "Has Next Page", "type": "boolean"}, "has_previous_page": {"title": "Has Previous Page", "type": "boolean"}, "start_cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Start Cursor"}, "end_cursor": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "End Cursor"}}, "required": ["has_next_page", "has_previous_page"], "title": "PageInfo", "type": "object"}, "PagedHeartbeatSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/HeartbeatSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedHeartbeatSchema", "type": "object"}, "CreateHeartbeatInput": {"properties": {"name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "link": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Link"}, "service": {"title": "Service", "type": "integer"}, "incident_urgency": {"anyOf": [{"$ref": "#/components/schemas/IncidentUrgency"}, {"type": "null"}]}}, "required": ["name", "description", "service"], "title": "CreateHeartbeatInput", "type": "object"}, "IncidentUrgency": {"enum": ["high", "low"], "title": "IncidentUrgency", "type": "string"}, "UpdateHeartbeatInput": {"properties": {"name": {"title": "Name", "type": "string"}, "description": {"title": "Description", "type": "string"}, "link": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Link"}, "service": {"title": "Service", "type": "integer"}, "incident_urgency": {"anyOf": [{"$ref": "#/components/schemas/IncidentUrgency"}, {"type": "null"}]}}, "required": ["name", "description", "service"], "title": "UpdateHeartbeatInput", "type": "object"}, "IncidentGroupFilter": {"properties": {"since": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Since"}, "until": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Until"}, "service": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Service"}}, "title": "IncidentGroupFilter", "type": "object"}, "IncidentGroupSchema": {"properties": {"status": {"$ref": "#/components/schemas/IncidentGroupStatus"}, "service": {"anyOf": [{"$ref": "#/components/schemas/IncidentGroupServiceSchema"}, {"type": "null"}]}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "incident_number": {"default": 0, "title": "Incident Number", "type": "integer"}, "summary": {"anyOf": [{"maxLength": 256, "type": "string"}, {"type": "null"}], "title": "Summary"}, "acknowledged_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Acknowledged At"}, "resolved_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Resolved At"}, "silenced_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Silenced At"}, "last_status_change_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Status Change At"}}, "required": ["status", "service", "created_at"], "title": "IncidentGroupSchema", "type": "object"}, "IncidentGroupServiceSchema": {"properties": {"id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "name": {"maxLength": 255, "title": "Name", "type": "string"}}, "required": ["name"], "title": "IncidentGroupServiceSchema", "type": "object"}, "IncidentGroupStatus": {"enum": ["triggered", "silenced", "acknowledged", "resolved"], "title": "IncidentGroupStatus", "type": "string"}, "PagedIncidentGroupSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/IncidentGroupSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedIncidentGroupSchema", "type": "object"}, "IncidentGroupDetailNoteSchema": {"properties": {"id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "note": {"title": "Note", "type": "string"}}, "required": ["created_at", "note"], "title": "IncidentGroupDetailNoteSchema", "type": "object"}, "IncidentGroupDetailSchema": {"properties": {"status": {"$ref": "#/components/schemas/IncidentGroupStatus"}, "service": {"anyOf": [{"$ref": "#/components/schemas/IncidentGroupServiceSchema"}, {"type": "null"}]}, "notes": {"items": {"$ref": "#/components/schemas/IncidentGroupDetailNoteSchema"}, "title": "Notes", "type": "array"}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "incident_number": {"default": 0, "title": "Incident Number", "type": "integer"}, "summary": {"anyOf": [{"maxLength": 256, "type": "string"}, {"type": "null"}], "title": "Summary"}, "acknowledged_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Acknowledged At"}, "resolved_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Resolved At"}, "silenced_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Silenced At"}, "last_status_change_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Status Change At"}}, "required": ["status", "service", "notes", "created_at"], "title": "IncidentGroupDetailSchema", "type": "object"}, "IncidentReferenceSchema": {"properties": {"status": {"$ref": "#/components/schemas/IncidentReferenceStatus"}, "id": {"anyOf": [{"maxLength": 20, "type": "string"}, {"type": "null"}], "title": "Id"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}, "updated_at": {"format": "date-time", "title": "Updated At", "type": "string"}, "reason": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Reason"}, "incident_group": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Incident Group"}}, "required": ["status", "created_at", "updated_at"], "title": "IncidentReferenceSchema", "type": "object"}, "IncidentReferenceStatus": {"description": "The status of an incident reference.", "enum": ["pending", "failed", "stopped", "completed"], "title": "IncidentReferenceStatus", "type": "string"}, "IncidentGroupResponderSchema": {"properties": {"id": {"title": "Id", "type": "integer"}, "last_notified": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Last Notified"}, "status": {"$ref": "#/components/schemas/ResponderStatus"}, "status_updated_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Status Updated At"}, "user": {"$ref": "#/components/schemas/UserSchema"}}, "required": ["id", "last_notified", "status", "status_updated_at", "user"], "title": "IncidentGroupResponderSchema", "type": "object"}, "PagedIncidentGroupResponderSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/IncidentGroupResponderSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedIncidentGroupResponderSchema", "type": "object"}, "ResponderStatus": {"enum": ["pending", "active"], "title": "ResponderStatus", "type": "string"}, "UserSchema": {"properties": {"id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "first_name": {"anyOf": [{"maxLength": 75, "type": "string"}, {"type": "null"}], "title": "First Name"}, "last_name": {"anyOf": [{"maxLength": 75, "type": "string"}, {"type": "null"}], "title": "Last Name"}, "email": {"maxLength": 254, "title": "Email", "type": "string"}}, "required": ["email"], "title": "UserSchema", "type": "object"}, "AddIncidentNoteInputSchema": {"properties": {"note": {"title": "Note", "type": "string"}}, "required": ["note"], "title": "AddIncidentNoteInputSchema", "type": "object"}, "ResolveIncidentInputSchema": {"properties": {"note": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Note"}}, "title": "ResolveIncidentInputSchema", "type": "object"}, "PagedScheduleSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/ScheduleSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedScheduleSchema", "type": "object"}, "ScheduleSchema": {"properties": {"id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "name": {"maxLength": 255, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}}, "required": ["name"], "title": "ScheduleSchema", "type": "object"}, "ScheduleShiftSchema": {"properties": {"start": {"format": "date-time", "title": "Start", "type": "string"}, "end": {"format": "date-time", "title": "End", "type": "string"}, "users": {"items": {"$ref": "#/components/schemas/ScheduleShiftUserSchema"}, "title": "Users", "type": "array"}}, "required": ["start", "end", "users"], "title": "ScheduleShiftSchema", "type": "object"}, "ScheduleShiftUserSchema": {"properties": {"id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "first_name": {"anyOf": [{"maxLength": 75, "type": "string"}, {"type": "null"}], "title": "First Name"}, "last_name": {"anyOf": [{"maxLength": 75, "type": "string"}, {"type": "null"}], "title": "Last Name"}, "email": {"maxLength": 254, "title": "Email", "type": "string"}}, "required": ["email"], "title": "ScheduleShiftUserSchema", "type": "object"}, "ScheduleOverrideFilter": {"properties": {"since": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Since"}, "until": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Until"}}, "title": "ScheduleOverrideFilter", "type": "object"}, "PagedScheduleOverrideSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/ScheduleOverrideSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedScheduleOverrideSchema", "type": "object"}, "ScheduleOverrideSchema": {"properties": {"user": {"$ref": "#/components/schemas/ScheduleOverrideUserSchema"}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "start": {"format": "date-time", "title": "Start", "type": "string"}, "end": {"format": "date-time", "title": "End", "type": "string"}}, "required": ["user", "start", "end"], "title": "ScheduleOverrideSchema", "type": "object"}, "ScheduleOverrideUserSchema": {"properties": {"id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "first_name": {"anyOf": [{"maxLength": 75, "type": "string"}, {"type": "null"}], "title": "First Name"}, "last_name": {"anyOf": [{"maxLength": 75, "type": "string"}, {"type": "null"}], "title": "Last Name"}}, "title": "ScheduleOverrideUserSchema", "type": "object"}, "ScheduleOverrideInputSchema": {"properties": {"user_id": {"title": "User", "type": "integer"}, "start": {"format": "date-time", "title": "Start", "type": "string"}, "end": {"format": "date-time", "title": "End", "type": "string"}}, "required": ["user_id", "start", "end"], "title": "ScheduleOverrideInputSchema", "type": "object"}, "MaintenanceMode": {"enum": ["debug", "maintenance"], "title": "MaintenanceMode", "type": "string"}, "PagedServiceSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/ServiceSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedServiceSchema", "type": "object"}, "ServiceSchema": {"properties": {"maintenance_mode": {"anyOf": [{"$ref": "#/components/schemas/MaintenanceMode"}, {"type": "null"}]}, "maintenance_window_start": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Maintenance Window Start"}, "maintenance_window_end": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Maintenance Window End"}, "routing_key": {"description": "Key you send events to.", "title": "Routing Key", "type": "string"}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "name": {"maxLength": 255, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "service_type": {"default": "technical", "maxLength": 24, "title": "Service Type", "type": "string"}}, "required": ["maintenance_mode", "maintenance_window_start", "maintenance_window_end", "routing_key", "name"], "title": "ServiceSchema", "type": "object"}, "ServiceOncallUserSchema": {"properties": {"id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "first_name": {"anyOf": [{"maxLength": 75, "type": "string"}, {"type": "null"}], "title": "First Name"}, "last_name": {"anyOf": [{"maxLength": 75, "type": "string"}, {"type": "null"}], "title": "Last Name"}, "email": {"maxLength": 254, "title": "Email", "type": "string"}}, "required": ["email"], "title": "ServiceOncallUserSchema", "type": "object"}, "StartMaintenanceInputSchema": {"properties": {"mode": {"allOf": [{"$ref": "#/components/schemas/MaintenanceMode"}], "default": "maintenance"}, "duration_minutes": {"default": 60, "description": "How long maintenance mode stays active before it ends by itself, in minutes. At most 24 hours.", "title": "Duration Minutes", "type": "integer"}}, "title": "StartMaintenanceInputSchema", "type": "object"}, "PagedStatusPageSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/StatusPageSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedStatusPageSchema", "type": "object"}, "StatusPageAccessMode": {"description": "Who can see a status page on its domain.", "enum": ["public", "custom_backend", "opsduty_members"], "title": "StatusPageAccessMode", "type": "string"}, "StatusPageSchema": {"properties": {"calculate_uptime": {"description": "Whether this page shows each component's uptime to customers. The figure is worked out either way, so a component's `uptime` is populated even when this is false.", "title": "Calculate Uptime", "type": "boolean"}, "access_mode": {"$ref": "#/components/schemas/StatusPageAccessMode", "description": "Who can see the page on its domain: everyone, or only visitors who have signed in."}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "name": {"maxLength": 255, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}, "domain": {"maxLength": 255, "title": "Domain", "type": "string"}, "enabled": {"default": true, "title": "Enabled", "type": "boolean"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}}, "required": ["calculate_uptime", "access_mode", "name", "domain", "created_at"], "title": "StatusPageSchema", "type": "object"}, "ComponentSchema": {"properties": {"status": {"$ref": "#/components/schemas/ComponentStatus", "description": "What customers are being shown for this component right now. A component following its services' maintenance windows reads as under maintenance here while one of those windows is open."}, "component_group_id": {"description": "The component group this component is shown under.", "title": "Component Group Id", "type": "integer"}, "service_ids": {"description": "The OpsDuty services this component represents.", "items": {"type": "integer"}, "title": "Service Ids", "type": "array"}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "name": {"maxLength": 255, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}}, "required": ["status", "component_group_id", "service_ids", "name"], "title": "ComponentSchema", "type": "object"}, "ComponentStatus": {"enum": ["operational", "under_maintenance", "degraded_performance", "partial_outage", "major_outage"], "title": "ComponentStatus", "type": "string"}, "PagedComponentSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/ComponentSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedComponentSchema", "type": "object"}, "ComponentGroupSchema": {"properties": {"order": {"description": "Where the group is shown on the page, lowest first.", "title": "Order", "type": "integer"}, "component_ids": {"description": "The components in this group, in the order they are shown.", "items": {"type": "integer"}, "title": "Component Ids", "type": "array"}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "name": {"maxLength": 255, "title": "Name", "type": "string"}, "description": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Description"}}, "required": ["order", "component_ids", "name"], "title": "ComponentGroupSchema", "type": "object"}, "PagedComponentGroupSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/ComponentGroupSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedComponentGroupSchema", "type": "object"}, "ComponentGroupInputSchema": {"properties": {"name": {"description": "The heading customers see, e.g. 'Checkout'.", "title": "Name", "type": "string"}, "description": {"default": "", "description": "An optional line shown under the heading.", "title": "Description", "type": "string"}}, "required": ["name"], "title": "ComponentGroupInputSchema", "type": "object"}, "MoveComponentGroupSchema": {"properties": {"movement": {"$ref": "#/components/schemas/OrderedModelMovement", "description": "Which way to move the group on the page."}}, "required": ["movement"], "title": "MoveComponentGroupSchema", "type": "object"}, "OrderedModelMovement": {"enum": ["up", "down", "top", "bottom"], "title": "OrderedModelMovement", "type": "string"}, "ComponentUptimeSchema": {"properties": {"component_id": {"title": "Component Id", "type": "integer"}, "name": {"title": "Name", "type": "string"}, "uptime": {"description": "The share of the last ninety days this component was not showing an outage, as a percentage. Announced maintenance does not count against it.", "title": "Uptime", "type": "number"}}, "required": ["component_id", "name", "uptime"], "title": "ComponentUptimeSchema", "type": "object"}, "StatusPageUptimeSchema": {"properties": {"published": {"description": "Whether the page shows these figures to customers. They are worked out either way, so you can read them before turning it on.", "title": "Published", "type": "boolean"}, "components": {"items": {"$ref": "#/components/schemas/ComponentUptimeSchema"}, "title": "Components", "type": "array"}}, "required": ["published", "components"], "title": "StatusPageUptimeSchema", "type": "object"}, "SetComponentStatusSchema": {"properties": {"status": {"$ref": "#/components/schemas/ComponentStatus", "description": "What customers should be told about this component now."}}, "required": ["status"], "title": "SetComponentStatusSchema", "type": "object"}, "IncidentFilter": {"properties": {"status": {"anyOf": [{"items": {"$ref": "#/components/schemas/IncidentStatus"}, "type": "array"}, {"type": "null"}], "description": "Only incidents in one of these statuses.", "title": "Status"}, "type": {"anyOf": [{"enum": ["planned", "unplanned"], "type": "string"}, {"type": "null"}], "description": "Only planned work (scheduled, in progress or completed), or only unplanned incidents.", "title": "Type"}, "created_after": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "description": "Only incidents declared at or after this time.", "title": "Created After"}, "created_before": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "description": "Only incidents declared before this time.", "title": "Created Before"}, "component_id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "Only incidents affecting this component.", "title": "Component Id"}}, "title": "IncidentFilter", "type": "object"}, "IncidentStatus": {"enum": ["identified", "investigating", "verifying", "monitoring", "resolved", "scheduled", "in_progress", "completed"], "title": "IncidentStatus", "type": "string"}, "IncidentImpact": {"description": "The impact of an incident on the users of the affected services.\n\nThe impact can be used to automatically update the status of the affected\ncomponents.", "enum": ["none", "maintenance", "minor", "major", "critical"], "title": "IncidentImpact", "type": "string"}, "IncidentSchema": {"properties": {"status": {"$ref": "#/components/schemas/IncidentStatus"}, "impact": {"$ref": "#/components/schemas/IncidentImpact"}, "component_ids": {"items": {"type": "integer"}, "title": "Component Ids", "type": "array"}, "sync_component_status": {"description": "Whether the affected components follow this incident's impact while it is open.", "title": "Sync Component Status", "type": "boolean"}, "duration_seconds": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "How long the incident lasted. Null until it is resolved.", "title": "Duration Seconds"}, "draft": {"description": "Whether this is a draft only your team can see. Publish it to put it on the status page.", "title": "Draft", "type": "boolean"}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "status_page": {"title": "Status Page", "type": "integer"}, "incident_group": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "Incident Group"}, "title": {"maxLength": 255, "title": "Title", "type": "string"}, "body": {"anyOf": [{"type": "string"}, {"type": "null"}], "title": "Body"}, "monitoring_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Monitoring At"}, "resolved_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Resolved At"}, "scheduled_start": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Scheduled Start"}, "scheduled_end": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Scheduled End"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}}, "required": ["status", "impact", "component_ids", "sync_component_status", "duration_seconds", "draft", "status_page", "title", "created_at"], "title": "IncidentSchema", "type": "object"}, "PagedIncidentSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/IncidentSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedIncidentSchema", "type": "object"}, "DeclareIncidentSchema": {"properties": {"title": {"description": "The headline customers see, e.g. 'Elevated error rates'.", "title": "Title", "type": "string"}, "status": {"allOf": [{"$ref": "#/components/schemas/IncidentStatus"}], "default": "investigating", "description": "Where the incident stands right now."}, "impact": {"allOf": [{"$ref": "#/components/schemas/IncidentImpact"}], "default": "minor", "description": "How badly customers are affected."}, "body": {"default": "", "description": "The opening message customers read. Markdown is supported.", "title": "Body", "type": "string"}, "component_ids": {"description": "Components on this status page the incident affects.", "items": {"type": "integer"}, "title": "Component Ids", "type": "array"}, "incident_group_id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "description": "The operational incident this one tells customers about. Pass the id from /api/v1/incidents/ so the two are linked.", "title": "Incident Group Id"}, "derive_affected_components": {"default": false, "description": "Work out the affected components from the linked incident's service instead of listing them yourself. Needs incident_group_id, and is ignored when you pass component_ids.", "title": "Derive Affected Components", "type": "boolean"}, "sync_component_status": {"default": false, "description": "Keep the affected components in step with this incident's impact. While it is open they read the status the impact implies, and resolving it puts them back to operational.", "title": "Sync Component Status", "type": "boolean"}, "published": {"default": true, "description": "Publish it to the status page straight away. Set to false to save a draft only your team can see, and publish it when it is ready.", "title": "Published", "type": "boolean"}}, "required": ["title"], "title": "DeclareIncidentSchema", "type": "object"}, "IncidentUpdateSchema": {"properties": {"status": {"anyOf": [{"$ref": "#/components/schemas/IncidentStatus"}, {"type": "null"}], "description": "Where the incident stood right after this update was posted. Null on updates posted before statuses were recorded."}, "visible": {"description": "Whether customers can read this update yet. One scheduled for later, or never given a display time, stays off the public page until then.", "title": "Visible", "type": "boolean"}, "published_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "description": "When the update went out and any status change it carries was applied. Null while a scheduled update waits for its display time.", "title": "Published At"}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "body": {"title": "Body", "type": "string"}, "display_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Display At"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}}, "required": ["status", "visible", "published_at", "body", "created_at"], "title": "IncidentUpdateSchema", "type": "object"}, "PostIncidentUpdateSchema": {"properties": {"body": {"description": "What has changed since the last update. Markdown is supported.", "title": "Body", "type": "string"}, "status": {"anyOf": [{"$ref": "#/components/schemas/IncidentStatus"}, {"type": "null"}], "description": "Move the incident to a new status at the same time. Pass 'resolved' to close it out."}, "display_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "description": "Schedule the update for later. It stays off the public page, and the status change waits, until this time. Leave it out to post now.", "title": "Display At"}}, "required": ["body"], "title": "PostIncidentUpdateSchema", "type": "object"}, "PagedIncidentUpdateSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/IncidentUpdateSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedIncidentUpdateSchema", "type": "object"}, "IncidentPostmortemSchema": {"properties": {"published": {"description": "Whether customers can read this. An unpublished postmortem stays a draft and never reaches the public page or the feed.", "title": "Published", "type": "boolean"}, "id": {"anyOf": [{"type": "integer"}, {"type": "null"}], "title": "ID"}, "body": {"title": "Body", "type": "string"}, "published_at": {"anyOf": [{"format": "date-time", "type": "string"}, {"type": "null"}], "title": "Published At"}, "created_at": {"format": "date-time", "title": "Created At", "type": "string"}}, "required": ["published", "body", "created_at"], "title": "IncidentPostmortemSchema", "type": "object"}, "SetIncidentPostmortemSchema": {"properties": {"body": {"description": "The retrospective customers read. Markdown is supported.", "title": "Body", "type": "string"}, "published": {"default": false, "description": "Publish it to the public page and the feed. Defaults to false, so writing a postmortem does not show it to customers until you say so. Setting this back to false takes a published one down again.", "title": "Published", "type": "boolean"}}, "required": ["body"], "title": "SetIncidentPostmortemSchema", "type": "object"}, "IncidentPostmortemDraftSchema": {"properties": {"body": {"description": "Markdown assembled from what OpsDuty already knows about the incident: when it started and ended, how long it lasted, what it affected, how long each component was down, and every update customers were shown. Nothing is saved until you write it back.", "title": "Body", "type": "string"}}, "required": ["body"], "title": "IncidentPostmortemDraftSchema", "type": "object"}, "PagedUserSchema": {"properties": {"items": {"items": {"$ref": "#/components/schemas/UserSchema"}, "title": "Items", "type": "array"}, "page_info": {"$ref": "#/components/schemas/PageInfo"}}, "required": ["items", "page_info"], "title": "PagedUserSchema", "type": "object"}}, "securitySchemes": {"AccessTokenAuth": {"type": "http", "scheme": "bearer"}, "SessionAuthWhenSignedIn": {"type": "apiKey", "in": "cookie", "name": "sessionid"}}}, "servers": []}