{
  "openapi": "3.1.0",
  "info": {
    "title": "SandboxAPIs — Statuspage (paths only)",
    "version": "coverage-manifest-rev-5",
    "summary": "The 27 read paths SandboxAPIs serves on Statuspage.",
    "description": "Every read SandboxAPIs serves on Statuspage, pointed at https://statuspage.sandboxapis.dev/v1.\n\n27 requests, one per served row of our coverage manifest. PATHS ONLY: this file carries no request or\nresponse schema, because a schema is the part of an API description we do not own. It is generated from\ncoverage/COVERAGE_MANIFEST.yaml — our own record of what THIS host answers — and never from a vendor's\npublished specification, several of which may not be redistributed.\n\nThe host is read-only. Every write verb answers the provider's own error shape with a message naming what was\nattempted; the \"Read-only refusal, on purpose\" folder holds one so the shape is discoverable.\n\nNo credentials are needed — any value in `apiKey` is accepted, and a real SandboxAPIs key only raises the rate\nlimit. Path variables left blank are identifiers that move when the live host re-rolls; fill them from a list\nresponse."
  },
  "servers": [
    {
      "url": "https://statuspage.sandboxapis.dev/v1",
      "description": "The live Statuspage host"
    }
  ],
  "security": [
    {
      "sandboxapisKey": []
    }
  ],
  "components": {
    "securitySchemes": {
      "sandboxapisKey": {
        "type": "apiKey",
        "in": "header",
        "name": "Authorization",
        "description": "OAuth token"
      }
    }
  },
  "paths": {
    "/organizations/{organization_id}/permissions/{user_id}": {
      "get": {
        "summary": "GET /organizations/{organization_id}/permissions/{user_id}",
        "operationId": "get_organizations_organization_id_permissions_user_id",
        "tags": [
          "users"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "user_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/organizations/{organization_id}/users": {
      "get": {
        "summary": "GET /organizations/{organization_id}/users",
        "operationId": "get_organizations_organization_id_users",
        "tags": [
          "users"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "organization_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages": {
      "get": {
        "summary": "GET /pages",
        "operationId": "get_pages",
        "tags": [
          "pages"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}": {
      "get": {
        "summary": "GET /pages/{page_id}",
        "operationId": "get_pages_page_id",
        "tags": [
          "pages"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/component-groups": {
      "get": {
        "summary": "GET /pages/{page_id}/component-groups",
        "operationId": "get_pages_page_id_component-groups",
        "tags": [
          "component-groups"
        ],
        "description": "Served by SandboxAPIs. Answer mode: empty. Answers an EMPTY collection, and that is the true answer for this universe — not a gap. This universe has no component group at all - status_page_service carries no group column and renderer-statuspage/src/render.ts already says so in as many words while omitting `group_id` from every served component; Statuspage's own answer for a page with no groups is `[]` at 200. RULED by the founder 2026-09-12 (round 19), on the coverage audit's proposal",
        "x-sandboxapis-mode": "empty",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/components": {
      "get": {
        "summary": "GET /pages/{page_id}/components",
        "operationId": "get_pages_page_id_components",
        "tags": [
          "components"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/components/{component_id}": {
      "get": {
        "summary": "GET /pages/{page_id}/components/{component_id}",
        "operationId": "get_pages_page_id_components_component_id",
        "tags": [
          "components"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "component_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/components/{component_id}/uptime": {
      "get": {
        "summary": "GET /pages/{page_id}/components/{component_id}/uptime",
        "operationId": "get_pages_page_id_components_component_id_uptime",
        "tags": [
          "components"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "component_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/incident_templates": {
      "get": {
        "summary": "GET /pages/{page_id}/incident_templates",
        "operationId": "get_pages_page_id_incident_templates",
        "tags": [
          "incident-templates"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/incidents": {
      "get": {
        "summary": "GET /pages/{page_id}/incidents",
        "operationId": "get_pages_page_id_incidents",
        "tags": [
          "incidents"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/incidents/{incident_id}": {
      "get": {
        "summary": "GET /pages/{page_id}/incidents/{incident_id}",
        "operationId": "get_pages_page_id_incidents_incident_id",
        "tags": [
          "incidents"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/incidents/{incident_id}/postmortem": {
      "get": {
        "summary": "GET /pages/{page_id}/incidents/{incident_id}/postmortem",
        "operationId": "get_pages_page_id_incidents_incident_id_postmortem",
        "tags": [
          "incident-postmortem"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/incidents/{incident_id}/subscribers": {
      "get": {
        "summary": "GET /pages/{page_id}/incidents/{incident_id}/subscribers",
        "operationId": "get_pages_page_id_incidents_incident_id_subscribers",
        "tags": [
          "incident-subscribers"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/incidents/{incident_id}/subscribers/{subscriber_id}": {
      "get": {
        "summary": "GET /pages/{page_id}/incidents/{incident_id}/subscribers/{subscriber_id}",
        "operationId": "get_pages_page_id_incidents_incident_id_subscribers_subscriber_id",
        "tags": [
          "incident-subscribers"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "incident_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subscriber_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/incidents/active_maintenance": {
      "get": {
        "summary": "GET /pages/{page_id}/incidents/active_maintenance",
        "operationId": "get_pages_page_id_incidents_active_maintenance",
        "tags": [
          "incidents"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/incidents/scheduled": {
      "get": {
        "summary": "GET /pages/{page_id}/incidents/scheduled",
        "operationId": "get_pages_page_id_incidents_scheduled",
        "tags": [
          "incidents"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/incidents/unresolved": {
      "get": {
        "summary": "GET /pages/{page_id}/incidents/unresolved",
        "operationId": "get_pages_page_id_incidents_unresolved",
        "tags": [
          "incidents"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/incidents/upcoming": {
      "get": {
        "summary": "GET /pages/{page_id}/incidents/upcoming",
        "operationId": "get_pages_page_id_incidents_upcoming",
        "tags": [
          "incidents"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/metrics": {
      "get": {
        "summary": "GET /pages/{page_id}/metrics",
        "operationId": "get_pages_page_id_metrics",
        "tags": [
          "metrics"
        ],
        "description": "Served by SandboxAPIs. Answer mode: empty. Answers an EMPTY collection, and that is the true answer for this universe — not a gap. This status page publishes no metric - Statuspage requires every published metric to belong to a metrics provider and this page has none (the row below); canon's metric_series and sample rows belong to the internal observability canon (metric_series.service names a TECHNICAL service) and no status_page_service publishes one. NOTE the document types this collection as a single `Metric` where the live API returns a list - the sixth of the seven bugs coverage/provider-pins.yaml catalogues for this provider - so the array is the mirror and `[]` is its empty shape either way. RULED by the founder 2026-09-12 (round 19), on the coverage audit's proposal",
        "x-sandboxapis-mode": "empty",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/metrics_providers": {
      "get": {
        "summary": "GET /pages/{page_id}/metrics_providers",
        "operationId": "get_pages_page_id_metrics_providers",
        "tags": [
          "metric-providers"
        ],
        "description": "Served by SandboxAPIs. Answer mode: empty. Answers an EMPTY collection, and that is the true answer for this universe — not a gap. No metrics provider is connected to this page - canon carries no Datadog/Pingdom/New Relic connection and no self-hosted provider row, and without a provider Statuspage can publish no metric at all; its own answer for a page with none is `[]` at 200. RULED by the founder 2026-09-12 (round 19), on the coverage audit's proposal",
        "x-sandboxapis-mode": "empty",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/page_access_groups": {
      "get": {
        "summary": "GET /pages/{page_id}/page_access_groups",
        "operationId": "get_pages_page_id_page_access_groups",
        "tags": [
          "page-access-groups"
        ],
        "description": "Served by SandboxAPIs. Answer mode: empty. Answers an EMPTY collection, and that is the true answer for this universe — not a gap. THIS PAGE IS NOT AUDIENCE-SPECIFIC, and the fact rests on something a caller can already read on this same host rather than on an assertion. The vendored document says it in its own tag prose, twice and in the same words - \"You will need Statuspage to switch your page type to audience-specific before these API endpoints have any effect on your status page\" - and shapePage() publishes viewers_must_be_team_members off canon's status_page.kind, which is Statuspage's TEAM-MEMBERS-ONLY page and a different type from an audience-specific one. Canon carries exactly two page kinds, public and private, and no third. So this page has no page access group - not because the generator forgot a roster, but because the page has no audience to roster. Statuspage's own answer for a page with none is [] at 200. THE PAGE STILL HAS TO RESOLVE: an id this universe does not have is the ordinary entity 404, never a cheerful empty. RULED by the founder 2026-09-14 on the unjudged-47 pass's proposal, as proposed; this SUPERSEDES wave W6's framing of these rows as a canon question.",
        "x-sandboxapis-mode": "empty",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/page_access_users": {
      "get": {
        "summary": "GET /pages/{page_id}/page_access_users",
        "operationId": "get_pages_page_id_page_access_users",
        "tags": [
          "page-access-users"
        ],
        "description": "Served by SandboxAPIs. Answer mode: empty. Answers an EMPTY collection, and that is the true answer for this universe — not a gap. THIS PAGE IS NOT AUDIENCE-SPECIFIC, and the fact rests on something a caller can already read on this same host rather than on an assertion. The vendored document says it in its own tag prose, twice and in the same words - \"You will need Statuspage to switch your page type to audience-specific before these API endpoints have any effect on your status page\" - and shapePage() publishes viewers_must_be_team_members off canon's status_page.kind, which is Statuspage's TEAM-MEMBERS-ONLY page and a different type from an audience-specific one. Canon carries exactly two page kinds, public and private, and no third. So nobody logs in to see this status page. The ONE person-to-page link canon does hold is status_page_subscription.person, and it is a NOTIFICATION RECIPIENT off the engineering roster rather than a login-holding viewer - which is exactly why the subscriber rows on this host serve real rows while this one is empty, and the conformance entry asserts BOTH halves on one run so a later wave cannot make the two agree by habit rather than by evidence. Statuspage's own answer for a page with none is [] at 200. RULED by the founder 2026-09-14 on the unjudged-47 pass's proposal, as proposed.",
        "x-sandboxapis-mode": "empty",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/subscribers": {
      "get": {
        "summary": "GET /pages/{page_id}/subscribers",
        "operationId": "get_pages_page_id_subscribers",
        "tags": [
          "subscribers"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/subscribers/{subscriber_id}": {
      "get": {
        "summary": "GET /pages/{page_id}/subscribers/{subscriber_id}",
        "operationId": "get_pages_page_id_subscribers_subscriber_id",
        "tags": [
          "subscribers"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "subscriber_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/subscribers/count": {
      "get": {
        "summary": "GET /pages/{page_id}/subscribers/count",
        "operationId": "get_pages_page_id_subscribers_count",
        "tags": [
          "subscribers"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/subscribers/histogram_by_state": {
      "get": {
        "summary": "GET /pages/{page_id}/subscribers/histogram_by_state",
        "operationId": "get_pages_page_id_subscribers_histogram_by_state",
        "tags": [
          "subscribers"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    },
    "/pages/{page_id}/subscribers/unsubscribed": {
      "get": {
        "summary": "GET /pages/{page_id}/subscribers/unsubscribed",
        "operationId": "get_pages_page_id_subscribers_unsubscribed",
        "tags": [
          "subscribers"
        ],
        "description": "Served by SandboxAPIs. Answer mode: derive.",
        "x-sandboxapis-mode": "derive",
        "parameters": [
          {
            "name": "page_id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "The provider's own response shape. This document describes paths only and carries no schema."
          }
        }
      }
    }
  }
}
