{
  "openapi": "3.1.0",
  "info": {
    "title": "zpe-status",
    "version": "3.0.1",
    "description": "The universe board on status.zpe.vc: every app the registry declares, joined to this account's monitor and to the last check of each, read with an owner session or an account key. The machine surface answers at exactly one base, /_/api/v1, and this document is served at /_/api/v1/openapi.json. The unversioned machine path this app answered before the move is a 308 signpost at its versioned address."
  },
  "servers": [
    {
      "url": "/",
      "description": "zpe-status on zpe.vc"
    }
  ],
  "paths": {
    "/_/api/v1/universe": {
      "get": {
        "operationId": "getUniverse",
        "summary": "Every app the registry declares, joined to this account's monitor and its last check",
        "tags": [
          "universe"
        ],
        "parameters": [
          {
            "name": "lifecycle",
            "in": "query",
            "description": "Only rows whose declared lifecycle is this one (`live`, `wip`, `plan`, …), as the registry spells it.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "access",
            "in": "query",
            "description": "Only rows whose declared access is this one (a public app, a gated one, the owner's own).",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "kind",
            "in": "query",
            "description": "Only rows of this kind, as the registry declares it (a worker, a page, a service).",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "category",
            "in": "query",
            "description": "Only rows carrying this category in their list of categories.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "license",
            "in": "query",
            "description": "Only rows whose declared licence is this one.",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "check",
            "in": "query",
            "description": "Only rows whose last check answered this word (`up`, `down`, `none`), which is the word the cell shows.",
            "required": false,
            "schema": {
              "type": "string",
              "enum": [
                "up",
                "down",
                "none"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Every app the registry declares, as rows, joined to this account's monitor and the last check of each, narrowed by the filters the query names.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "401": {
            "description": "The credential is missing, or the door did not recognise it.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "403": {
            "description": "This credential may not read this board: the key is not granted this app, or the board was claimed by another account and it is not shared.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Too many requests: this key has spent its request ceiling.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "500": {
            "description": "This app failed while answering",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "503": {
            "description": "The door did not answer, so the request could not be checked.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "An API key minted on the account's settings page at zpe.vc/home/settings. Send it as `Authorization: Bearer <key>`."
      }
    },
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem+json: `type`, `title`, `status`, `code` and `instance`, plus `detail` when a person should read a sentence.",
        "required": [
          "type",
          "title",
          "status",
          "code",
          "instance"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "code": {
            "type": "string",
            "enum": [
              "bad-request",
              "unauthenticated",
              "malformed",
              "unknown",
              "mismatch",
              "revoked",
              "expired",
              "another-account",
              "scope-refused",
              "grant-refused",
              "forbidden",
              "not-found",
              "method-not-allowed",
              "conflict",
              "gone",
              "payload-too-large",
              "unsupported-media-type",
              "unprocessable",
              "rate-limited",
              "payment-required",
              "not-open",
              "internal",
              "unavailable"
            ]
          },
          "instance": {
            "type": "string"
          },
          "detail": {
            "type": "string"
          }
        }
      }
    }
  },
  "x-surface": {
    "app": "zpe-status",
    "base": "/_/api/v1",
    "document": "/_/api/v1/openapi.json",
    "generated_by": "zpe-kit machineDocument"
  },
  "x-zpe-routes": 1,
  "x-zpe-documented": 1,
  "x-zpe-internal": []
}
