{
  "openapi": "3.1.0",
  "info": {
    "title": "Security Intelligence public consumer API",
    "version": "1.1.0",
    "description": "Implemented public HTTP surface for API version 1.0. This artifact describes public reads, signed feed retrieval, contract downloads, optional consumer accounts/subscriptions and anonymous private correction intake. Host feature flags and configured owners control availability; this is not proof of deployment or Final acceptance. No server LLM execution, operator/control APIs, private project scans, admin-agent RPC or local CLI IPC are included. JSON examples, if supplied, are synthetic; identifiers and origins are placeholders. Browser account operations use separate opaque consumer cookies, not public-read bearer keys. HTTPS with exact configured host is required. Public responses use Cache-Control: no-store. All operations share a process admission bound of eight handlers; saturation returns 503 SERVICE_UNAVAILABLE with Retry-After: 1 before account quota charging. Anonymous public reader limits are peer burst 30/refill 10 per second and process burst 100/refill 60 per second; authenticated reads also retain these checks and have a two-request concurrency bound. Account limits are current grant-based requests and exact bytes shared by all account keys per UTC day. Limits are rejection policies, not measured throughput or RAM guarantees. A feature flag false never means safe fallback or implementation completion. Unsupported endpoints are absent from this document. Unknown/duplicate/empty query values are rejected on public reads; consumer queries are forbidden except the documented OIDC callback and subscription-products after parameter. Anonymous corrections reject forwarding headers, cross-site requests, raw escaped paths, any query and any Authorization header. Correction process limit is 120 requests/minute and 30 per hashed peer/minute plus durable daily intake budget. Do not send credentials, local source, project paths or private evidence to public endpoints."
  },
  "servers": [
    {
      "url": "https://public.example.invalid",
      "description": "Placeholder only. Replace with the configured public HTTPS origin; not an operating service."
    }
  ],
  "externalDocs": {
    "description": "OpenAPI 3.1.0 specification (format reference, published 2021-02-15; checked 2026-10-26).",
    "url": "https://spec.openapis.org/oas/v3.1.0.html"
  },
  "tags": [
    {
      "name": "Public read"
    },
    {
      "name": "Consumer auth"
    },
    {
      "name": "Consumer account"
    },
    {
      "name": "Consumer privacy proof"
    },
    {
      "name": "Consumer subscriptions"
    },
    {
      "name": "Corrections"
    }
  ],
  "paths": {
    "/api/v1/public/capabilities": {
      "get": {
        "operationId": "getCapabilities",
        "tags": [
          "Public read"
        ],
        "summary": "Read supported features",
        "description": "Feature flags reflect this host configuration. Accounts, subscriptions and correction intake are optional. signed_feed does not guarantee the latest feed is currently usable.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Read supported features",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Capabilities"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/issues": {
      "get": {
        "operationId": "listIssues",
        "tags": [
          "Public read"
        ],
        "summary": "List approved public issue projections",
        "description": "Coverage is approved_public_projections_only, not all collected knowledge. Stable issue ID order; current rights, source and policy checks still apply to every page. Normal JSON page ceiling is 262144 bytes.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 256
            },
            "description": "UTF-8 plain search, at most 1024 bytes; no control characters."
          },
          {
            "name": "confirmation",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "candidate"
              ]
            }
          },
          {
            "name": "source_state",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "active",
                "corrected",
                "withdrawn",
                "conflicting"
              ]
            }
          },
          {
            "name": "modified_after",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Opaque cursor; retain identical filters and limit. Expiry is 410; scope change is 409. Never parse or edit it."
          }
        ],
        "responses": {
          "200": {
            "description": "List approved public issue projections",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Page"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/issues/{id}": {
      "get": {
        "operationId": "getIssue",
        "tags": [
          "Public read"
        ],
        "summary": "Read a public issue revision",
        "description": "Unknown, private, expired or disallowed revisions share 404. feed_evidence distinguishes current, historical and unverified publication evidence; a readable projection alone is not a signed feed publication.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "revision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            },
            "description": "Omit to select latest publicly readable revision."
          }
        ],
        "responses": {
          "200": {
            "description": "Read a public issue revision",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Detail"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/issues/{id}/investigation-prompt": {
      "get": {
        "operationId": "getInvestigationPrompt",
        "tags": [
          "Public read"
        ],
        "summary": "Read approved English investigation prompt",
        "description": "Approved prompt only, never model execution. English TXT is an app-free download for a user-selected local provider. No private project input is sent to the server.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "revision",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            },
            "description": "Exact canonical positive decimal issue revision."
          }
        ],
        "responses": {
          "200": {
            "description": "Read approved English investigation prompt",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicInvestigationPrompt"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/issues/{id}/investigation-prompt.txt": {
      "get": {
        "operationId": "getInvestigationPromptText",
        "tags": [
          "Public read"
        ],
        "summary": "Read approved English investigation prompt",
        "description": "Approved prompt only, never model execution. English TXT is an app-free download for a user-selected local provider. No private project input is sent to the server.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "revision",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 1
            },
            "description": "Exact canonical positive decimal issue revision."
          }
        ],
        "responses": {
          "200": {
            "description": "Read approved English investigation prompt",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "Content-Disposition": {
                "schema": {
                  "type": "string"
                }
              },
              "X-SI-Prompt-Artifact": {
                "schema": {
                  "type": "string"
                }
              },
              "X-SI-Prompt-SHA256": {
                "schema": {
                  "type": "string"
                }
              },
              "X-SI-Prompt-Revision": {
                "schema": {
                  "type": "string"
                }
              },
              "X-SI-Prompt-Head-Revision": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/status": {
      "get": {
        "operationId": "getServiceStatus",
        "tags": [
          "Public read"
        ],
        "summary": "Public service health projection with bounded collection and notice information; not a claim of complete source coverage.",
        "description": "Public service health projection with bounded collection and notice information; not a claim of complete source coverage.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Public service health projection with bounded collection and notice information; not a claim of complete source coverage.",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/status/notices": {
      "get": {
        "operationId": "listStatusNotices",
        "tags": [
          "Public read"
        ],
        "summary": "Approved public notices; locale projections do not replace original evidence.",
        "description": "Approved public notices; locale projections do not replace original evidence.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "component",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "locale",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Opaque cursor; retain identical filters and limit. Expiry is 410; scope change is 409. Never parse or edit it."
          }
        ],
        "responses": {
          "200": {
            "description": "Approved public notices; locale projections do not replace original evidence.",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoticePage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/status/notices/{id}": {
      "get": {
        "operationId": "getStatusNotice",
        "tags": [
          "Public read"
        ],
        "summary": "Read a publicly readable notice revision.",
        "description": "Read a publicly readable notice revision.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "revision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            },
            "description": "Omit to select latest publicly readable revision."
          }
        ],
        "responses": {
          "200": {
            "description": "Read a publicly readable notice revision.",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NoticeDetail"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/status/collection": {
      "get": {
        "operationId": "listCollectionStatus",
        "tags": [
          "Public read"
        ],
        "summary": "Read bounded public collection status; do not infer full source or connector qualification.",
        "description": "Read bounded public collection status; do not infer full source or connector qualification.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Opaque cursor; retain identical filters and limit. Expiry is 410; scope change is 409. Never parse or edit it."
          }
        ],
        "responses": {
          "200": {
            "description": "Read bounded public collection status; do not infer full source or connector qualification.",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CollectionStatusPage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/status": {
      "get": {
        "operationId": "getLegacyPublicationStatus",
        "tags": [
          "Public read"
        ],
        "summary": "Read legacy publication status",
        "description": "Legacy anonymous status route. Consumer bearer authentication is not accepted on this route. Unknown paths/methods may return plain-text 404.",
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Read legacy publication status",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "publication_state": {
                      "type": "string"
                    },
                    "last_published_sequence": {
                      "anyOf": [
                        {
                          "type": "integer"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    },
                    "source_coverage": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "publication_state",
                    "last_published_sequence",
                    "source_coverage"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/vendor-news": {
      "get": {
        "operationId": "listVendorNews",
        "tags": [
          "Public read"
        ],
        "summary": "Read approved vendor security news",
        "description": "Current approved_vendor_news_only projections. Filters are allowlisted; arbitrary source URLs and model jobs are not accepted.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "maxLength": 200
            },
            "description": "Plain text, at most 800 UTF-8 bytes; no control characters."
          },
          {
            "name": "vendor",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "gitlab",
                "railway",
                "vercel",
                "supabase"
              ]
            }
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "incident",
                "patch",
                "advisory",
                "outage"
              ]
            }
          },
          {
            "name": "deployment",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "saas",
                "self_hosted",
                "mixed",
                "unknown"
              ]
            }
          },
          {
            "name": "product_id",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "origin_locale",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "en",
                "ko",
                "ja",
                "zh-Hans",
                "es",
                "fr",
                "ru",
                "pt-PT",
                "und"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Opaque cursor; retain identical filters and limit. Expiry is 410; scope change is 409. Never parse or edit it."
          }
        ],
        "responses": {
          "200": {
            "description": "Read approved vendor security news",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicPage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/vendor-news/{id}": {
      "get": {
        "operationId": "getVendorNews",
        "tags": [
          "Public read"
        ],
        "summary": "Read approved vendor security news",
        "description": "Current approved_vendor_news_only projections. Filters are allowlisted; arbitrary source URLs and model jobs are not accepted.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "revision",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "minimum": 1
            },
            "description": "Omit to select latest publicly readable revision."
          }
        ],
        "responses": {
          "200": {
            "description": "Read approved vendor security news",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicDetail"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/feeds/tuf/timestamp.json": {
      "get": {
        "operationId": "getTUFTimestamp",
        "tags": [
          "Public read"
        ],
        "summary": "Download signed feed artifact",
        "description": "Current readable signed timestamp; unavailable/expired feed is 404. ArtifactRoot must be configured and the artifact currently authorized/readable; otherwise 404. Validate signatures, digests, namespace, expiry and schema locally before applying. No snapshot/delta query API is implemented; follow manifest object references.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Download signed feed artifact",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Quoted SHA-256 digest. The handler currently returns full 200 bytes; conditional 304 is not implemented."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/feeds/tuf/{metadata}": {
      "get": {
        "operationId": "getTUFMetadata",
        "tags": [
          "Public read"
        ],
        "summary": "Download signed feed artifact",
        "description": "Read authorized versioned TUF metadata. ArtifactRoot must be configured and the artifact currently authorized/readable; otherwise 404. Validate signatures, digests, namespace, expiry and schema locally before applying. No snapshot/delta query API is implemented; follow manifest object references.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "metadata",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[1-9][0-9]{0,15}\\.(root|targets|feed-public-all|feed-recovery|snapshot|timestamp)\\.json$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Download signed feed artifact",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Quoted SHA-256 digest. The handler currently returns full 200 bytes; conditional 304 is not implemented."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/feeds/manifests/latest": {
      "get": {
        "operationId": "getLatestFeedManifest",
        "tags": [
          "Public read"
        ],
        "summary": "Download signed feed artifact",
        "description": "Only public-all is supported. Exact channel query is required; other channels return 422. ArtifactRoot must be configured and the artifact currently authorized/readable; otherwise 404. Validate signatures, digests, namespace, expiry and schema locally before applying. No snapshot/delta query API is implemented; follow manifest object references.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "channel",
            "in": "query",
            "required": true,
            "schema": {
              "const": "public-all"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Download signed feed artifact",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Quoted SHA-256 digest. The handler currently returns full 200 bytes; conditional 304 is not implemented."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/feeds/manifests/{digest}.public-all.json": {
      "get": {
        "operationId": "getFeedManifest",
        "tags": [
          "Public read"
        ],
        "summary": "Download signed feed artifact",
        "description": "Read digest-addressed manifest bytes. ArtifactRoot must be configured and the artifact currently authorized/readable; otherwise 404. Validate signatures, digests, namespace, expiry and schema locally before applying. No snapshot/delta query API is implemented; follow manifest object references.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "digest",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Digest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Download signed feed artifact",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Quoted SHA-256 digest. The handler currently returns full 200 bytes; conditional 304 is not implemented."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/feeds/targets/feeds/manifests/{digest}.public-all.json": {
      "get": {
        "operationId": "getFeedTargetManifest",
        "tags": [
          "Public read"
        ],
        "summary": "Download signed feed artifact",
        "description": "Alias for digest-addressed manifest bytes. ArtifactRoot must be configured and the artifact currently authorized/readable; otherwise 404. Validate signatures, digests, namespace, expiry and schema locally before applying. No snapshot/delta query API is implemented; follow manifest object references.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "digest",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Digest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Download signed feed artifact",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Quoted SHA-256 digest. The handler currently returns full 200 bytes; conditional 304 is not implemented."
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/feeds/objects/{digest}": {
      "get": {
        "operationId": "getFeedObject",
        "tags": [
          "Public read"
        ],
        "summary": "Download signed feed artifact",
        "description": "Read exact digest-addressed artifact bytes; honor manifest compression/media metadata. ArtifactRoot must be configured and the artifact currently authorized/readable; otherwise 404. Validate signatures, digests, namespace, expiry and schema locally before applying. No snapshot/delta query API is implemented; follow manifest object references.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "digest",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Digest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Download signed feed artifact Content-Type is stored artifact media_type; listed binary media types are representative.",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "ETag": {
                "schema": {
                  "type": "string"
                },
                "description": "Quoted SHA-256 digest. The handler currently returns full 200 bytes; conditional 304 is not implemented."
              }
            },
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              },
              "application/gzip": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/feeds/recovery": {
      "get": {
        "operationId": "listRecoveryAuthorizations",
        "tags": [
          "Public read"
        ],
        "summary": "Read feed recovery verification material",
        "description": "Requires configured artifact root. Recovery material is independent of article rights and feed expiry, but does not automatically authorize a trust change.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "Last authorization ID from next_cursor; maximum 50 per page."
          }
        ],
        "responses": {
          "200": {
            "description": "Read feed recovery verification material",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecoveryCatalogPage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/feeds/recovery/{id}": {
      "get": {
        "operationId": "getRecoveryBundle",
        "tags": [
          "Public read"
        ],
        "summary": "Read feed recovery verification material",
        "description": "Requires configured artifact root. Recovery material is independent of article rights and feed expiry, but does not automatically authorize a trust change.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Read feed recovery verification material",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/feeds/recovery/{id}/authorization": {
      "get": {
        "operationId": "getRecoveryAuthorization",
        "tags": [
          "Public read"
        ],
        "summary": "Read feed recovery verification material",
        "description": "Requires configured artifact root. Recovery material is independent of article rights and feed expiry, but does not automatically authorize a trust change.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Read feed recovery verification material",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/feeds/recovery/{id}/metadata": {
      "get": {
        "operationId": "getRecoveryMetadata",
        "tags": [
          "Public read"
        ],
        "summary": "Read feed recovery verification material",
        "description": "Requires configured artifact root. Recovery material is independent of article rights and feed expiry, but does not automatically authorize a trust change.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Read feed recovery verification material",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/contracts/{version}": {
      "get": {
        "operationId": "getPublicContractBundle",
        "tags": [
          "Public read"
        ],
        "summary": "Download versioned public contract",
        "description": "Manifest lists byte length, SHA-256, schema identity/aliases and version-pinned download paths. Legacy 1.0.0 and 1.1.0 artifacts are immutable; API version 1.0 is independent of feed and bundle versions. Only artifacts listed by a selected manifest are downloadable.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "current or supported immutable bundle version; unsupported versions return 404."
          }
        ],
        "responses": {
          "200": {
            "description": "Download versioned public contract",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "Content-Disposition": {
                "schema": {
                  "type": "string"
                }
              },
              "X-SI-Contract-Bundle-Version": {
                "schema": {
                  "type": "string"
                }
              },
              "X-SI-Contract-SHA256": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/contracts/{version}/{artifact}": {
      "get": {
        "operationId": "getPublicContractArtifact",
        "tags": [
          "Public read"
        ],
        "summary": "Download versioned public contract",
        "description": "Manifest lists byte length, SHA-256, schema identity/aliases and version-pinned download paths. Legacy 1.0.0 and 1.1.0 artifacts are immutable; API version 1.0 is independent of feed and bundle versions. Only artifacts listed by a selected manifest are downloadable.",
        "security": [
          {},
          {
            "PublicReadKey": []
          }
        ],
        "parameters": [
          {
            "name": "version",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "artifact",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact filename listed in that version manifest; unsupported artifact/version returns 404."
          }
        ],
        "responses": {
          "200": {
            "description": "Download versioned public contract",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "Content-Disposition": {
                "schema": {
                  "type": "string"
                }
              },
              "X-SI-Contract-Bundle-Version": {
                "schema": {
                  "type": "string"
                }
              },
              "X-SI-Contract-SHA256": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Public401"
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "410": {
            "$ref": "#/components/responses/Public410"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/consumer/auth/prepare": {
      "get": {
        "operationId": "prepareConsumerLogin",
        "tags": [
          "Consumer auth"
        ],
        "summary": "Prepare consumer OIDC login",
        "description": "Sets Secure HttpOnly SameSite=Lax __Host-si_consumer_auth. Returns a pre-auth CSRF token and validated issuer/authorization origin. Discovery outage is 503 with Retry-After: 2; existing sessions and anonymous reads remain independent.",
        "security": [],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Prepare consumer OIDC login",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "Set-Cookie": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthPrepare"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      }
    },
    "/api/v1/consumer/auth/begin": {
      "post": {
        "operationId": "beginConsumerLogin",
        "tags": [
          "Consumer auth"
        ],
        "summary": "Begin consumer OIDC authorization",
        "description": "Exact same-origin Origin and pre-auth CSRF token are required. Strict application/json object at most 16384 bytes. reAuthenticate=true also requires current consumer session and binds the login to that account. Allowed account return paths preserve an explicit supported locale; an unsupported target safely defaults to /en/account/quota. OIDC state/nonce and PKCE S256 bind the flow. No Idempotency-Key is required here.",
        "security": [
          {
            "ConsumerAuthCookie": []
          }
        ],
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Pre-auth token from auth/prepare."
          }
        ],
        "responses": {
          "200": {
            "description": "Begin consumer OIDC authorization",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "authorization_url": {
                      "type": "string"
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "authorization_url"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "return_to": {
                    "type": "string"
                  },
                  "reAuthenticate": {
                    "type": "boolean"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "return_to"
                ]
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/auth/callback": {
      "get": {
        "operationId": "completeConsumerLogin",
        "tags": [
          "Consumer auth"
        ],
        "summary": "Complete consumer OIDC login",
        "description": "Exactly one state and code query parameter; other query keys rejected. One-use browser-bound flow. Sets separate consumer session cookie, clears pre-auth cookie and redirects to approved return_to. Not an operator login.",
        "security": [
          {
            "ConsumerAuthCookie": []
          }
        ],
        "parameters": [
          {
            "name": "state",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "code",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "303": {
            "description": "Complete consumer OIDC login",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "Location": {
                "schema": {
                  "type": "string"
                }
              },
              "Set-Cookie": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      }
    },
    "/api/v1/consumer/me": {
      "get": {
        "operationId": "getConsumerMe",
        "tags": [
          "Consumer account"
        ],
        "summary": "Read own consumer account and current quota",
        "description": "Quota is empty without a current grant. All read keys share account-wide UTC-day requests/bytes; grants never reset existing daily usage. verified_contact appears only for a verified IdP email. csrf_token is for this session only.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Read own consumer account and current quota",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Me"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      }
    },
    "/api/v1/consumer/commands/{key}": {
      "get": {
        "operationId": "getConsumerCommand",
        "tags": [
          "Consumer account"
        ],
        "summary": "Read immutable command receipt",
        "description": "Read original accepted result or canceled fence. Never returns key plaintext or deletion receipt_token. 404 is unknown, not proof of cancellation.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Read immutable command receipt",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommandReceipt"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      }
    },
    "/api/v1/consumer/commands/{key}/cancellations": {
      "post": {
        "operationId": "cancelConsumerCommand",
        "tags": [
          "Consumer account"
        ],
        "summary": "Fence an unaccepted consumer command",
        "description": "Idempotency-Key must equal path key. An already committed operation remains accepted and is not undone. Cancel only uncertain commands using their original key. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "200": {
            "description": "Fence an unaccepted consumer command",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommandReceipt"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/quota-requests": {
      "get": {
        "operationId": "listQuotaRequests",
        "tags": [
          "Consumer account"
        ],
        "summary": "List own quota-requests",
        "description": "Own account scope only. No cursor or other query parameters are accepted; returns a bounded list, not a universal pagination API.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "List own quota-requests",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ConsumerQuotaRequest"
                      }
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      },
      "post": {
        "operationId": "requestConsumerQuota",
        "tags": [
          "Consumer account"
        ],
        "summary": "Submit own quota request",
        "description": "Account creation does not grant quota. Limits/expiry must fit host policy. Only one pending request is permitted; review is asynchronous and approval is not guaranteed. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "202": {
            "description": "Submit own quota request",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "command_key": {
                      "type": "string"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "request": {
                      "$ref": "#/components/schemas/ConsumerQuotaRequest"
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "command_key",
                    "request"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuotaInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/keys": {
      "get": {
        "operationId": "listConsumerKeys",
        "tags": [
          "Consumer account"
        ],
        "summary": "List own keys",
        "description": "Own account scope only. No cursor or other query parameters are accepted; returns a bounded list, not a universal pagination API.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "List own keys",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ConsumerKey"
                      }
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      },
      "post": {
        "operationId": "createConsumerKey",
        "tags": [
          "Consumer account"
        ],
        "summary": "Issue a public-read key once",
        "description": "Requires active account, current grant and fresh same-account OIDC reauthentication. Expiry cannot exceed grant or host policy. Rotation overlap is at most 86400 seconds. Plain token appears only on the first response; replay and command receipt omit it. Lost plaintext requires revoke and new issue. It grants public read only, never consumer management or control permissions. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "201": {
            "description": "Issue a public-read key once",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KeyResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KeyCreateInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/sessions": {
      "get": {
        "operationId": "listConsumerSessions",
        "tags": [
          "Consumer account"
        ],
        "summary": "List own sessions",
        "description": "Own account scope only. No cursor or other query parameters are accepted; returns a bounded list, not a universal pagination API.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "List own sessions",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Object"
                      }
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      }
    },
    "/api/v1/consumer/exports": {
      "get": {
        "operationId": "listConsumerExports",
        "tags": [
          "Consumer account"
        ],
        "summary": "List own exports",
        "description": "Own account scope only. No cursor or other query parameters are accepted; returns a bounded list, not a universal pagination API.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "List own exports",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PrivacyRequest"
                      }
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      },
      "post": {
        "operationId": "requestConsumerExport",
        "tags": [
          "Consumer account"
        ],
        "summary": "Request own private JSON export",
        "description": "202 commits queued export. Dedicated worker creates payload; no key plaintext or operator secrets. Host-configured expiry is at most one hour. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "202": {
            "description": "Request own private JSON export",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/deletion-requests": {
      "get": {
        "operationId": "listConsumerDeletions",
        "tags": [
          "Consumer account"
        ],
        "summary": "List own deletion-requests",
        "description": "Own account scope only. No cursor or other query parameters are accepted; returns a bounded list, not a universal pagination API.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "List own deletion-requests",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PrivacyRequest"
                      }
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      },
      "post": {
        "operationId": "requestConsumerDeletion",
        "tags": [
          "Consumer account"
        ],
        "summary": "Request central account deletion",
        "description": "Requires fresh same-account reauthentication and exact current preview digest. Pending suspends keys and deliveries; 202 means committed request, not completed deletion. One-time receipt_token allows minimal receipt access after session/account deletion. Grace and retention are host configured; local projects and third-party accounts are outside this deletion. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "202": {
            "description": "Request central account deletion",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "preview_digest": {
                    "type": "string"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "preview_digest"
                ]
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/keys/{id}/rotations": {
      "post": {
        "operationId": "rotateConsumerKey",
        "tags": [
          "Consumer account"
        ],
        "summary": "Issue a public-read key once",
        "description": "Requires active account, current grant and fresh same-account OIDC reauthentication. Expiry cannot exceed grant or host policy. Rotation overlap is at most 86400 seconds. Plain token appears only on the first response; replay and command receipt omit it. Lost plaintext requires revoke and new issue. It grants public read only, never consumer management or control permissions. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "201": {
            "description": "Issue a public-read key once",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KeyResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KeyInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/keys/{id}/revocations": {
      "post": {
        "operationId": "revokeConsumerKey",
        "tags": [
          "Consumer account"
        ],
        "summary": "Revoke own read key",
        "description": "Revocation is immediate and repeated revocation remains 204. Does not revoke browser sessions. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "204": {
            "description": "Revoke own read key",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "reason": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 500
                  }
                },
                "additionalProperties": false,
                "required": [
                  "reason"
                ]
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/sessions/{id}": {
      "delete": {
        "operationId": "revokeConsumerSession",
        "tags": [
          "Consumer account"
        ],
        "summary": "Revoke own browser session",
        "description": "JSON {} body is required even for DELETE. Current session revocation affects subsequent authentication; API keys are separate. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "200": {
            "description": "Revoke own browser session",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/data-inventory": {
      "get": {
        "operationId": "getConsumerDataInventory",
        "tags": [
          "Consumer account"
        ],
        "summary": "Read own central data inventory",
        "description": "Counts central consumer account categories; does not scan local projects.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Read own central data inventory",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Object"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      }
    },
    "/api/v1/consumer/deletion-preview": {
      "get": {
        "operationId": "previewConsumerDeletion",
        "tags": [
          "Consumer account"
        ],
        "summary": "Preview own central account deletion",
        "description": "Use the returned exact digest for deletion. Inventory or policy changes invalidate the digest.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "Preview own central account deletion",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "digest": {
                      "type": "string"
                    },
                    "scope": {
                      "type": "object",
                      "properties": {},
                      "additionalProperties": true
                    },
                    "grace_seconds": {
                      "type": "integer"
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "digest",
                    "scope",
                    "grace_seconds"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      }
    },
    "/api/v1/consumer/deletion-requests/{id}": {
      "get": {
        "operationId": "getConsumerDeletion",
        "tags": [
          "Consumer account"
        ],
        "summary": "Read own deletion progress",
        "description": "Track pending, processing, completed, partial or canceled. Unknown external delivery outcomes remain partial; receipt records bounded audit and backup expiry limits.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Read own deletion progress",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivacyRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      }
    },
    "/api/v1/consumer/deletion-requests/{id}/cancellations": {
      "post": {
        "operationId": "cancelConsumerDeletion",
        "tags": [
          "Consumer account"
        ],
        "summary": "Cancel pending deletion in its grace period",
        "description": "Only pending requests within execute_after may cancel; future events only resume. Completed or processing deletion cannot be rolled back. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "200": {
            "description": "Cancel pending deletion in its grace period",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/exports/{id}": {
      "get": {
        "operationId": "getConsumerExport",
        "tags": [
          "Consumer account"
        ],
        "summary": "Read own export state",
        "description": "Metadata only. Download is separate and authenticated; queued/expired work is not a ready export.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Read own export state",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivacyRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      }
    },
    "/api/v1/consumer/exports/{id}/download": {
      "get": {
        "operationId": "downloadConsumerExport",
        "tags": [
          "Consumer account"
        ],
        "summary": "Download own ready unexpired export",
        "description": "No anonymous or token-in-URL download. Requires current own session and completed, unexpired worker output. Not-ready or expired payload is refused. No provider/model call occurs.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Download own ready unexpired export",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              },
              "Content-Disposition": {
                "schema": {
                  "const": "attachment; filename=account-export.json"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExportPayload"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      }
    },
    "/api/v1/consumer/deletion-receipts/{id}": {
      "get": {
        "operationId": "getDeletionProofReceipt",
        "tags": [
          "Consumer privacy proof"
        ],
        "summary": "Read minimal deletion receipt with one-time issued proof",
        "description": "X-Deletion-Receipt is the proof from initial deletion acceptance. No session required. Exact request and expiry only; never grants login, keys or access to other data. Do not put proof in URL or browser storage.",
        "security": [
          {
            "DeletionReceiptProof": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Read minimal deletion receipt with one-time issued proof",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletionReceipt"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          }
        }
      }
    },
    "/api/v1/consumer/subscription-products": {
      "get": {
        "operationId": "listSubscriptionProducts",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "List approved public products for subscriptions",
        "description": "Own session required. Up to 100 current readable approved issue products, ordered by ID. Use next_cursor as after. Not a complete product catalog.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "after",
            "in": "query",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Last product ID from next_cursor; sole permitted query parameter."
          }
        ],
        "responses": {
          "200": {
            "description": "List approved public products for subscriptions",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsumerSubscriptionProductPage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        }
      }
    },
    "/api/v1/consumer/delivery-channels": {
      "get": {
        "operationId": "listConsumerChannels",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "List own delivery-channels",
        "description": "No cursor/query parameters accepted in this implementation. Bounded own-account list. Provider acceptance is not proof of delivery or reading.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "List own delivery-channels",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ConsumerChannel"
                      }
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        }
      },
      "post": {
        "operationId": "createInAppChannel",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "Create verified in-app delivery channel",
        "description": " Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "201": {
            "description": "Create verified in-app delivery channel",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "command_key": {
                      "type": "string"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "channel": {
                      "$ref": "#/components/schemas/ConsumerChannel"
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "command_key",
                    "channel"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "kind": {
                    "const": "in_app"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "kind"
                ]
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/subscriptions": {
      "get": {
        "operationId": "listConsumerSubscriptions",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "List own subscriptions",
        "description": "No cursor/query parameters accepted in this implementation. Bounded own-account list. Provider acceptance is not proof of delivery or reading.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "List own subscriptions",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ConsumerSubscription"
                      }
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        }
      },
      "post": {
        "operationId": "createConsumerSubscription",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "Save own product subscription",
        "description": "Requires verified own channel, readable products and configured P6 subscriptions. expected_revision is required for updates; stale is 409. Feed epoch transition pauses a bound subscription until explicit save. Excluding withdrawn changes is reported by withdrawal_excluded. Notification generation uses published approved revisions, not model calls. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "201": {
            "description": "Save own product subscription",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "command_key": {
                      "type": "string"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "subscription": {
                      "$ref": "#/components/schemas/ConsumerSubscription"
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "command_key",
                    "subscription"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscriptionInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/deliveries": {
      "get": {
        "operationId": "listConsumerDeliveries",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "List own deliveries",
        "description": "No cursor/query parameters accepted in this implementation. Bounded own-account list. Provider acceptance is not proof of delivery or reading.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "List own deliveries",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "items": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ConsumerDelivery"
                      }
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "items"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        }
      }
    },
    "/api/v1/consumer/delivery-channels/verification-requests": {
      "post": {
        "operationId": "requestChannelVerification",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "Queue email verification",
        "description": "Requires exact email address and host daily verification budget. Dedicated worker sends purpose-bound expiring proof; response contains request metadata, never proof. No arbitrary webhook channel. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "202": {
            "description": "Queue email verification",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "email": {
                    "type": "string",
                    "maxLength": 254
                  }
                },
                "additionalProperties": false,
                "required": [
                  "email"
                ]
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/delivery-channels/verifications": {
      "post": {
        "operationId": "verifyConsumerChannel",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "Consume purpose-bound email proof",
        "description": "Reject expired, already consumed, wrong-purpose or other-account proof. Own browser session is still required. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "200": {
            "description": "Consume purpose-bound email proof",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "command_key": {
                      "type": "string"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "channel": {
                      "$ref": "#/components/schemas/Object"
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "command_key",
                    "channel"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "proof": {
                    "$ref": "#/components/schemas/Opaque"
                  }
                },
                "additionalProperties": false,
                "required": [
                  "proof"
                ]
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/delivery-channels/{id}": {
      "delete": {
        "operationId": "revokeConsumerChannel",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "Revoke own delivery channel",
        "description": "Pauses linked subscriptions and cancels waiting deliveries; in-flight or unknown outcomes are reported separately. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "200": {
            "description": "Revoke own delivery channel",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/subscriptions/{id}": {
      "put": {
        "operationId": "updateConsumerSubscription",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "Save own product subscription",
        "description": "Requires verified own channel, readable products and configured P6 subscriptions. expected_revision is required for updates; stale is 409. Feed epoch transition pauses a bound subscription until explicit save. Excluding withdrawn changes is reported by withdrawal_excluded. Notification generation uses published approved revisions, not model calls. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "200": {
            "description": "Save own product subscription",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "command_key": {
                      "type": "string"
                    },
                    "replayed": {
                      "type": "boolean"
                    },
                    "subscription": {
                      "$ref": "#/components/schemas/ConsumerSubscription"
                    }
                  },
                  "additionalProperties": true,
                  "required": [
                    "command_key",
                    "subscription"
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscriptionUpdateInput"
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "cancelConsumerSubscription",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "Cancel own subscription",
        "description": "Stops future work and cancels waiting deliveries. Already sending/unknown outcomes cannot be claimed canceled. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "200": {
            "description": "Cancel own subscription",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "expected_revision": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "additionalProperties": false,
                "required": [
                  "expected_revision"
                ]
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/deliveries/{id}": {
      "get": {
        "operationId": "getConsumerDelivery",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "Read own delivery outcome",
        "description": "States include prepared, queued, sending, provider_accepted, failed, unknown and canceled. Use retryable/cancelable flags; provider acceptance does not establish user receipt.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Read own delivery outcome",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConsumerDelivery"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        }
      }
    },
    "/api/v1/consumer/deliveries/{id}/retries": {
      "post": {
        "operationId": "retryConsumerDelivery",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "Request own delivery retries",
        "description": "Only permitted states may transition. Retry only explicit retryable failures; unknown is never automatically resent. Cancellation does not undo provider acceptance. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "200": {
            "description": "Request own delivery retries",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/consumer/deliveries/{id}/cancellations": {
      "post": {
        "operationId": "cancelConsumerDelivery",
        "tags": [
          "Consumer subscriptions"
        ],
        "summary": "Request own delivery cancellations",
        "description": "Only permitted states may transition. Retry only explicit retryable failures; unknown is never automatically resent. Cancellation does not undo provider acceptance. Requires exact application/json without charset or Content-Encoding; strict object JSON, no unknown or duplicate fields, at most 16384 bytes. Query strings are rejected. Responses use no-store.",
        "security": [
          {
            "ConsumerSession": []
          }
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Exact configured public HTTPS origin."
          },
          {
            "name": "X-CSRF-Token",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Session CSRF token from GET /me."
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            },
            "description": "Bind one account-scoped command to one input. Different payload with same key conflicts; retain the key to resolve uncertain outcomes."
          }
        ],
        "responses": {
          "200": {
            "description": "Request own delivery cancellations",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MutationResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Consumer401"
          },
          "403": {
            "$ref": "#/components/responses/Consumer403"
          },
          "404": {
            "$ref": "#/components/responses/Consumer404"
          },
          "409": {
            "$ref": "#/components/responses/Consumer409"
          },
          "422": {
            "$ref": "#/components/responses/Consumer422"
          },
          "429": {
            "$ref": "#/components/responses/Consumer429"
          },
          "503": {
            "$ref": "#/components/responses/Consumer503"
          },
          "501": {
            "$ref": "#/components/responses/Consumer501"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/public/correction-requests": {
      "post": {
        "operationId": "submitCorrection",
        "tags": [
          "Corrections"
        ],
        "summary": "Submit a private public-information correction",
        "description": "Anonymous intake with exact publicly readable issue revision. contributions is an alias of the same intake. No Authorization header. Optional Origin must be the configured public origin. Strict application/json object, no Content-Encoding; maximum 40960 bytes. Evidence URL is recorded, not fetched; no model is run. Private payload expires after 30 days while command receipt/status persist. Submission does not publish or modify an issue.",
        "security": [],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "description": "UUID v4 or 43-character base64url random key."
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Submit a private public-information correction",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CorrectionReceipt"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CorrectionInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/public/contributions": {
      "post": {
        "operationId": "submitContributionAlias",
        "tags": [
          "Corrections"
        ],
        "summary": "Submit a private public-information correction",
        "description": "Anonymous intake with exact publicly readable issue revision. contributions is an alias of the same intake. No Authorization header. Optional Origin must be the configured public origin. Strict application/json object, no Content-Encoding; maximum 40960 bytes. Evidence URL is recorded, not fetched; no model is run. Private payload expires after 30 days while command receipt/status persist. Submission does not publish or modify an issue.",
        "security": [],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "description": "UUID v4 or 43-character base64url random key."
            }
          },
          {
            "name": "Origin",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Submit a private public-information correction",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CorrectionReceipt"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CorrectionInput"
              }
            }
          }
        }
      }
    },
    "/api/v1/public/correction-requests/commands": {
      "get": {
        "operationId": "getCorrectionCommand",
        "tags": [
          "Corrections"
        ],
        "summary": "Read immutable correction intake receipt",
        "description": "Original command result, not current processing state. No body/query/Authorization. Retain original intake key securely; 404 is unknown, not canceled.",
        "security": [],
        "parameters": [
          {
            "name": "X-Correction-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Original UUID v4 or 43-character base64url intake command key."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Read immutable correction intake receipt",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CorrectionReceipt"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/correction-requests/{id}": {
      "get": {
        "operationId": "getCorrectionStatus",
        "tags": [
          "Corrections"
        ],
        "summary": "Read current correction status",
        "description": "Exact ID plus original key returns current public-facing state and explicit public status message only; evidence, contact and private review reasons are not exposed.",
        "security": [],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/Identifier"
            }
          },
          {
            "name": "X-Correction-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Original UUID v4 or 43-character base64url intake command key."
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Read current correction status",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CorrectionReceipt"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        }
      }
    },
    "/api/v1/public/correction-requests/commands/cancellations": {
      "post": {
        "operationId": "cancelCorrectionIntake",
        "tags": [
          "Corrections"
        ],
        "summary": "Fence an unaccepted correction command",
        "description": "Body bytes must be exactly {} (no whitespace); application/json without Content-Encoding. Optional Origin must equal public origin. Cancellation serializes with intake; an already accepted correction remains accepted and is not withdrawn. No bearer token or session.",
        "security": [],
        "parameters": [
          {
            "name": "X-Correction-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string",
              "description": "Original UUID v4 or 43-character base64url intake command key."
            }
          },
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Must exactly equal X-Correction-Key."
          },
          {
            "name": "Origin",
            "in": "header",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Fence an unaccepted correction command",
            "headers": {
              "Cache-Control": {
                "description": "Responses are not stored by caches.",
                "schema": {
                  "const": "no-store"
                }
              },
              "X-Content-Type-Options": {
                "schema": {
                  "const": "nosniff"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CorrectionReceipt"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Public403"
          },
          "404": {
            "$ref": "#/components/responses/Public404"
          },
          "409": {
            "$ref": "#/components/responses/Public409"
          },
          "422": {
            "$ref": "#/components/responses/Public422"
          },
          "429": {
            "$ref": "#/components/responses/Public429"
          },
          "503": {
            "$ref": "#/components/responses/Public503"
          }
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyInput"
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "PublicReadKey": {
        "type": "http",
        "scheme": "bearer",
        "description": "Optional own consumer public-read key. Read-only /api/v1/public routes, excluding anonymous correction intake. Never operator/consumer session auth; never place in URL. No OAuth scope escalation."
      },
      "ConsumerSession": {
        "type": "apiKey",
        "in": "cookie",
        "name": "__Host-si_consumer",
        "description": "Opaque browser consumer session; own-account scope only. Secure, HttpOnly, SameSite=Lax. Mutations also need exact Origin, session CSRF and Idempotency-Key."
      },
      "ConsumerAuthCookie": {
        "type": "apiKey",
        "in": "cookie",
        "name": "__Host-si_consumer_auth",
        "description": "Pre-auth browser binding cookie set by auth/prepare; separate from consumer session."
      },
      "DeletionReceiptProof": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Deletion-Receipt",
        "description": "Purpose-limited, expiring proof issued once on deletion request acceptance; only minimal own deletion receipt."
      }
    },
    "schemas": {
      "Object": {
        "type": "object",
        "properties": {},
        "additionalProperties": true
      },
      "EmptyInput": {
        "type": "object",
        "properties": {},
        "additionalProperties": false
      },
      "Identifier": {
        "type": "string",
        "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
      },
      "Opaque": {
        "type": "string",
        "pattern": "^[A-Za-z0-9_-]{43}$"
      },
      "Digest": {
        "type": "string",
        "pattern": "^[0-9a-f]{64}$"
      },
      "ConsumerQuotaRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "account_id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "purpose": {
            "type": "string"
          },
          "requested_requests": {
            "type": "integer"
          },
          "requested_bytes": {
            "type": "integer"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "contact": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          },
          "reviewed_by": {
            "type": "string"
          },
          "grant_requests": {
            "type": "integer"
          },
          "grant_bytes": {
            "type": "integer"
          },
          "grant_until": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true,
        "required": [
          "id",
          "account_id",
          "revision",
          "purpose",
          "requested_requests",
          "requested_bytes",
          "expires_at",
          "status",
          "created_at"
        ]
      },
      "ConsumerKey": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "suffix": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_used_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "id",
          "label",
          "suffix",
          "status",
          "created_at",
          "expires_at"
        ]
      },
      "ConsumerSubscription": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "next_delivery_at": {
            "type": "string",
            "format": "date-time"
          },
          "products": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "changes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "frequency": {
            "type": "string"
          },
          "locale": {
            "type": "string"
          },
          "timezone": {
            "type": "string"
          },
          "channel_id": {
            "type": "string"
          },
          "expected_revision": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "id",
          "revision",
          "status",
          "next_delivery_at",
          "products",
          "changes",
          "frequency",
          "locale",
          "timezone",
          "channel_id"
        ]
      },
      "ConsumerChannel": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "last_failure": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true,
        "required": [
          "id",
          "kind",
          "status",
          "created_at"
        ]
      },
      "ConsumerDelivery": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "subscription_id": {
            "type": "string"
          },
          "subscription_revision": {
            "type": "integer"
          },
          "event_id": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "occurrence": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "scheduled_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_failure": {
            "type": "string"
          },
          "retryable": {
            "type": "boolean"
          },
          "cancelable": {
            "type": "boolean"
          },
          "issue_id": {
            "type": "string"
          },
          "issue_revision": {
            "type": "integer"
          },
          "change": {
            "type": "string"
          },
          "locale": {
            "type": "string"
          },
          "original_revision": {
            "type": "integer"
          },
          "translation_revision": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "id",
          "state",
          "kind",
          "created_at",
          "scheduled_at",
          "retryable",
          "cancelable"
        ]
      },
      "ConsumerSubscriptionProduct": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "issue_count": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "id",
          "label",
          "issue_count"
        ]
      },
      "ConsumerSubscriptionProductPage": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ConsumerSubscriptionProduct"
            }
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "coverage": {
            "type": "string"
          },
          "limit": {
            "type": "integer"
          }
        },
        "additionalProperties": true,
        "required": [
          "items",
          "next_cursor",
          "coverage",
          "limit"
        ]
      },
      "CorrectionInput": {
        "type": "object",
        "properties": {
          "kind": {
            "enum": [
              "correction",
              "source",
              "translation"
            ]
          },
          "issue_id": {
            "$ref": "#/components/schemas/Identifier"
          },
          "revision": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          },
          "evidence_url": {
            "type": "string",
            "format": "uri",
            "maxLength": 2048,
            "description": "HTTPS URL without userinfo, fragment or credential query fields. Recorded only; never fetched by intake."
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "maxLength": 8000
          },
          "contact": {
            "type": "string",
            "maxLength": 320
          },
          "retention_acknowledged": {
            "const": true
          }
        },
        "additionalProperties": false,
        "required": [
          "kind",
          "evidence_url",
          "description",
          "retention_acknowledged"
        ],
        "description": "issue_id and positive revision must be supplied together; required for correction and translation. Source suggestions may omit both. Description also has a 32000-byte ceiling; full JSON ceiling is 40960 bytes."
      },
      "CorrectionStatus": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "issue_id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "record_revision": {
            "type": "integer"
          },
          "submitted_at": {
            "type": "string",
            "format": "date-time"
          },
          "retention_until": {
            "type": "string",
            "format": "date-time"
          },
          "public_status_message": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "id",
          "kind",
          "status",
          "record_revision",
          "submitted_at",
          "retention_until"
        ]
      },
      "CorrectionReceipt": {
        "type": "object",
        "properties": {
          "correction": {
            "$ref": "#/components/schemas/CorrectionStatus"
          },
          "command_status": {
            "type": "string"
          },
          "command_key": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "command_status",
          "command_key"
        ]
      },
      "Tombstone": {
        "type": "object",
        "properties": {
          "reason": {
            "type": "string"
          },
          "replacement_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "effective_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true,
        "required": [
          "reason",
          "replacement_ids",
          "effective_at"
        ]
      },
      "Detail": {
        "type": "object",
        "properties": {
          "feed_evidence": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FeedEvidence"
              },
              {
                "type": "null"
              }
            ]
          },
          "issue_id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "identifiers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          },
          "confirmation": {
            "type": "string"
          },
          "source_state": {
            "type": "string"
          },
          "projection_state": {
            "type": "string"
          },
          "feed_state": {
            "type": "string"
          },
          "review_currentness": {
            "type": "string"
          },
          "modified_at": {
            "type": "string",
            "format": "date-time"
          },
          "latest_public_revision": {
            "type": "integer"
          },
          "source_references": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          },
          "affected": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "withheld_fields": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          },
          "feed_eligibility": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "available_translations": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "tombstone": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Tombstone"
              },
              {
                "type": "null"
              }
            ]
          },
          "advisory_type": {
            "enum": [
              "reviewed",
              "unreviewed",
              "malware",
              "canonical-id"
            ],
            "description": "Original source advisory classification; not a project safety or applicability verdict. Omitted for legacy projections without a recorded type."
          }
        },
        "additionalProperties": true,
        "required": [
          "issue_id",
          "revision",
          "title",
          "summary",
          "identifiers",
          "confirmation",
          "source_state",
          "projection_state",
          "feed_state",
          "review_currentness",
          "modified_at",
          "latest_public_revision",
          "source_references",
          "affected",
          "withheld_fields",
          "feed_eligibility",
          "available_translations",
          "tombstone"
        ]
      },
      "Page": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Summary"
            }
          },
          "page_cursor": {
            "type": "string"
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "watermark": {
            "type": "string"
          },
          "as_of": {
            "type": "string",
            "format": "date-time"
          },
          "coverage": {
            "const": "approved_public_projections_only"
          }
        },
        "additionalProperties": true,
        "required": [
          "items",
          "page_cursor",
          "next_cursor",
          "watermark",
          "as_of",
          "coverage"
        ]
      },
      "CommandReceipt": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string"
          },
          "target_id": {
            "type": "string"
          },
          "response": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "status": {
            "enum": [
              "accepted",
              "canceled"
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "kind",
          "target_id",
          "response",
          "status"
        ],
        "description": "Immutable command outcome. response excludes key token and deletion receipt_token even when the original acceptance included them."
      },
      "QuotaInput": {
        "type": "object",
        "required": [
          "purpose",
          "requested_requests",
          "requested_bytes",
          "expires_at"
        ],
        "additionalProperties": false,
        "properties": {
          "purpose": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000
          },
          "requested_requests": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000000000
          },
          "requested_bytes": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000000000000
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "contact": {
            "anyOf": [
              {
                "const": ""
              },
              {
                "type": "string",
                "pattern": "^contact_[A-Za-z0-9_-]{22}$"
              }
            ],
            "description": "Optional verified_contact.ref from /me; never submit a raw email or another account reference."
          }
        }
      },
      "KeyInput": {
        "type": "object",
        "required": [
          "expires_at"
        ],
        "additionalProperties": false,
        "properties": {
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "overlap_seconds": {
            "type": "integer",
            "minimum": 0,
            "maximum": 86400
          }
        }
      },
      "SubscriptionInput": {
        "type": "object",
        "required": [
          "products",
          "changes",
          "frequency",
          "locale",
          "timezone",
          "channel_id"
        ],
        "additionalProperties": false,
        "properties": {
          "products": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
            }
          },
          "changes": {
            "type": "array",
            "minItems": 1,
            "maxItems": 3,
            "uniqueItems": true,
            "items": {
              "enum": [
                "new",
                "corrected",
                "withdrawn"
              ]
            }
          },
          "frequency": {
            "enum": [
              "immediate",
              "daily",
              "weekly"
            ]
          },
          "locale": {
            "enum": [
              "en",
              "ko",
              "ja",
              "zh-Hans",
              "es",
              "fr",
              "ru",
              "pt-PT"
            ]
          },
          "timezone": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "IANA timezone accepted by the server; Local is rejected. Daily is 09:00 local time; weekly is Monday 09:00."
          },
          "channel_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
          },
          "expected_revision": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          }
        }
      },
      "PublicError": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message_key": {
                "type": "string"
              },
              "retryable": {
                "type": "boolean"
              },
              "request_id": {
                "type": "string"
              }
            },
            "additionalProperties": true,
            "required": [
              "code",
              "retryable"
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "error"
        ]
      },
      "ConsumerError": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "error"
        ]
      },
      "AnyError": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/PublicError"
          },
          {
            "$ref": "#/components/schemas/ConsumerError"
          }
        ]
      },
      "MutationResult": {
        "type": "object",
        "properties": {
          "command_key": {
            "type": "string"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "command_key"
        ]
      },
      "KeyResult": {
        "type": "object",
        "properties": {
          "key": {
            "$ref": "#/components/schemas/ConsumerKey"
          },
          "token": {
            "type": "string",
            "description": "Returned only on first committed response. Replays and command lookup never return it.",
            "readOnly": true,
            "x-sensitive": true
          },
          "command_key": {
            "type": "string"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "key",
          "command_key"
        ]
      },
      "DeletionResult": {
        "type": "object",
        "properties": {
          "deletion_request": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "status": {
                "const": "pending"
              },
              "execute_after": {
                "type": "string",
                "format": "date-time"
              },
              "scope": {
                "const": "central_consumer_account_only"
              }
            },
            "additionalProperties": true
          },
          "receipt_token": {
            "type": "string",
            "description": "One-time proof. Not returned by replay or command lookup; explicitly save securely if needed.",
            "readOnly": true,
            "x-sensitive": true
          },
          "receipt_expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "command_key": {
            "type": "string"
          },
          "replayed": {
            "type": "boolean"
          }
        },
        "additionalProperties": true,
        "required": [
          "deletion_request",
          "receipt_expires_at",
          "command_key"
        ]
      },
      "Me": {
        "type": "object",
        "properties": {
          "account_id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "session_id": {
            "type": "string"
          },
          "authenticated_at": {
            "type": "string",
            "format": "date-time"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "features": {
            "type": "object",
            "properties": {
              "accounts": {
                "type": "boolean"
              },
              "subscriptions": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          },
          "quota": {
            "type": "object",
            "properties": {
              "requests": {
                "type": "integer"
              },
              "bytes": {
                "type": "integer"
              },
              "expires_at": {
                "type": "string",
                "format": "date-time"
              },
              "used_requests": {
                "type": "integer"
              },
              "used_bytes": {
                "type": "integer"
              },
              "reset_at": {
                "type": "string",
                "format": "date-time"
              }
            },
            "additionalProperties": true
          },
          "recovery": {
            "const": "oidc_reauthentication"
          },
          "verified_contact": {
            "type": "object",
            "properties": {
              "ref": {
                "type": "string"
              },
              "address": {
                "type": "string"
              },
              "verified": {
                "const": true
              }
            },
            "additionalProperties": true
          },
          "csrf_token": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "account_id",
          "status",
          "session_id",
          "authenticated_at",
          "expires_at",
          "features",
          "quota",
          "recovery",
          "csrf_token"
        ]
      },
      "Capabilities": {
        "type": "object",
        "properties": {
          "service_id": {
            "type": "string"
          },
          "api_version": {
            "const": "1.0"
          },
          "features": {
            "type": "object",
            "properties": {
              "issues": {
                "type": "boolean"
              },
              "status": {
                "type": "boolean"
              },
              "historical_revisions": {
                "type": "boolean"
              },
              "signed_feed": {
                "type": "boolean"
              },
              "consumer_accounts": {
                "type": "boolean"
              },
              "subscriptions": {
                "type": "boolean"
              },
              "correction_requests": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          },
          "filters": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "max_limit": {
            "const": 50
          }
        },
        "additionalProperties": true,
        "required": [
          "service_id",
          "api_version",
          "features",
          "filters",
          "max_limit"
        ]
      },
      "AuthPrepare": {
        "type": "object",
        "properties": {
          "csrf_token": {
            "type": "string"
          },
          "issuer": {
            "type": "string"
          },
          "authorization_origin": {
            "type": "string"
          },
          "features": {
            "type": "object",
            "properties": {
              "accounts": {
                "type": "boolean"
              },
              "subscriptions": {
                "type": "boolean"
              }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": true,
        "required": [
          "csrf_token",
          "issuer",
          "authorization_origin",
          "features"
        ]
      },
      "PrivacyRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "execute_after": {
            "type": "string",
            "format": "date-time"
          },
          "preview_digest": {
            "type": "string"
          },
          "receipt": {
            "anyOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "id",
          "status"
        ]
      },
      "DeletionReceipt": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "execute_after": {
            "type": "string",
            "format": "date-time"
          },
          "receipt_expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "scope": {
            "const": "central_consumer_account_only"
          },
          "receipt": {
            "anyOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "id",
          "status",
          "execute_after",
          "receipt_expires_at",
          "scope",
          "receipt"
        ]
      },
      "ExportPayload": {
        "type": "object",
        "properties": {
          "account_id": {
            "type": "string"
          },
          "scope": {
            "const": "central_consumer_account_only"
          },
          "key_plaintext_stored": {
            "const": false
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true,
        "required": [
          "account_id",
          "scope",
          "key_plaintext_stored",
          "generated_at"
        ]
      },
      "FeedEvidence": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string"
          },
          "scope": {
            "type": "string"
          },
          "sequence": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "manifest_sha256": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "release_digest": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "state",
          "scope",
          "sequence",
          "manifest_sha256",
          "release_digest"
        ]
      },
      "Summary": {
        "type": "object",
        "properties": {
          "feed_evidence": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FeedEvidence"
              },
              {
                "type": "null"
              }
            ]
          },
          "issue_id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "title": {
            "type": "string"
          },
          "summary": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "identifiers": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {},
              "additionalProperties": true
            }
          },
          "confirmation": {
            "type": "string"
          },
          "source_state": {
            "type": "string"
          },
          "projection_state": {
            "type": "string"
          },
          "feed_state": {
            "type": "string"
          },
          "review_currentness": {
            "type": "string"
          },
          "modified_at": {
            "type": "string",
            "format": "date-time"
          },
          "advisory_type": {
            "enum": [
              "reviewed",
              "unreviewed",
              "malware",
              "canonical-id"
            ],
            "description": "Original source advisory classification; not a project safety or applicability verdict. Omitted for legacy projections without a recorded type."
          }
        },
        "additionalProperties": true,
        "required": [
          "issue_id",
          "revision",
          "title",
          "summary",
          "identifiers",
          "confirmation",
          "source_state",
          "projection_state",
          "feed_state",
          "review_currentness",
          "modified_at"
        ]
      },
      "FeedStatus": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string"
          },
          "scope": {
            "type": "string"
          },
          "namespace": {
            "anyOf": [
              {
                "type": "object",
                "properties": {},
                "additionalProperties": true
              },
              {
                "type": "null"
              }
            ]
          },
          "sequence": {
            "anyOf": [
              {
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "manifest_sha256": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "release_digest": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "published_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "expires_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "state",
          "scope",
          "namespace",
          "sequence",
          "manifest_sha256",
          "release_digest",
          "published_at",
          "expires_at"
        ]
      },
      "PublicApprovalRef": {
        "type": "object",
        "properties": {
          "issue_id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "approved_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true,
        "required": [
          "issue_id",
          "revision",
          "approved_at"
        ]
      },
      "CollectionAttempt": {
        "type": "object",
        "properties": {
          "configuration_currentness": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "scope": {
            "type": "string"
          },
          "created_at": {
            "type": "string",
            "format": "date-time"
          },
          "started_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "finished_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "window_start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "window_end": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "transport": {
            "type": "string"
          },
          "qualification": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "configuration_currentness",
          "state",
          "scope",
          "created_at",
          "started_at",
          "finished_at",
          "window_start",
          "window_end",
          "transport",
          "qualification"
        ]
      },
      "CollectionCompletion": {
        "type": "object",
        "properties": {
          "configuration_currentness": {
            "type": "string"
          },
          "scope": {
            "type": "string"
          },
          "finished_at": {
            "type": "string",
            "format": "date-time"
          },
          "window_start": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "window_end": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "transport": {
            "type": "string"
          },
          "qualification": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "configuration_currentness",
          "scope",
          "finished_at",
          "window_start",
          "window_end",
          "transport",
          "qualification"
        ]
      },
      "CollectionNormalization": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string"
          },
          "recorded_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "state",
          "recorded_at"
        ]
      },
      "CollectionWholeWatermark": {
        "type": "object",
        "properties": {
          "state": {
            "type": "string"
          },
          "as_of": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "state",
          "as_of"
        ]
      },
      "CollectionObservation": {
        "type": "object",
        "properties": {
          "issue_id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "source_state": {
            "type": "string"
          },
          "latest_attempt": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CollectionAttempt"
              },
              {
                "type": "null"
              }
            ]
          },
          "last_completion": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CollectionCompletion"
              },
              {
                "type": "null"
              }
            ]
          },
          "normalization": {
            "$ref": "#/components/schemas/CollectionNormalization"
          },
          "whole_source_watermark": {
            "$ref": "#/components/schemas/CollectionWholeWatermark"
          }
        },
        "additionalProperties": true,
        "required": [
          "issue_id",
          "revision",
          "source_state",
          "latest_attempt",
          "last_completion",
          "normalization",
          "whole_source_watermark"
        ]
      },
      "CollectionStatusPage": {
        "type": "object",
        "properties": {
          "scope": {
            "type": "string"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CollectionObservation"
            }
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "as_of": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true,
        "required": [
          "scope",
          "items",
          "next_cursor",
          "as_of"
        ]
      },
      "Status": {
        "type": "object",
        "properties": {
          "feed_status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FeedStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "latest_public_approval": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PublicApprovalRef"
              },
              {
                "type": "null"
              }
            ]
          },
          "collection_status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CollectionStatusPage"
              },
              {
                "type": "null"
              }
            ]
          },
          "public_notices": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/NoticePage"
              },
              {
                "type": "null"
              }
            ]
          },
          "service_id": {
            "type": "string"
          },
          "projection_state": {
            "type": "string"
          },
          "feed_state": {
            "type": "string"
          },
          "as_of": {
            "type": "string",
            "format": "date-time"
          },
          "coverage": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "service_id",
          "projection_state",
          "feed_state",
          "as_of",
          "coverage"
        ]
      },
      "PublicProduct": {
        "type": "object",
        "properties": {
          "product_id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "product_id",
          "revision",
          "name"
        ]
      },
      "PublicSummary": {
        "type": "object",
        "properties": {
          "news_id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "content_revision": {
            "type": "integer"
          },
          "vendor": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "deployment": {
            "type": "string"
          },
          "product": {
            "$ref": "#/components/schemas/PublicProduct"
          },
          "title": {
            "type": "string"
          },
          "origin_locale": {
            "type": "string"
          },
          "occurred_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "source_published_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "source_modified_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "provenance": {
            "type": "string"
          },
          "approved_at": {
            "type": "string",
            "format": "date-time"
          },
          "valid_until": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true,
        "required": [
          "news_id",
          "revision",
          "content_revision",
          "vendor",
          "kind",
          "deployment",
          "product",
          "title",
          "origin_locale",
          "occurred_at",
          "source_published_at",
          "source_modified_at",
          "provenance",
          "approved_at",
          "valid_until"
        ]
      },
      "PublicPage": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicSummary"
            }
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "as_of": {
            "type": "string",
            "format": "date-time"
          },
          "coverage": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "items",
          "next_cursor",
          "as_of",
          "coverage"
        ]
      },
      "PublicSource": {
        "type": "object",
        "properties": {
          "source_id": {
            "type": "string"
          },
          "revision": {
            "type": "string"
          },
          "sha256": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "attribution": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "source_id",
          "revision",
          "sha256",
          "url",
          "attribution"
        ]
      },
      "PublicDetail": {
        "type": "object",
        "properties": {
          "summary": {
            "$ref": "#/components/schemas/PublicSummary"
          },
          "body": {
            "type": "string"
          },
          "body_sha256": {
            "type": "string"
          },
          "bytes": {
            "type": "integer"
          },
          "conditions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "unverified": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicSource"
            }
          },
          "translation_state": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "summary",
          "body",
          "body_sha256",
          "bytes",
          "conditions",
          "unverified",
          "sources",
          "translation_state"
        ]
      },
      "NoticeSummary": {
        "type": "object",
        "properties": {
          "notice_id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "component": {
            "type": "string"
          },
          "origin_locale": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "occurred_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "discovered_at": {
            "type": "string",
            "format": "date-time"
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          },
          "recovered_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "notice_id",
          "revision",
          "component",
          "origin_locale",
          "title",
          "occurred_at",
          "discovered_at",
          "published_at",
          "recovered_at"
        ]
      },
      "NoticeDetail": {
        "type": "object",
        "properties": {
          "notice_id": {
            "type": "string"
          },
          "revision": {
            "type": "integer"
          },
          "component": {
            "type": "string"
          },
          "origin_locale": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "occurred_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "discovered_at": {
            "type": "string",
            "format": "date-time"
          },
          "published_at": {
            "type": "string",
            "format": "date-time"
          },
          "recovered_at": {
            "anyOf": [
              {
                "type": "string",
                "format": "date-time"
              },
              {
                "type": "null"
              }
            ]
          },
          "body": {
            "type": "string"
          },
          "body_sha256": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "notice_id",
          "revision",
          "component",
          "origin_locale",
          "title",
          "occurred_at",
          "discovered_at",
          "published_at",
          "recovered_at",
          "body",
          "body_sha256"
        ]
      },
      "PublicPromptSource": {
        "type": "object",
        "properties": {
          "source_id": {
            "type": "string"
          },
          "revision": {
            "type": "string"
          },
          "sha256": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "additionalProperties": true,
        "required": [
          "source_id",
          "revision",
          "sha256",
          "url"
        ]
      },
      "PublicInvestigationPrompt": {
        "type": "object",
        "properties": {
          "prompt_head_revision": {
            "type": "integer"
          },
          "artifact_id": {
            "type": "string"
          },
          "immutable_revision": {
            "type": "integer"
          },
          "artifact_digest": {
            "type": "string"
          },
          "issue_id": {
            "type": "string"
          },
          "issue_revision": {
            "type": "integer"
          },
          "language": {
            "type": "string"
          },
          "purpose": {
            "type": "string"
          },
          "template_revision": {
            "type": "string"
          },
          "text_sha256": {
            "type": "string"
          },
          "bytes": {
            "type": "integer"
          },
          "approved_at": {
            "type": "string",
            "format": "date-time"
          },
          "valid_until": {
            "type": "string",
            "format": "date-time"
          },
          "source_references": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicPromptSource"
            }
          }
        },
        "additionalProperties": true,
        "required": [
          "prompt_head_revision",
          "artifact_id",
          "immutable_revision",
          "artifact_digest",
          "issue_id",
          "issue_revision",
          "language",
          "purpose",
          "template_revision",
          "text_sha256",
          "bytes",
          "approved_at",
          "valid_until",
          "source_references"
        ]
      },
      "RecoveryCatalogItem": {
        "type": "object",
        "properties": {
          "authorization_id": {
            "type": "string"
          },
          "authorization_digest": {
            "type": "string"
          },
          "retired_namespace": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "new_namespace": {
            "type": "object",
            "properties": {},
            "additionalProperties": true
          },
          "committed_at": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true,
        "required": [
          "authorization_id",
          "authorization_digest",
          "retired_namespace",
          "new_namespace",
          "committed_at"
        ]
      },
      "RecoveryCatalogPage": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RecoveryCatalogItem"
            }
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "additionalProperties": true,
        "required": [
          "items",
          "next_cursor"
        ]
      },
      "NoticePage": {
        "type": "object",
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NoticeSummary"
            }
          },
          "next_cursor": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "as_of": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": true,
        "required": [
          "items",
          "next_cursor",
          "as_of"
        ]
      },
      "KeyCreateInput": {
        "type": "object",
        "required": [
          "label",
          "expires_at"
        ],
        "additionalProperties": false,
        "properties": {
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "expires_at": {
            "type": "string",
            "format": "date-time"
          },
          "overlap_seconds": {
            "const": 0
          }
        }
      },
      "SubscriptionUpdateInput": {
        "type": "object",
        "required": [
          "products",
          "changes",
          "frequency",
          "locale",
          "timezone",
          "channel_id",
          "expected_revision"
        ],
        "additionalProperties": false,
        "properties": {
          "products": {
            "type": "array",
            "minItems": 1,
            "maxItems": 100,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
            }
          },
          "changes": {
            "type": "array",
            "minItems": 1,
            "maxItems": 3,
            "uniqueItems": true,
            "items": {
              "enum": [
                "new",
                "corrected",
                "withdrawn"
              ]
            }
          },
          "frequency": {
            "enum": [
              "immediate",
              "daily",
              "weekly"
            ]
          },
          "locale": {
            "enum": [
              "en",
              "ko",
              "ja",
              "zh-Hans",
              "es",
              "fr",
              "ru",
              "pt-PT"
            ]
          },
          "timezone": {
            "type": "string",
            "minLength": 1,
            "maxLength": 128,
            "description": "IANA timezone accepted by the server; Local is rejected. Daily is 09:00 local time; weekly is Monday 09:00."
          },
          "channel_id": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
          },
          "expected_revision": {
            "type": "integer",
            "minimum": 1,
            "maximum": 9007199254740991
          }
        }
      }
    },
    "responses": {
      "Public401": {
        "description": "Authentication or OIDC flow invalid.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PublicError"
            }
          }
        }
      },
      "Public403": {
        "description": "Forbidden, missing current grant, required reauthentication, origin or CSRF validation failed.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PublicError"
            }
          }
        }
      },
      "Public404": {
        "description": "Resource not found or not publicly readable; private existence is not disclosed.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PublicError"
            }
          }
        }
      },
      "Public409": {
        "description": "Input/revision/idempotency conflict; public cursor filter or epoch scope mismatch.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PublicError"
            }
          }
        }
      },
      "Public410": {
        "description": "Public cursor expired; restart pagination.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PublicError"
            }
          }
        }
      },
      "Public422": {
        "description": "Invalid input, query, field, policy or unsupported query parameter.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PublicError"
            }
          }
        }
      },
      "Public429": {
        "description": "Quota or rate limit reached; honor Retry-After.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          },
          "Retry-After": {
            "description": "Delay in seconds: 1 for process admission saturation, 2 for OIDC discovery unavailability, 60 for consumer/correction quota; public reader rate limiting uses 1.",
            "schema": {
              "type": "string"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PublicError"
            }
          }
        }
      },
      "Public503": {
        "description": "Service unavailable or shared public response admission saturated.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          },
          "Retry-After": {
            "description": "Delay in seconds: 1 for process admission saturation, 2 for OIDC discovery unavailability, 60 for consumer/correction quota; public reader rate limiting uses 1.",
            "schema": {
              "type": "string"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PublicError"
            }
          }
        }
      },
      "Consumer401": {
        "description": "Authentication or OIDC flow invalid.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnyError"
            }
          }
        }
      },
      "Consumer403": {
        "description": "Forbidden, missing current grant, required reauthentication, origin or CSRF validation failed.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnyError"
            }
          }
        }
      },
      "Consumer404": {
        "description": "Resource not found or not publicly readable; private existence is not disclosed.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnyError"
            }
          }
        }
      },
      "Consumer409": {
        "description": "Input/revision/idempotency conflict; public cursor filter or epoch scope mismatch.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnyError"
            }
          }
        }
      },
      "Consumer422": {
        "description": "Invalid input, query, field, policy or unsupported query parameter.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnyError"
            }
          }
        }
      },
      "Consumer429": {
        "description": "Quota or rate limit reached; honor Retry-After.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          },
          "Retry-After": {
            "description": "Delay in seconds: 1 for process admission saturation, 2 for OIDC discovery unavailability, 60 for consumer/correction quota; public reader rate limiting uses 1.",
            "schema": {
              "type": "string"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnyError"
            }
          }
        }
      },
      "Consumer503": {
        "description": "Service unavailable or shared public response admission saturated.",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          },
          "Retry-After": {
            "description": "Delay in seconds: 1 for process admission saturation, 2 for OIDC discovery unavailability, 60 for consumer/correction quota; public reader rate limiting uses 1.",
            "schema": {
              "type": "string"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnyError"
            }
          }
        }
      },
      "Consumer501": {
        "description": "Subscriptions are not enabled (NOT_ENABLED).",
        "headers": {
          "Cache-Control": {
            "description": "Responses are not stored by caches.",
            "schema": {
              "const": "no-store"
            }
          },
          "X-Content-Type-Options": {
            "schema": {
              "const": "nosniff"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AnyError"
            }
          }
        }
      }
    }
  },
  "x-availability": {
    "consumer_accounts": "Discover capabilities.features.consumer_accounts; requires configured separate consumer IdP and account owner. An absent owner is not advertised as functional.",
    "subscriptions": "Discover capabilities.features.subscriptions; requires accounts and configured dedicated provider/worker. Mounted disabled subscription routes return 501 NOT_ENABLED. Only in_app and verified email; arbitrary webhooks are unsupported.",
    "correction_requests": "Discover capabilities.features.correction_requests; anonymous private intake requires configured owner.",
    "feed": "Only public-all. Signed artifact availability is rights/currentness-gated; absent ArtifactRoot or unreadable/unpublished/expired latest artifact returns 404. No unsupported major negotiation, narrow channel, snapshot query or delta query endpoint is claimed.",
    "not_in_scope": [
      "operator control and review",
      "provider callback identities",
      "local private project or CLI RPC",
      "server model execution",
      "account recovery by email alone",
      "guaranteed external delivery or deletion from provider systems"
    ]
  }
}
