{
  "openapi": "3.1.0",
  "info": {
    "title": "Haneoka Public API",
    "version": "2026-09-30",
    "description": "Public HTTP contracts served by haneoka.org. Manifest-driven catalog DTOs and provider projections retain their published fields; stable envelopes and transport behavior are described explicitly."
  },
  "servers": [
    {
      "url": "https://haneoka.org",
      "description": "Production"
    }
  ],
  "tags": [
    {
      "name": "Resource servers",
      "description": "Release discovery, immutable release selection, catalog documents, and release-backed files."
    },
    {
      "name": "Sonolus",
      "description": "Public Sonolus server documents, levels, playlists, and data."
    },
    {
      "name": "Community",
      "description": "Public community reads and authenticated account interactions."
    },
    {
      "name": "Authentication",
      "description": "Account availability, registration, and Better Auth sessions."
    },
    {
      "name": "Provider APIs",
      "description": "Garupa and Bestdori provider projections."
    }
  ],
  "security": [],
  "paths": {
    "/api/v1/releases": {
      "get": {
        "summary": "List active resource servers",
        "operationId": "listReleases",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReleaseRegistry"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "List active resource servers",
        "operationId": "listReleasesHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReleaseRegistry"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/account/config": {
      "get": {
        "summary": "Read authentication availability",
        "operationId": "getAccountConfig",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthConfig"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read authentication availability",
        "operationId": "getAccountConfigHead",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthConfig"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/account/register": {
      "post": {
        "summary": "Request email registration",
        "operationId": "registerByEmail",
        "tags": [
          "Authentication"
        ],
        "parameters": [
          {
            "name": "X-Captcha-Response",
            "in": "header",
            "required": false,
            "description": "Turnstile token when enabled by account config.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegistrationRequest"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted without revealing account existence.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "accepted": {
                      "type": "boolean",
                      "const": true
                    }
                  },
                  "required": [
                    "accepted"
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/me/preferences": {
      "get": {
        "summary": "Read signed-in preferences",
        "operationId": "getPreferences",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreferencesResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "put": {
        "summary": "Write signed-in preferences",
        "operationId": "putPreferences",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PreferencesPatch"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreferencesResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read signed-in preferences",
        "operationId": "getPreferencesHead",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreferencesResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/account/profile": {
      "get": {
        "summary": "Read the signed-in profile",
        "operationId": "getProfile",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProfileResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Update profile fields",
        "operationId": "patchProfile",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProfilePatch"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProfileResponse"
                }
              }
            }
          },
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProfileResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete the signed-in account",
        "operationId": "deleteProfile",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteProfileRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "204": {
            "description": "No content"
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read the signed-in profile",
        "operationId": "getProfileHead",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProfileResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/account/avatar": {
      "put": {
        "summary": "Set a moderated avatar",
        "operationId": "putAvatar",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "image/jpeg": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            },
            "image/png": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            },
            "image/webp": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PendingAvatarResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete the signed-in avatar",
        "operationId": "deleteAvatar",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "204": {
            "description": "No content"
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/account/avatar/{userId}": {
      "parameters": [
        {
          "name": "userId",
          "in": "path",
          "required": true,
          "description": "Opaque account identifier from an avatar URL.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read a ready avatar",
        "operationId": "getAvatar",
        "tags": [
          "Community"
        ],
        "responses": {
          "200": {
            "description": "Avatar bytes.",
            "headers": {
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "304": {
            "description": "Avatar has not changed.",
            "headers": {
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a ready avatar",
        "operationId": "getAvatarHead",
        "tags": [
          "Community"
        ],
        "responses": {
          "200": {
            "description": "Avatar bytes.",
            "headers": {
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "304": {
            "description": "Avatar has not changed.",
            "headers": {
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/servers/{server}/release": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "release",
          "in": "query",
          "required": false,
          "description": "Immutable release ID from a prior response.",
          "schema": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "style": "form",
          "explode": true
        },
        {
          "name": "projection",
          "in": "query",
          "required": false,
          "description": "Use identity for the compact release descriptor.",
          "schema": {
            "type": "string",
            "enum": [
              "identity"
            ]
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read the current or pinned release manifest",
        "operationId": "getRelease",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReleaseResponse"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read the current or pinned release manifest",
        "operationId": "getReleaseHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReleaseResponse"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/servers/{server}/ui-marks": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "release",
          "in": "query",
          "required": false,
          "description": "Immutable release ID from a prior response.",
          "schema": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read the release UI mark mapping",
        "operationId": "getUiMarks",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "UI mark name to release asset path.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read the release UI mark mapping",
        "operationId": "getUiMarksHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "UI mark name to release asset path.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/servers/{server}/sources/tree": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "release",
          "in": "query",
          "required": false,
          "description": "Immutable release ID from a prior response.",
          "schema": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read the release source tree",
        "operationId": "getSourceTree",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SourceTreeDocument"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read the release source tree",
        "operationId": "getSourceTreeHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SourceTreeDocument"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/servers/{server}/sources/{sourcePath}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "sourcePath",
          "in": "path",
          "required": true,
          "description": "Encoded path beginning with Assets/ or Packages/; preserve path separators.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "release",
          "in": "query",
          "required": false,
          "description": "Immutable release ID from a prior response.",
          "schema": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read one published source DTO",
        "operationId": "getsource-record",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SourceRecord"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one published source DTO",
        "operationId": "getsource-recordHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SourceRecord"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/servers/{server}/catalog": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "release",
          "in": "query",
          "required": false,
          "description": "Immutable release ID from a prior response.",
          "schema": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read the catalog storage manifest",
        "operationId": "getCatalogManifest",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogManifest"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read the catalog storage manifest",
        "operationId": "getCatalogManifestHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogManifest"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/servers/{server}/catalog/summary": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "release",
          "in": "query",
          "required": false,
          "description": "Immutable release ID from a prior response.",
          "schema": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read the catalog summary",
        "operationId": "getCatalogSummary",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogSummary"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read the catalog summary",
        "operationId": "getCatalogSummaryHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogSummary"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/servers/{server}/{resource}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "resource",
          "in": "path",
          "required": true,
          "description": "Resource name declared in the catalog manifest.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "release",
          "in": "query",
          "required": false,
          "description": "Immutable release ID from a prior response.",
          "schema": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "style": "form",
          "explode": true
        },
        {
          "name": "id",
          "in": "query",
          "required": false,
          "description": "Repeat for an entity batch.",
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~-]{0,255}$"
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read a resource index or batch",
        "operationId": "getcatalog-resource",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogResourceIndexOrBatch"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a resource index or batch",
        "operationId": "getcatalog-resourceHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogResourceIndexOrBatch"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/servers/{server}/{resource}/{id}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "resource",
          "in": "path",
          "required": true,
          "description": "Resource name declared in the catalog manifest.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "description": "Entity key returned by the resource index.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "release",
          "in": "query",
          "required": false,
          "description": "Immutable release ID from a prior response.",
          "schema": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read one catalog entity",
        "operationId": "getcatalog-entity",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogEntity"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one catalog entity",
        "operationId": "getcatalog-entityHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogEntity"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/servers/{server}/{resource}/views/{view}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "resource",
          "in": "path",
          "required": true,
          "description": "Resource name declared in the catalog manifest.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "view",
          "in": "path",
          "required": true,
          "description": "View name declared in the resource manifest.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "release",
          "in": "query",
          "required": false,
          "description": "Immutable release ID from a prior response.",
          "schema": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "style": "form",
          "explode": true
        },
        {
          "name": "id",
          "in": "query",
          "required": false,
          "description": "Repeat for a view entity batch.",
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9][A-Za-z0-9._:~-]{0,255}$"
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read a view index or batch",
        "operationId": "getcatalog-view",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogViewDocumentOrBatch"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a view index or batch",
        "operationId": "getcatalog-viewHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogViewDocumentOrBatch"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/servers/{server}/{resource}/views/{view}/{id}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "resource",
          "in": "path",
          "required": true,
          "description": "Resource name declared in the catalog manifest.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "view",
          "in": "path",
          "required": true,
          "description": "View name declared in the resource manifest.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "id",
          "in": "path",
          "required": true,
          "description": "View entity key returned by the view index.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "release",
          "in": "query",
          "required": false,
          "description": "Immutable release ID from a prior response.",
          "schema": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read one view entity",
        "operationId": "getcatalog-view-entity",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogEntity"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one view entity",
        "operationId": "getcatalog-view-entityHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogEntity"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/servers/{server}/{resource}/relations/{relation}/{key}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "resource",
          "in": "path",
          "required": true,
          "description": "Resource name declared in the resource manifest.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "relation",
          "in": "path",
          "required": true,
          "description": "Relation name declared in the resource manifest.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "key",
          "in": "path",
          "required": true,
          "description": "Relation key returned by the relation index.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "release",
          "in": "query",
          "required": false,
          "description": "Immutable release ID from a prior response.",
          "schema": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read one catalog relation",
        "operationId": "getcatalog-relation",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogRelationResponse"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one catalog relation",
        "operationId": "getcatalog-relationHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CatalogRelationResponse"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/assets/{server}/{path}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "in": "path",
          "required": true,
          "description": "Encoded release path from the release index.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read a release assets object",
        "operationId": "getassets-media",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Release object bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Object not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a release assets object",
        "operationId": "getassets-mediaHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Release object bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Object not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/runtime/{server}/{path}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "in": "path",
          "required": true,
          "description": "Encoded release path from the release index.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read a release runtime object",
        "operationId": "getruntime-media",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Release object bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Object not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a release runtime object",
        "operationId": "getruntime-mediaHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Release object bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Object not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/objects/{server}/{path}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "path",
          "in": "path",
          "required": true,
          "description": "Encoded release path from the release index.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read a release objects object",
        "operationId": "getobjects-media",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Release object bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Object not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a release objects object",
        "operationId": "getobjects-mediaHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Release object bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Object not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/artifacts/{server}/{sourceId}/android/bundles/{filename}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "sourceId",
          "in": "path",
          "required": true,
          "description": "Source ID from release metadata.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "filename",
          "in": "path",
          "required": true,
          "description": "Unity bundle original filename from the source descriptor.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read a content-addressed Android bundle",
        "operationId": "getAndroidBundle",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Unity bundle bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Bundle not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a content-addressed Android bundle",
        "operationId": "getAndroidBundleHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Unity bundle bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Bundle not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/game-client/{server}/manifest.json": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read the current game-client manifest",
        "operationId": "getGameClientManifest",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GameClientManifest"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range of the manifest representation.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Manifest not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Release unavailable.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read the current game-client manifest",
        "operationId": "getGameClientManifestHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GameClientManifest"
                }
              }
            },
            "headers": {
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range of the manifest representation.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Manifest not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "503": {
            "description": "Release unavailable.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/game-client/{server}/master/{filename}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "filename",
          "in": "path",
          "required": true,
          "description": "MasterDataSystemVersion.txt or a manifest-listed Master*.bin filename.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read a published Master file",
        "operationId": "getgame-client-master",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Published Master file bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Object not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a published Master file",
        "operationId": "getgame-client-masterHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Published Master file bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Object not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/game-client/{server}/asset/{platform}/{filename}": {
      "parameters": [
        {
          "name": "server",
          "in": "path",
          "required": true,
          "description": "Active resource-server slug from GET /api/v1/releases.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "platform",
          "in": "path",
          "required": true,
          "description": "Must equal the manifest platform.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "filename",
          "in": "path",
          "required": true,
          "description": "Manifest- or index-listed filename.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read one Addressables object",
        "operationId": "getgame-client-addressable",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Addressables object bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Object not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one Addressables object",
        "operationId": "getgame-client-addressableHead",
        "tags": [
          "Resource servers"
        ],
        "responses": {
          "200": {
            "description": "Addressables object bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial byte range.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              },
              "X-Haneoka-Release-Id": {
                "description": "Immutable release selected for this server-scoped response.",
                "schema": {
                  "type": "string",
                  "pattern": "^r-[a-f0-9]{20}$"
                }
              },
              "X-Haneoka-Source-Id": {
                "description": "Source snapshot associated with the selected release.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Object not found.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/playlists": {
      "get": {
        "summary": "Read the current Garupa playlist projection",
        "operationId": "getGarupaPlaylists",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GarupaPlaylistProjection"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read the current Garupa playlist projection",
        "operationId": "getGarupaPlaylistsHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GarupaPlaylistProjection"
                }
              }
            }
          }
        }
      }
    },
    "/sonolus/info": {
      "parameters": [
        {
          "name": "type",
          "in": "query",
          "required": false,
          "description": "Random projection.",
          "schema": {
            "type": "string",
            "enum": [
              "random"
            ]
          },
          "style": "form",
          "explode": true
        },
        {
          "name": "source",
          "in": "query",
          "required": false,
          "description": "Use the Bestdori chart source.",
          "schema": {
            "type": "string",
            "enum": [
              "bestdori"
            ]
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read Sonolus server info",
        "operationId": "-sonolus-info",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Sonolus server info",
        "operationId": "-sonolus-infoHead",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      }
    },
    "/sonolus/levels/info": {
      "parameters": [
        {
          "name": "type",
          "in": "query",
          "required": false,
          "description": "Random projection.",
          "schema": {
            "type": "string",
            "enum": [
              "random"
            ]
          },
          "style": "form",
          "explode": true
        },
        {
          "name": "source",
          "in": "query",
          "required": false,
          "description": "Use the Bestdori chart source.",
          "schema": {
            "type": "string",
            "enum": [
              "bestdori"
            ]
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read Sonolus level info",
        "operationId": "-sonolus-levels-info",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Sonolus level info",
        "operationId": "-sonolus-levels-infoHead",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      }
    },
    "/sonolus/levels/list": {
      "parameters": [
        {
          "name": "page",
          "in": "query",
          "required": false,
          "description": "Zero-based page number.",
          "schema": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          },
          "style": "form",
          "explode": true
        },
        {
          "name": "type",
          "in": "query",
          "required": false,
          "description": "Random projection.",
          "schema": {
            "type": "string",
            "enum": [
              "random"
            ]
          },
          "style": "form",
          "explode": true
        },
        {
          "name": "source",
          "in": "query",
          "required": false,
          "description": "Use the Bestdori chart source.",
          "schema": {
            "type": "string",
            "enum": [
              "bestdori"
            ]
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "List Sonolus levels",
        "operationId": "-sonolus-levels-list",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "List Sonolus levels",
        "operationId": "-sonolus-levels-listHead",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      }
    },
    "/sonolus/levels/{levelName}": {
      "parameters": [
        {
          "name": "levelName",
          "in": "path",
          "required": true,
          "description": "Exact name returned by a Sonolus level document.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read one Sonolus level",
        "operationId": "-sonolus-levels-levelName-",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one Sonolus level",
        "operationId": "-sonolus-levels-levelName-Head",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      }
    },
    "/sonolus/levels/{levelName}/data/{sha1}": {
      "parameters": [
        {
          "name": "levelName",
          "in": "path",
          "required": true,
          "description": "Exact name returned by a Sonolus level document.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "sha1",
          "in": "path",
          "required": true,
          "description": "40-character lowercase SHA-1 from the level data descriptor.",
          "schema": {
            "type": "string",
            "pattern": "^[a-f0-9]{40}$"
          }
        }
      ],
      "get": {
        "summary": "Read one Sonolus level data object",
        "operationId": "-sonolus-levels-levelName-data-sha1-",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "Sonolus level data bytes.",
            "headers": {
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one Sonolus level data object",
        "operationId": "-sonolus-levels-levelName-data-sha1-Head",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "Sonolus level data bytes.",
            "headers": {
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      }
    },
    "/sonolus/playlists/info": {
      "parameters": [
        {
          "name": "type",
          "in": "query",
          "required": false,
          "description": "Random projection.",
          "schema": {
            "type": "string",
            "enum": [
              "random"
            ]
          },
          "style": "form",
          "explode": true
        },
        {
          "name": "source",
          "in": "query",
          "required": false,
          "description": "Use the Bestdori chart source.",
          "schema": {
            "type": "string",
            "enum": [
              "bestdori"
            ]
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read Sonolus playlist info",
        "operationId": "-sonolus-playlists-info",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Sonolus playlist info",
        "operationId": "-sonolus-playlists-infoHead",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      }
    },
    "/sonolus/playlists/list": {
      "parameters": [
        {
          "name": "page",
          "in": "query",
          "required": false,
          "description": "Zero-based page number.",
          "schema": {
            "type": "integer",
            "minimum": 0,
            "default": 0
          },
          "style": "form",
          "explode": true
        },
        {
          "name": "type",
          "in": "query",
          "required": false,
          "description": "Random projection.",
          "schema": {
            "type": "string",
            "enum": [
              "random"
            ]
          },
          "style": "form",
          "explode": true
        },
        {
          "name": "source",
          "in": "query",
          "required": false,
          "description": "Use the Bestdori chart source.",
          "schema": {
            "type": "string",
            "enum": [
              "bestdori"
            ]
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "List Sonolus playlists",
        "operationId": "-sonolus-playlists-list",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "List Sonolus playlists",
        "operationId": "-sonolus-playlists-listHead",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      }
    },
    "/sonolus/playlists/{playlistName}": {
      "parameters": [
        {
          "name": "playlistName",
          "in": "path",
          "required": true,
          "description": "Exact name returned by a Sonolus playlist document.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read one Sonolus playlist",
        "operationId": "-sonolus-playlists-playlistName-",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one Sonolus playlist",
        "operationId": "-sonolus-playlists-playlistName-Head",
        "tags": [
          "Sonolus"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusDocument"
                }
              }
            }
          },
          "404": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          },
          "503": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SonolusError"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/bands": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region: jp, en, tw, cn, or kr.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read Bestdori bands",
        "operationId": "getBestdoriBands",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriBandMap"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Bestdori bands",
        "operationId": "getBestdoriBandsHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriBandMap"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/songs": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region: jp, en, tw, cn, or kr.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read Bestdori songs",
        "operationId": "getBestdoriSongs",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriSongMap"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Bestdori songs",
        "operationId": "getBestdoriSongsHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriSongMap"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/song-meta": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region: jp, en, tw, cn, or kr.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read Bestdori song-meta",
        "operationId": "getBestdoriSongMeta",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriSongMetaMap"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Bestdori song-meta",
        "operationId": "getBestdoriSongMetaHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriSongMetaMap"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/characters": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region: jp, en, tw, cn, or kr.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read Bestdori characters",
        "operationId": "getBestdoriCharacters",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriCharacterMap"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Bestdori characters",
        "operationId": "getBestdoriCharactersHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriCharacterMap"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/cards": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region: jp, en, tw, cn, or kr.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read Bestdori cards",
        "operationId": "getBestdoriCards",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriCardMap"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Bestdori cards",
        "operationId": "getBestdoriCardsHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriCardMap"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/editor-assets": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read Bestdori editor asset tree",
        "operationId": "getBestdoriEditorAssets",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriEditorAssetResponse"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Bestdori editor asset tree",
        "operationId": "getBestdoriEditorAssetsHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriEditorAssetResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/editor-assets/{bundlePath}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "bundlePath",
          "in": "path",
          "required": true,
          "description": "Safe provider editor asset path.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read a Bestdori editor asset file list",
        "operationId": "getBestdoriEditorAssetBundle",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriEditorAssetResponse"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a Bestdori editor asset file list",
        "operationId": "getBestdoriEditorAssetBundleHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriEditorAssetResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/live2d": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "id",
          "in": "query",
          "required": false,
          "description": "Repeat for an ID; capped at 64 unique IDs.",
          "schema": {
            "type": "string",
            "pattern": "^[A-Za-z0-9_-]+$"
          },
          "style": "form",
          "explode": true
        },
        {
          "name": "server",
          "in": "query",
          "required": false,
          "description": "Optional source region.",
          "schema": {
            "type": "string",
            "enum": [
              "jp",
              "en",
              "tw",
              "cn",
              "kr"
            ]
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Resolve Bestdori Live2D entries",
        "operationId": "getBestdoriLive2d",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriLive2dResponse"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Resolve Bestdori Live2D entries",
        "operationId": "getBestdoriLive2dHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriLive2dResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/stories/{storyId}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "storyId",
          "in": "path",
          "required": true,
          "description": "Collection selector or canonical story ID/filename.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read a Bestdori story collection or story",
        "operationId": "getBestdoriStory",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriStoryDocument"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a Bestdori story collection or story",
        "operationId": "getBestdoriStoryHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriStoryDocument"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/songs/{musicId}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "musicId",
          "in": "path",
          "required": true,
          "description": "Decimal provider song ID.",
          "schema": {
            "type": "string",
            "pattern": "^[0-9]+$"
          }
        }
      ],
      "get": {
        "summary": "Read one Bestdori song",
        "operationId": "getBestdoriSong",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriSong"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one Bestdori song",
        "operationId": "getBestdoriSongHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriSong"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/song-meta/{musicId}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "musicId",
          "in": "path",
          "required": true,
          "description": "Decimal provider song ID.",
          "schema": {
            "type": "string",
            "pattern": "^[0-9]+$"
          }
        }
      ],
      "get": {
        "summary": "Read one Bestdori song metadata record",
        "operationId": "getBestdoriSongMetaRecord",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriSongMeta"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one Bestdori song metadata record",
        "operationId": "getBestdoriSongMetaRecordHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriSongMeta"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/cards/{cardId}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "cardId",
          "in": "path",
          "required": true,
          "description": "Decimal provider card ID.",
          "schema": {
            "type": "string",
            "pattern": "^[0-9]+$"
          }
        }
      ],
      "get": {
        "summary": "Read one Bestdori card",
        "operationId": "getBestdoriCard",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriCard"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one Bestdori card",
        "operationId": "getBestdoriCardHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BestdoriCard"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/charts/{musicId}/{difficulty}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "musicId",
          "in": "path",
          "required": true,
          "description": "Decimal provider song ID.",
          "schema": {
            "type": "string",
            "pattern": "^[0-9]+$"
          }
        },
        {
          "name": "difficulty",
          "in": "path",
          "required": true,
          "description": "Chart difficulty.",
          "schema": {
            "type": "string",
            "enum": [
              "easy",
              "normal",
              "hard",
              "expert",
              "special"
            ]
          }
        }
      ],
      "get": {
        "summary": "Read one Bestdori chart in SS format",
        "operationId": "getBestdoriChart",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "SS chart text.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one Bestdori chart in SS format",
        "operationId": "getBestdoriChartHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "SS chart text.",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/media/jacket/{package}/{image}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "package",
          "in": "path",
          "required": true,
          "description": "Provider media path segment.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "image",
          "in": "path",
          "required": true,
          "description": "Provider media path segment.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read Bestdori jacket media",
        "operationId": "getBestdoriJacket",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Bestdori jacket media",
        "operationId": "getBestdoriJacketHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/media/jacket-thumb/{package}/{image}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "package",
          "in": "path",
          "required": true,
          "description": "Provider media path segment.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "image",
          "in": "path",
          "required": true,
          "description": "Provider media path segment.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read Bestdori jacketThumb media",
        "operationId": "getBestdoriJacketThumb",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Bestdori jacketThumb media",
        "operationId": "getBestdoriJacketThumbHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/media/sound/{soundId}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "soundId",
          "in": "path",
          "required": true,
          "description": "Provider media path segment.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read Bestdori sound media",
        "operationId": "getBestdoriSound",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Media bytes (audio/mpeg).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial media bytes (audio/mpeg).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Bestdori sound media",
        "operationId": "getBestdoriSoundHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Media bytes (audio/mpeg).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial media bytes (audio/mpeg).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/media/mv/{filename}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "filename",
          "in": "path",
          "required": true,
          "description": "Provider media path segment.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read Bestdori musicVideo media",
        "operationId": "getBestdoriMusicVideo",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Media bytes (video/mp4).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial media bytes (video/mp4).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Bestdori musicVideo media",
        "operationId": "getBestdoriMusicVideoHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Media bytes (video/mp4).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial media bytes (video/mp4).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/media/stage-challenge/{assetId}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "assetId",
          "in": "path",
          "required": true,
          "description": "Provider media path segment.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read Bestdori stageChallenge media",
        "operationId": "getBestdoriStageChallenge",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read Bestdori stageChallenge media",
        "operationId": "getBestdoriStageChallengeHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial media bytes (image/png).",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/garupa/bestdori/{region}/raw/{providerPath}": {
      "parameters": [
        {
          "name": "region",
          "in": "path",
          "required": true,
          "description": "Bestdori provider region.",
          "schema": {
            "type": "string"
          }
        },
        {
          "name": "providerPath",
          "in": "path",
          "required": true,
          "description": "Safe provider path; traversal and encoded NULs are rejected.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Read a raw Bestdori provider asset",
        "operationId": "getBestdoriRawAsset",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Provider asset bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial provider asset bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a raw Bestdori provider asset",
        "operationId": "getBestdoriRawAssetHead",
        "tags": [
          "Provider APIs"
        ],
        "responses": {
          "200": {
            "description": "Provider asset bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial provider asset bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "502": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/posts": {
      "get": {
        "summary": "List community posts",
        "operationId": "listCommunityPosts",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "scope",
            "in": "query",
            "required": false,
            "description": "Feed scope.",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "latest",
                "recommended",
                "following",
                "mine",
                "bookmarked"
              ],
              "default": "all"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Post state.",
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "archived",
                "all"
              ],
              "default": "active"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Title/body search.",
            "schema": {
              "type": "string",
              "maxLength": 100
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "description": "Normalized tag.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "seed",
            "in": "query",
            "required": false,
            "description": "Recommendation seed.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 2147483647
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "refresh",
            "in": "query",
            "required": false,
            "description": "Start a fresh recommendation feed.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Create a community post",
        "operationId": "createCommunityPost",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostCreateRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "201": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "List community posts",
        "operationId": "listCommunityPostsHead",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "scope",
            "in": "query",
            "required": false,
            "description": "Feed scope.",
            "schema": {
              "type": "string",
              "enum": [
                "all",
                "latest",
                "recommended",
                "following",
                "mine",
                "bookmarked"
              ],
              "default": "all"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "description": "Post state.",
            "schema": {
              "type": "string",
              "enum": [
                "active",
                "archived",
                "all"
              ],
              "default": "active"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Title/body search.",
            "schema": {
              "type": "string",
              "maxLength": 100
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "description": "Normalized tag.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "seed",
            "in": "query",
            "required": false,
            "description": "Recommendation seed.",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 2147483647
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "refresh",
            "in": "query",
            "required": false,
            "description": "Start a fresh recommendation feed.",
            "schema": {
              "type": "string",
              "enum": [
                "1"
              ]
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostListResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/posts/{postId}": {
      "parameters": [
        {
          "name": "postId",
          "in": "path",
          "required": true,
          "description": "Post UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Read one community post",
        "operationId": "getCommunityPost",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "includeComments",
            "in": "query",
            "required": false,
            "description": "Exclude comments.",
            "schema": {
              "type": "string",
              "enum": [
                "false"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "commentsOnly",
            "in": "query",
            "required": false,
            "description": "Return only comments.",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "commentsCursor",
            "in": "query",
            "required": false,
            "description": "Opaque comment cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "commentsSort",
            "in": "query",
            "required": false,
            "description": "Comment order.",
            "schema": {
              "type": "string",
              "enum": [
                "hot",
                "latest"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "commentId",
            "in": "query",
            "required": false,
            "description": "Focus a visible comment.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/PostResponse"
                    },
                    {
                      "$ref": "#/components/schemas/PostCommentsResponse"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "patch": {
        "summary": "Edit a community post",
        "operationId": "patchCommunityPost",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostPatchRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a community post",
        "operationId": "deleteCommunityPost",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VersionRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "204": {
            "description": "No content"
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read one community post",
        "operationId": "getCommunityPostHead",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "includeComments",
            "in": "query",
            "required": false,
            "description": "Exclude comments.",
            "schema": {
              "type": "string",
              "enum": [
                "false"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "commentsOnly",
            "in": "query",
            "required": false,
            "description": "Return only comments.",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "commentsCursor",
            "in": "query",
            "required": false,
            "description": "Opaque comment cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "commentsSort",
            "in": "query",
            "required": false,
            "description": "Comment order.",
            "schema": {
              "type": "string",
              "enum": [
                "hot",
                "latest"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "commentId",
            "in": "query",
            "required": false,
            "description": "Focus a visible comment.",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/PostResponse"
                    },
                    {
                      "$ref": "#/components/schemas/PostCommentsResponse"
                    }
                  ]
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/posts/{postId}/comments": {
      "parameters": [
        {
          "name": "postId",
          "in": "path",
          "required": true,
          "description": "Post UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Create a comment",
        "operationId": "postCommentsCommunityPost",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentCreateRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentMutationResponse"
                }
              }
            }
          },
          "201": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentMutationResponse"
                }
              }
            }
          },
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/posts/{postId}/reaction": {
      "parameters": [
        {
          "name": "postId",
          "in": "path",
          "required": true,
          "description": "Post UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "put": {
        "summary": "Toggle a post reaction",
        "operationId": "putReactionCommunityPost",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActiveRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReactionResponse"
                }
              }
            }
          },
          "201": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReactionResponse"
                }
              }
            }
          },
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReactionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/posts/{postId}/bookmark": {
      "parameters": [
        {
          "name": "postId",
          "in": "path",
          "required": true,
          "description": "Post UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "put": {
        "summary": "Toggle a post bookmark",
        "operationId": "putBookmarkCommunityPost",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActiveRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActiveResponse"
                }
              }
            }
          },
          "201": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActiveResponse"
                }
              }
            }
          },
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ActiveResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/posts/{postId}/pin": {
      "parameters": [
        {
          "name": "postId",
          "in": "path",
          "required": true,
          "description": "Post UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "put": {
        "summary": "Pin or unpin a post",
        "operationId": "putPinCommunityPost",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PinRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "201": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/posts/{postId}/archive": {
      "parameters": [
        {
          "name": "postId",
          "in": "path",
          "required": true,
          "description": "Post UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Archive a post",
        "operationId": "postArchiveCommunityPost",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VersionRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "201": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/posts/{postId}/restore": {
      "parameters": [
        {
          "name": "postId",
          "in": "path",
          "required": true,
          "description": "Post UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Restore a post",
        "operationId": "postRestoreCommunityPost",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VersionRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "201": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/notifications": {
      "get": {
        "summary": "List notifications",
        "operationId": "listNotifications",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "unread",
            "in": "query",
            "required": false,
            "description": "Filter read state.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "countOnly",
            "in": "query",
            "required": false,
            "description": "Return only unreadCount.",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ]
            },
            "style": "form",
            "explode": true
          }
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationsResponse"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "List notifications",
        "operationId": "listNotificationsHead",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "unread",
            "in": "query",
            "required": false,
            "description": "Filter read state.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "countOnly",
            "in": "query",
            "required": false,
            "description": "Return only unreadCount.",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ]
            },
            "style": "form",
            "explode": true
          }
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationsResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/notifications/read-all": {
      "put": {
        "summary": "Mark all notifications read",
        "operationId": "markAllNotificationsRead",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarkAllReadResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/notifications/{notificationId}/read": {
      "parameters": [
        {
          "name": "notificationId",
          "in": "path",
          "required": true,
          "description": "Notification UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "put": {
        "summary": "Mark one notification read",
        "operationId": "markNotificationRead",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarkReadResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/tags": {
      "get": {
        "summary": "List visible tags",
        "operationId": "listTags",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 30
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Tag search.",
            "schema": {
              "type": "string",
              "maxLength": 64
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagListResponse"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "List visible tags",
        "operationId": "listTagsHead",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 30
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Tag search.",
            "schema": {
              "type": "string",
              "maxLength": 64
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagListResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/tags/preferences": {
      "get": {
        "summary": "List signed-in tag preferences",
        "operationId": "listTagPreferences",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 30
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          }
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagPreferencesResponse"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "List signed-in tag preferences",
        "operationId": "listTagPreferencesHead",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 30
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          }
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagPreferencesResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/tags/{tag}/preference": {
      "parameters": [
        {
          "name": "tag",
          "in": "path",
          "required": true,
          "description": "Normalized tag name or alias.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "put": {
        "summary": "Set a tag preference",
        "operationId": "putTagPreference",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagPreferenceRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagPreferenceMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/users/{uid}/follow": {
      "parameters": [
        {
          "name": "uid",
          "in": "path",
          "required": true,
          "description": "Public numeric UID returned by a profile.",
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        }
      ],
      "put": {
        "summary": "Set a user follow relationship",
        "operationId": "putUserFollow",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActiveRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRelationshipResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/users/{uid}/block": {
      "parameters": [
        {
          "name": "uid",
          "in": "path",
          "required": true,
          "description": "Public numeric UID returned by a profile.",
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        }
      ],
      "put": {
        "summary": "Set a user block relationship",
        "operationId": "putUserBlock",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActiveRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRelationshipResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/users/{uid}/mute": {
      "parameters": [
        {
          "name": "uid",
          "in": "path",
          "required": true,
          "description": "Public numeric UID returned by a profile.",
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        }
      ],
      "put": {
        "summary": "Set a user mute relationship",
        "operationId": "putUserMute",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActiveRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserRelationshipResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/posts/{postId}/feedback": {
      "parameters": [
        {
          "name": "postId",
          "in": "path",
          "required": true,
          "description": "Post UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "put": {
        "summary": "Set feed feedback",
        "operationId": "putPostFeedback",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FeedbackRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedbackResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/me/post-feedback": {
      "delete": {
        "summary": "Clear feed feedback",
        "operationId": "clearPostFeedback",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClearedFeedbackResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/reports": {
      "post": {
        "summary": "Report community content",
        "operationId": "createReport",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReportRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportResponse"
                }
              }
            }
          },
          "201": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/comments/{commentId}": {
      "parameters": [
        {
          "name": "commentId",
          "in": "path",
          "required": true,
          "description": "Comment UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "patch": {
        "summary": "Edit a comment",
        "operationId": "patchComment",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CommentPatchRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentMutationResponse"
                }
              }
            }
          },
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentMutationResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete a comment",
        "operationId": "deleteComment",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VersionRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletedCommentResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/comments/{commentId}/reaction": {
      "parameters": [
        {
          "name": "commentId",
          "in": "path",
          "required": true,
          "description": "Comment UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "put": {
        "summary": "Toggle a comment reaction",
        "operationId": "putCommentReaction",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ActiveRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReactionResponse"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/me/comments": {
      "get": {
        "summary": "List the signed-in user's comments",
        "operationId": "listOwnComments",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          }
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentActivityResponse"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "List the signed-in user's comments",
        "operationId": "listOwnCommentsHead",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          }
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CommentActivityResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/users/{uid}": {
      "parameters": [
        {
          "name": "uid",
          "in": "path",
          "required": true,
          "description": "Public numeric UID returned by a profile.",
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        }
      ],
      "get": {
        "summary": "Read a public community profile",
        "operationId": "getPublicProfile",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Post page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 24
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque post cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicProfileResponse"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read a public community profile",
        "operationId": "getPublicProfileHead",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Post page size.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 24
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Opaque post cursor.",
            "schema": {
              "type": "string"
            },
            "style": "form",
            "explode": true
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicProfileResponse"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/uploads/policy": {
      "get": {
        "summary": "Read upload limits",
        "operationId": "getUploadPolicy",
        "tags": [
          "Community"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadPolicyResponse"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read upload limits",
        "operationId": "getUploadPolicyHead",
        "tags": [
          "Community"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadPolicyResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/uploads/intents": {
      "post": {
        "summary": "Create an upload intent",
        "operationId": "createUploadIntent",
        "tags": [
          "Community"
        ],
        "parameters": [
          {
            "name": "Idempotency-Key",
            "in": "header",
            "required": true,
            "description": "Stable key for retrying the same upload intent.",
            "schema": {
              "type": "string",
              "minLength": 16,
              "maxLength": 128
            }
          }
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UploadIntentRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "201": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentResponse"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/uploads/{attachmentId}/content": {
      "parameters": [
        {
          "name": "attachmentId",
          "in": "path",
          "required": true,
          "description": "Attachment UUID returned by an upload intent.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "put": {
        "summary": "Upload one direct object",
        "operationId": "putUploadContent",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentResponse"
                }
              }
            }
          },
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "413": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/uploads/{attachmentId}/parts/{partNumber}": {
      "parameters": [
        {
          "name": "attachmentId",
          "in": "path",
          "required": true,
          "description": "Attachment UUID returned by an upload intent.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "name": "partNumber",
          "in": "path",
          "required": true,
          "description": "1-based multipart part number.",
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        }
      ],
      "put": {
        "summary": "Upload one multipart part",
        "operationId": "putUploadPart",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/octet-stream": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadPartResponse"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/uploads/{attachmentId}/complete": {
      "parameters": [
        {
          "name": "attachmentId",
          "in": "path",
          "required": true,
          "description": "Attachment UUID returned by an upload intent.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Complete a multipart upload",
        "operationId": "completeUpload",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MultipartCompleteRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "202": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadCompletionResponse"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/uploads/{attachmentId}/multipart": {
      "parameters": [
        {
          "name": "attachmentId",
          "in": "path",
          "required": true,
          "description": "Attachment UUID returned by an upload intent.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "delete": {
        "summary": "Cancel a multipart upload",
        "operationId": "cancelUpload",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentNullableResponse"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/attachments/{attachmentId}": {
      "parameters": [
        {
          "name": "attachmentId",
          "in": "path",
          "required": true,
          "description": "Attachment UUID returned by an upload intent.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "get": {
        "summary": "Read attachment metadata",
        "operationId": "getAttachment",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentMetadataResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "summary": "Delete an attachment",
        "operationId": "deleteAttachment",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentNullableResponse"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read attachment metadata",
        "operationId": "getAttachmentHead",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AttachmentMetadataResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/attachments/{attachmentId}/content": {
      "parameters": [
        {
          "name": "attachmentId",
          "in": "path",
          "required": true,
          "description": "Attachment UUID returned by an upload intent.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "name": "variant",
          "in": "query",
          "required": false,
          "description": "Processed media variant.",
          "schema": {
            "type": "string",
            "enum": [
              "media",
              "poster",
              "thumb"
            ]
          },
          "style": "form",
          "explode": true
        }
      ],
      "get": {
        "summary": "Read attachment content",
        "operationId": "getAttachmentContent",
        "tags": [
          "Community"
        ],
        "responses": {
          "200": {
            "description": "Attachment bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial attachment bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Read attachment content",
        "operationId": "getAttachmentContentHead",
        "tags": [
          "Community"
        ],
        "responses": {
          "200": {
            "description": "Attachment bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "206": {
            "description": "Partial attachment bytes.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "*/*": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "416": {
            "description": "The requested byte range is not satisfiable.",
            "headers": {
              "Accept-Ranges": {
                "description": "The endpoint accepts single byte ranges.",
                "schema": {
                  "type": "string",
                  "const": "bytes"
                }
              },
              "Content-Length": {
                "description": "Length of the returned representation or range.",
                "schema": {
                  "type": "integer",
                  "format": "int64",
                  "minimum": 0
                }
              },
              "Content-Range": {
                "description": "Returned range, or `bytes */size` on 416.",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Representation validator.",
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/posts/{postId}/attachments": {
      "parameters": [
        {
          "name": "postId",
          "in": "path",
          "required": true,
          "description": "Post UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "post": {
        "summary": "Attach ready media to a post",
        "operationId": "linkPostAttachments",
        "tags": [
          "Community"
        ],
        "requestBody": {
          "required": true,
          "description": "JSON request body",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostAttachmentsRequest"
              }
            }
          }
        },
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostAttachmentsResponse"
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/community/posts/{postId}/attachments/{attachmentId}": {
      "parameters": [
        {
          "name": "postId",
          "in": "path",
          "required": true,
          "description": "Post UUID returned by the service.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        },
        {
          "name": "attachmentId",
          "in": "path",
          "required": true,
          "description": "Attachment UUID returned by an upload intent.",
          "schema": {
            "type": "string",
            "format": "uuid"
          }
        }
      ],
      "delete": {
        "summary": "Detach media from a post",
        "operationId": "unlinkPostAttachment",
        "tags": [
          "Community"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DetachedAttachmentResponse"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/get-session": {
      "get": {
        "summary": "Better Auth GET get-session",
        "operationId": "-api-auth-get-session",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "head": {
        "summary": "Better Auth GET get-session",
        "operationId": "api-auth-get-session-head",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/sign-in/email": {
      "post": {
        "summary": "Better Auth POST sign-in/email",
        "operationId": "-api-auth-sign-in-email",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/sign-in/social": {
      "post": {
        "summary": "Better Auth POST sign-in/social",
        "operationId": "-api-auth-sign-in-social",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/sign-out": {
      "post": {
        "summary": "Better Auth POST sign-out",
        "operationId": "-api-auth-sign-out",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/send-verification-email": {
      "post": {
        "summary": "Better Auth POST send-verification-email",
        "operationId": "-api-auth-send-verification-email",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/verify-email": {
      "get": {
        "summary": "Better Auth GET verify-email",
        "operationId": "-api-auth-verify-email",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/request-password-reset": {
      "post": {
        "summary": "Better Auth POST request-password-reset",
        "operationId": "-api-auth-request-password-reset",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/reset-password": {
      "post": {
        "summary": "Better Auth POST reset-password",
        "operationId": "-api-auth-reset-password",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/change-email": {
      "post": {
        "summary": "Better Auth POST change-email",
        "operationId": "-api-auth-change-email",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/change-password": {
      "post": {
        "summary": "Better Auth POST change-password",
        "operationId": "-api-auth-change-password",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/list-accounts": {
      "get": {
        "summary": "Better Auth GET list-accounts",
        "operationId": "-api-auth-list-accounts",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/link-social": {
      "post": {
        "summary": "Better Auth POST link-social",
        "operationId": "-api-auth-link-social",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/unlink-account": {
      "post": {
        "summary": "Better Auth POST unlink-account",
        "operationId": "-api-auth-unlink-account",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/list-sessions": {
      "get": {
        "summary": "Better Auth GET list-sessions",
        "operationId": "-api-auth-list-sessions",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/revoke-session": {
      "post": {
        "summary": "Better Auth POST revoke-session",
        "operationId": "-api-auth-revoke-session",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/revoke-sessions": {
      "post": {
        "summary": "Better Auth POST revoke-sessions",
        "operationId": "-api-auth-revoke-sessions",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/revoke-other-sessions": {
      "post": {
        "summary": "Better Auth POST revoke-other-sessions",
        "operationId": "-api-auth-revoke-other-sessions",
        "tags": [
          "Authentication"
        ],
        "security": [
          {
            "cookieSession": []
          }
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/error": {
      "get": {
        "summary": "Better Auth GET error",
        "operationId": "-api-auth-error",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/ok": {
      "get": {
        "summary": "Better Auth GET ok",
        "operationId": "-api-auth-ok",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/reset-password/{token}": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "required": true,
          "description": "Opaque reset token from an email link.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "summary": "Open a password reset link",
        "operationId": "getAuthResetPasswordToken",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "JSON response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BetterAuthResponse"
                }
              }
            }
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/callback/{provider}": {
      "parameters": [
        {
          "name": "provider",
          "in": "path",
          "required": true,
          "description": "Configured social provider.",
          "schema": {
            "type": "string",
            "enum": [
              "discord",
              "github",
              "google",
              "twitter"
            ]
          }
        }
      ],
      "get": {
        "summary": "Complete a social callback",
        "operationId": "authCallbackGet",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "302": {
            "description": "Redirect to the configured callback URL."
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "post": {
        "summary": "Complete a social callback",
        "operationId": "authCallbackPost",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "302": {
            "description": "Redirect to the configured callback URL."
          },
          "400": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Structured API error",
            "headers": {
              "X-Request-Id": {
                "description": "Request correlation identifier.",
                "schema": {
                  "$ref": "#/components/schemas/RequestIdHeader"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "cookieSession": {
        "type": "apiKey",
        "in": "cookie",
        "name": "__Secure-haneoka.session_token",
        "description": "HTTP-only Better Auth session cookie. Let the browser set it; do not copy a real value into code or logs."
      }
    },
    "schemas": {
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string"
              },
              "message": {
                "type": "string"
              },
              "requestId": {
                "type": "string"
              }
            },
            "required": [
              "code",
              "message"
            ],
            "additionalProperties": true
          }
        },
        "required": [
          "error"
        ],
        "additionalProperties": false
      },
      "RequestIdHeader": {
        "type": "string"
      },
      "ReleaseRegistry": {
        "type": "object",
        "properties": {
          "releases": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "displayName": {
                  "type": "string"
                },
                "region": {
                  "type": "string",
                  "enum": [
                    "global",
                    "jp",
                    "kr",
                    "tw",
                    "cn",
                    "en"
                  ]
                }
              },
              "required": [
                "id",
                "displayName",
                "region"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "releases"
        ],
        "additionalProperties": false
      },
      "ReleaseManifest": {
        "type": "object",
        "additionalProperties": true,
        "description": "Release-specific manifest. Follow returned paths and identifiers."
      },
      "ReleaseIdentity": {
        "type": "object",
        "properties": {
          "schema": {
            "const": "haneoka-resource-release-identity-v1"
          },
          "server": {
            "type": "string"
          },
          "releaseId": {
            "type": "string",
            "pattern": "^r-[a-f0-9]{20}$"
          },
          "sourceId": {
            "type": "string"
          }
        },
        "required": [
          "schema",
          "server",
          "releaseId",
          "sourceId"
        ],
        "additionalProperties": false
      },
      "ReleaseResponse": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/ReleaseManifest"
          },
          {
            "$ref": "#/components/schemas/ReleaseIdentity"
          }
        ],
        "description": "The default release manifest or the compact identity projection selected by projection=identity."
      },
      "AuthConfig": {
        "type": "object",
        "properties": {
          "available": {
            "type": "boolean"
          },
          "emailDeliveryEnabled": {
            "type": "boolean"
          },
          "emailSignUpEnabled": {
            "type": "boolean"
          },
          "providers": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "discord",
                "github",
                "google",
                "twitter"
              ]
            }
          },
          "turnstileSiteKey": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "available",
          "emailDeliveryEnabled",
          "emailSignUpEnabled",
          "providers",
          "turnstileSiteKey"
        ],
        "additionalProperties": false
      },
      "RegistrationRequest": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          }
        },
        "required": [
          "email"
        ],
        "additionalProperties": false
      },
      "CatalogShardStorage": {
        "type": "object",
        "properties": {
          "algorithm": {
            "const": "fnv1a32-mod-256"
          },
          "count": {
            "type": "integer",
            "minimum": 0
          },
          "prefix": {
            "type": "string"
          },
          "shards": {
            "type": "array",
            "uniqueItems": true,
            "items": {
              "type": "string",
              "pattern": "^[a-f0-9]{2}$"
            }
          }
        },
        "required": [
          "algorithm",
          "count",
          "prefix",
          "shards"
        ],
        "additionalProperties": false
      },
      "CatalogRelationStorage": {
        "type": "object",
        "properties": {
          "algorithm": {
            "const": "fnv1a32-mod-256"
          },
          "count": {
            "type": "integer",
            "minimum": 0
          },
          "entityCount": {
            "type": "integer",
            "minimum": 0
          },
          "prefix": {
            "type": "string"
          },
          "shards": {
            "type": "array",
            "uniqueItems": true,
            "items": {
              "type": "string",
              "pattern": "^[a-f0-9]{2}$"
            }
          },
          "valueMode": {
            "type": "string",
            "enum": [
              "ids",
              "records"
            ]
          }
        },
        "required": [
          "algorithm",
          "count",
          "entityCount",
          "prefix",
          "shards",
          "valueMode"
        ],
        "additionalProperties": false
      },
      "CatalogViewStorage": {
        "type": "object",
        "properties": {
          "count": {
            "type": "integer",
            "minimum": 0
          },
          "entities": {
            "$ref": "#/components/schemas/CatalogShardStorage"
          },
          "index": {
            "type": "string"
          },
          "path": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "string"
            }
          },
          "shape": {
            "type": "string",
            "enum": [
              "array",
              "object"
            ]
          }
        },
        "required": [
          "count",
          "entities",
          "index",
          "path",
          "shape"
        ],
        "additionalProperties": false
      },
      "CatalogResource": {
        "type": "object",
        "properties": {
          "count": {
            "type": "integer",
            "minimum": 0
          },
          "dependencies": {
            "type": "array",
            "uniqueItems": true,
            "items": {
              "type": "string"
            }
          },
          "entities": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/CatalogShardStorage"
              },
              {
                "type": "null"
              }
            ]
          },
          "index": {
            "type": "string"
          },
          "kind": {
            "type": "string"
          },
          "relations": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CatalogRelationStorage"
            }
          },
          "views": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CatalogViewStorage"
            }
          }
        },
        "required": [
          "count",
          "dependencies",
          "index",
          "kind"
        ],
        "additionalProperties": false
      },
      "CatalogManifest": {
        "type": "object",
        "properties": {
          "schema": {
            "const": "haneoka-catalog-storage-v2"
          },
          "server": {
            "type": "string"
          },
          "sourceId": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "partition": {
            "type": "object",
            "properties": {
              "algorithm": {
                "const": "fnv1a32-mod-256"
              },
              "shards": {
                "const": 256
              }
            },
            "required": [
              "algorithm",
              "shards"
            ],
            "additionalProperties": false
          },
          "resources": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CatalogResource"
            }
          }
        },
        "required": [
          "schema",
          "server",
          "sourceId",
          "summary",
          "partition",
          "resources"
        ],
        "additionalProperties": false
      },
      "CatalogEntity": {
        "type": "object",
        "additionalProperties": true,
        "description": "Resource-defined catalog entity; do not assume a universal id/title shape."
      },
      "CatalogResourceIndex": {
        "type": "object",
        "additionalProperties": true,
        "description": "Resource-defined index document."
      },
      "CatalogViewDocument": {
        "oneOf": [
          {
            "type": "object",
            "additionalProperties": true
          },
          {
            "type": "array",
            "items": {}
          }
        ],
        "description": "View index document; the manifest declares its root shape."
      },
      "CatalogBatch": {
        "type": "object",
        "properties": {
          "items": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CatalogEntity"
            }
          },
          "missing": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "items",
          "missing"
        ],
        "additionalProperties": false
      },
      "CatalogResourceIndexOrBatch": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/CatalogResourceIndex"
          },
          {
            "$ref": "#/components/schemas/CatalogBatch"
          }
        ]
      },
      "CatalogViewDocumentOrBatch": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/CatalogViewDocument"
          },
          {
            "$ref": "#/components/schemas/CatalogBatch"
          }
        ]
      },
      "CatalogRelationResponse": {
        "anyOf": [
          {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/CatalogEntity"
            }
          },
          {
            "type": "object",
            "additionalProperties": true
          }
        ],
        "description": "ids relations are entity maps; records relations are provider record objects."
      },
      "CatalogSummary": {
        "oneOf": [
          {
            "type": "object",
            "additionalProperties": true
          },
          {
            "type": "array",
            "items": {}
          }
        ],
        "description": "Release-defined catalog summary."
      },
      "SourceTreeDocument": {
        "oneOf": [
          {
            "type": "object",
            "additionalProperties": true
          },
          {
            "type": "array",
            "items": {}
          }
        ],
        "description": "Published source-tree document."
      },
      "SourceRecord": {
        "type": "object",
        "additionalProperties": true,
        "description": "Release-defined source DTO."
      },
      "GameClientManifest": {
        "type": "object",
        "properties": {
          "schema": {
            "const": "haneoka-game-client-v1"
          },
          "server": {
            "type": "string"
          },
          "sourceId": {
            "type": "string"
          },
          "master": {
            "type": "object",
            "properties": {
              "systemVersion": {
                "type": "string"
              }
            },
            "required": [
              "systemVersion"
            ],
            "additionalProperties": true
          },
          "addressables": {
            "type": "object",
            "properties": {
              "platform": {
                "type": "string"
              },
              "catalogFile": {
                "type": "string"
              },
              "catalogHashFile": {
                "type": "string"
              },
              "embeddedCatalogFile": {
                "type": "string"
              },
              "index": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "required": [
              "platform",
              "catalogFile",
              "catalogHashFile",
              "embeddedCatalogFile",
              "index"
            ],
            "additionalProperties": true
          }
        },
        "required": [
          "schema",
          "server",
          "sourceId",
          "master",
          "addressables"
        ],
        "additionalProperties": true
      },
      "GarupaPlaylistProjection": {
        "type": "object",
        "additionalProperties": true
      },
      "SonolusDocument": {
        "type": "object",
        "additionalProperties": true
      },
      "SonolusError": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          }
        },
        "required": [
          "message"
        ],
        "additionalProperties": true
      },
      "ActiveRequest": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          }
        },
        "required": [
          "active"
        ],
        "additionalProperties": false
      },
      "ActiveResponse": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          }
        },
        "required": [
          "active"
        ],
        "additionalProperties": false
      },
      "VersionRequest": {
        "type": "object",
        "properties": {
          "version": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "version"
        ],
        "additionalProperties": false
      },
      "PinRequest": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          },
          "version": {
            "type": "integer",
            "minimum": 1
          }
        },
        "required": [
          "active",
          "version"
        ],
        "additionalProperties": false
      },
      "PostCreateRequest": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "body": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000
          },
          "visibility": {
            "type": "string",
            "enum": [
              "public",
              "protected",
              "private"
            ],
            "default": "public"
          },
          "tags": {
            "type": "array",
            "maxItems": 10,
            "items": {
              "type": "string"
            }
          },
          "attachmentIds": {
            "type": "array",
            "maxItems": 16,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        },
        "required": [
          "body"
        ]
      },
      "PostPatchRequest": {
        "type": "object",
        "description": "Send the current body and version. Title, visibility, tags, and editReason are optional.",
        "properties": {
          "title": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "body": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000
          },
          "visibility": {
            "type": "string",
            "enum": [
              "public",
              "protected",
              "private"
            ]
          },
          "tags": {
            "type": "array",
            "maxItems": 10,
            "items": {
              "type": "string"
            }
          },
          "version": {
            "type": "integer",
            "minimum": 1
          },
          "editReason": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 500
          }
        },
        "required": [
          "body",
          "version"
        ]
      },
      "CommentCreateRequest": {
        "type": "object",
        "properties": {
          "body": {
            "type": "string",
            "minLength": 1,
            "maxLength": 5000
          },
          "parentId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          }
        },
        "required": [
          "body"
        ]
      },
      "CommentPatchRequest": {
        "type": "object",
        "properties": {
          "body": {
            "type": "string",
            "minLength": 1,
            "maxLength": 5000
          },
          "version": {
            "type": "integer",
            "minimum": 1
          },
          "editReason": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 500
          }
        },
        "required": [
          "body",
          "version"
        ]
      },
      "CommunityPostFields": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "title": {
            "type": "string"
          },
          "visibility": {
            "type": "string",
            "enum": [
              "public",
              "protected",
              "private"
            ]
          },
          "moderationStatus": {
            "type": "string",
            "enum": [
              "allow",
              "block",
              "pending",
              "review"
            ]
          },
          "state": {
            "type": "string",
            "enum": [
              "active",
              "archived"
            ]
          },
          "version": {
            "type": "integer"
          },
          "createdAt": {
            "type": "integer"
          },
          "updatedAt": {
            "type": "integer"
          },
          "lastEditedAt": {
            "type": "integer"
          },
          "commentCount": {
            "type": "integer"
          },
          "likeCount": {
            "type": "integer"
          },
          "pinnedAt": {
            "type": [
              "integer",
              "null"
            ]
          },
          "archivedAt": {
            "type": [
              "integer",
              "null"
            ]
          },
          "commentsLockedAt": {
            "type": [
              "integer",
              "null"
            ]
          },
          "authorUid": {
            "type": "integer"
          },
          "authorName": {
            "type": "string"
          },
          "authorImage": {
            "type": [
              "string",
              "null"
            ]
          },
          "avatarSeed": {
            "type": "string"
          },
          "device": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/Device"
              }
            ]
          },
          "ipLocation": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/IpLocation"
              }
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "attachments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PostAttachment"
            }
          }
        },
        "required": [
          "id",
          "title",
          "visibility",
          "moderationStatus",
          "state",
          "version",
          "createdAt",
          "updatedAt",
          "lastEditedAt",
          "commentCount",
          "likeCount",
          "pinnedAt",
          "archivedAt",
          "commentsLockedAt",
          "authorUid",
          "authorName",
          "authorImage",
          "avatarSeed",
          "device",
          "ipLocation",
          "tags",
          "attachments"
        ],
        "additionalProperties": true
      },
      "Post": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CommunityPostFields"
          },
          {
            "type": "object",
            "properties": {
              "body": {
                "type": "string"
              }
            },
            "required": [
              "body"
            ]
          }
        ]
      },
      "PostListViewer": {
        "type": "object",
        "properties": {
          "liked": {
            "type": "boolean"
          },
          "bookmarked": {
            "type": "boolean"
          },
          "canEdit": {
            "type": "boolean"
          },
          "canGiveFeedback": {
            "type": "boolean"
          }
        },
        "required": [
          "liked",
          "bookmarked",
          "canEdit",
          "canGiveFeedback"
        ],
        "additionalProperties": false
      },
      "PostListItem": {
        "allOf": [
          {
            "$ref": "#/components/schemas/CommunityPostFields"
          },
          {
            "type": "object",
            "properties": {
              "excerpt": {
                "type": "string",
                "maxLength": 500
              },
              "viewer": {
                "$ref": "#/components/schemas/PostListViewer"
              }
            },
            "required": [
              "excerpt",
              "viewer"
            ]
          }
        ]
      },
      "PostViewer": {
        "type": "object",
        "properties": {
          "liked": {
            "type": "boolean"
          },
          "bookmarked": {
            "type": "boolean"
          },
          "following": {
            "type": "boolean"
          },
          "canEdit": {
            "type": "boolean"
          },
          "canDelete": {
            "type": "boolean"
          },
          "canComment": {
            "type": "boolean"
          }
        },
        "required": [
          "liked",
          "bookmarked",
          "canEdit",
          "canDelete",
          "canComment"
        ],
        "additionalProperties": true
      },
      "Comment": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "body": {
            "type": "string"
          },
          "moderationStatus": {
            "type": "string"
          },
          "parentId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "likeCount": {
            "type": "integer"
          },
          "version": {
            "type": "integer"
          },
          "createdAt": {
            "type": "integer"
          },
          "updatedAt": {
            "type": "integer"
          },
          "lastEditedAt": {
            "type": "integer"
          },
          "authorUid": {
            "type": "integer"
          },
          "authorName": {
            "type": "string"
          },
          "authorImage": {
            "type": [
              "string",
              "null"
            ]
          },
          "avatarSeed": {
            "type": "string"
          },
          "viewer": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "required": [
          "id",
          "body",
          "moderationStatus",
          "parentId",
          "likeCount",
          "version",
          "createdAt",
          "updatedAt",
          "lastEditedAt",
          "authorUid",
          "authorName",
          "authorImage",
          "avatarSeed",
          "viewer"
        ]
      },
      "PostResponse": {
        "type": "object",
        "properties": {
          "post": {
            "$ref": "#/components/schemas/Post"
          },
          "comments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Comment"
            }
          },
          "commentsNextCursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "commentsSort": {
            "type": "string",
            "enum": [
              "hot",
              "latest"
            ]
          },
          "viewer": {
            "$ref": "#/components/schemas/PostViewer"
          }
        },
        "required": [
          "post",
          "comments",
          "commentsNextCursor",
          "commentsSort",
          "viewer"
        ],
        "additionalProperties": false
      },
      "PostCommentsResponse": {
        "type": "object",
        "properties": {
          "comments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Comment"
            }
          },
          "commentsNextCursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "commentsSort": {
            "type": "string",
            "enum": [
              "hot",
              "latest"
            ]
          }
        },
        "required": [
          "comments",
          "commentsNextCursor",
          "commentsSort"
        ],
        "additionalProperties": false
      },
      "PostListResponse": {
        "type": "object",
        "properties": {
          "posts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PostListItem"
            }
          },
          "nextCursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "seed": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "posts",
          "nextCursor"
        ],
        "additionalProperties": false
      },
      "PostMutationResponse": {
        "type": "object",
        "properties": {
          "post": {
            "$ref": "#/components/schemas/Post"
          },
          "moderationQueued": {
            "type": "boolean"
          }
        },
        "required": [
          "post"
        ],
        "additionalProperties": false
      },
      "CommentMutationResponse": {
        "type": "object",
        "properties": {
          "comment": {
            "$ref": "#/components/schemas/Comment"
          },
          "moderationQueued": {
            "type": "boolean"
          }
        },
        "required": [
          "comment"
        ],
        "additionalProperties": false
      },
      "ReactionResponse": {
        "type": "object",
        "properties": {
          "active": {
            "type": "boolean"
          },
          "likeCount": {
            "type": "integer"
          }
        },
        "required": [
          "active",
          "likeCount"
        ],
        "additionalProperties": false
      },
      "PostAttachment": {
        "type": "object",
        "properties": {
          "contentUrl": {
            "type": "string"
          },
          "fileName": {
            "type": "string"
          },
          "height": {
            "type": [
              "integer",
              "null"
            ]
          },
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "mediaType": {
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "size": {
            "type": "integer"
          },
          "width": {
            "type": [
              "integer",
              "null"
            ]
          }
        },
        "required": [
          "contentUrl",
          "fileName",
          "height",
          "id",
          "mediaType",
          "position",
          "size",
          "width"
        ],
        "additionalProperties": true
      },
      "Attachment": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid"
          },
          "fileName": {
            "type": "string"
          },
          "mediaType": {
            "type": "string"
          },
          "size": {
            "type": "integer"
          },
          "width": {
            "type": [
              "integer",
              "null"
            ]
          },
          "height": {
            "type": [
              "integer",
              "null"
            ]
          },
          "status": {
            "type": "string"
          },
          "moderationStatus": {
            "type": "string"
          },
          "createdAt": {
            "type": "integer"
          },
          "expiresAt": {
            "type": "integer"
          },
          "uploadUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "multipart": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/MultipartUploadPlan"
              }
            ]
          },
          "downloadUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "failureCode": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "id",
          "fileName",
          "mediaType",
          "size",
          "width",
          "height",
          "status",
          "moderationStatus",
          "createdAt",
          "expiresAt",
          "uploadUrl",
          "multipart",
          "downloadUrl",
          "failureCode"
        ],
        "additionalProperties": true
      },
      "MultipartUploadPlan": {
        "type": "object",
        "properties": {
          "partSize": {
            "type": "integer"
          },
          "partCount": {
            "type": "integer"
          },
          "partUploadUrl": {
            "type": "string"
          },
          "completeUrl": {
            "type": "string"
          },
          "cancelUrl": {
            "type": "string"
          }
        },
        "required": [
          "partSize",
          "partCount",
          "partUploadUrl",
          "completeUrl",
          "cancelUrl"
        ],
        "additionalProperties": false
      },
      "AttachmentResponse": {
        "type": "object",
        "properties": {
          "attachment": {
            "$ref": "#/components/schemas/Attachment"
          }
        },
        "required": [
          "attachment"
        ],
        "additionalProperties": false
      },
      "AttachmentNullableResponse": {
        "type": "object",
        "properties": {
          "attachment": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Attachment"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "attachment"
        ],
        "additionalProperties": false
      },
      "MultipartCompleteRequest": {
        "type": "object",
        "properties": {
          "parts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "partNumber": {
                  "type": "integer"
                },
                "etag": {
                  "type": "string"
                }
              },
              "required": [
                "partNumber",
                "etag"
              ],
              "additionalProperties": false
            }
          }
        },
        "additionalProperties": true
      },
      "UploadPartResponse": {
        "type": "object",
        "properties": {
          "attachment": {
            "$ref": "#/components/schemas/Attachment"
          },
          "part": {
            "type": "object",
            "properties": {
              "partNumber": {
                "type": "integer"
              },
              "etag": {
                "type": "string"
              },
              "byteSize": {
                "type": "integer"
              }
            },
            "required": [
              "partNumber",
              "etag",
              "byteSize"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "attachment",
          "part"
        ],
        "additionalProperties": false
      },
      "UploadCompletionResponse": {
        "type": "object",
        "properties": {
          "attachment": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Attachment"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "attachment"
        ],
        "additionalProperties": false
      },
      "AttachmentMetadataResponse": {
        "type": "object",
        "properties": {
          "attachment": {
            "$ref": "#/components/schemas/Attachment"
          },
          "parts": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        },
        "required": [
          "attachment",
          "parts"
        ],
        "additionalProperties": false
      },
      "UploadIntentRequest": {
        "type": "object",
        "properties": {
          "fileName": {
            "type": "string"
          },
          "mediaType": {
            "type": "string"
          },
          "size": {
            "type": "integer",
            "minimum": 1,
            "maximum": 134217728
          }
        },
        "required": [
          "fileName",
          "mediaType",
          "size"
        ]
      },
      "PostAttachmentsRequest": {
        "type": "object",
        "properties": {
          "attachmentIds": {
            "type": "array",
            "minItems": 1,
            "maxItems": 16,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        },
        "required": [
          "attachmentIds"
        ],
        "additionalProperties": false
      },
      "PostAttachmentsResponse": {
        "type": "object",
        "properties": {
          "attachments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Attachment"
            }
          }
        },
        "required": [
          "attachments"
        ],
        "additionalProperties": false
      },
      "DetachedAttachmentResponse": {
        "type": "object",
        "properties": {
          "attachmentId": {
            "type": "string",
            "format": "uuid"
          },
          "detached": {
            "const": true
          },
          "postId": {
            "type": "string",
            "format": "uuid"
          }
        },
        "required": [
          "attachmentId",
          "detached",
          "postId"
        ],
        "additionalProperties": false
      },
      "UploadPolicyResponse": {
        "type": "object",
        "properties": {
          "limits": {
            "type": "object",
            "properties": {
              "attachmentsPerPost": {
                "const": 16
              },
              "fileBytes": {
                "const": 134217728
              },
              "partBytes": {
                "const": 8388608
              },
              "videoSeconds": {
                "const": 600
              }
            },
            "required": [
              "attachmentsPerPost",
              "fileBytes",
              "partBytes",
              "videoSeconds"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "limits"
        ],
        "additionalProperties": false
      },
      "ProfileResponse": {
        "type": "object",
        "properties": {
          "profile": {
            "$ref": "#/components/schemas/Profile"
          }
        },
        "required": [
          "profile"
        ],
        "additionalProperties": false
      },
      "Profile": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "accountName": {
            "type": "string"
          },
          "avatarSeed": {
            "type": "string"
          },
          "avatarUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "bio": {
            "type": [
              "string",
              "null"
            ]
          },
          "candidateDisplayName": {
            "type": [
              "string",
              "null"
            ]
          },
          "displayName": {
            "type": [
              "string",
              "null"
            ]
          },
          "displayNameRevision": {
            "type": "integer"
          },
          "displayNameStatus": {
            "type": "string",
            "enum": [
              "allow",
              "block",
              "pending"
            ]
          },
          "handle": {
            "type": [
              "string",
              "null"
            ]
          },
          "profileStatus": {
            "type": "string"
          },
          "publicUid": {
            "type": "integer"
          },
          "role": {
            "type": "string"
          },
          "version": {
            "type": "integer"
          }
        },
        "required": [
          "accountName",
          "avatarSeed",
          "avatarUrl",
          "bio",
          "candidateDisplayName",
          "displayName",
          "displayNameRevision",
          "displayNameStatus",
          "handle",
          "profileStatus",
          "publicUid",
          "role",
          "version"
        ]
      },
      "ProfilePatch": {
        "type": "object",
        "properties": {
          "displayName": {
            "type": "string",
            "maxLength": 80
          },
          "handle": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 32
          },
          "bio": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 500
          },
          "version": {
            "type": "integer",
            "minimum": 1
          }
        },
        "anyOf": [
          {
            "required": [
              "displayName"
            ]
          },
          {
            "required": [
              "handle"
            ]
          },
          {
            "required": [
              "bio"
            ]
          }
        ],
        "additionalProperties": false
      },
      "DeleteProfileRequest": {
        "type": "object",
        "properties": {
          "confirmation": {
            "type": "string",
            "format": "email"
          }
        },
        "required": [
          "confirmation"
        ],
        "additionalProperties": false
      },
      "PendingAvatarResponse": {
        "type": "object",
        "properties": {
          "avatar": {
            "type": "object",
            "properties": {
              "status": {
                "const": "pending"
              }
            },
            "required": [
              "status"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "avatar"
        ],
        "additionalProperties": false
      },
      "PreferencesPatch": {
        "type": "object",
        "properties": {
          "locale": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "ja",
              "en",
              "zh-TW",
              "zh-CN",
              "ko",
              null
            ]
          },
          "releaseServer": {
            "type": [
              "string",
              "null"
            ]
          },
          "settings": {}
        },
        "additionalProperties": true
      },
      "PreferencesResponse": {
        "type": "object",
        "properties": {
          "preferences": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "additionalProperties": true
              }
            ]
          }
        },
        "required": [
          "preferences"
        ],
        "additionalProperties": false
      },
      "NotificationsResponse": {
        "type": "object",
        "properties": {
          "notifications": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "nextCursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "unreadCount": {
            "type": "integer"
          }
        },
        "required": [
          "notifications",
          "nextCursor",
          "unreadCount"
        ],
        "additionalProperties": false
      },
      "MarkAllReadResponse": {
        "type": "object",
        "properties": {
          "readAt": {
            "type": "integer"
          },
          "updatedCount": {
            "type": "integer"
          }
        },
        "required": [
          "readAt",
          "updatedCount"
        ],
        "additionalProperties": false
      },
      "MarkReadResponse": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "readAt": {
            "type": "integer"
          }
        },
        "required": [
          "id",
          "readAt"
        ],
        "additionalProperties": false
      },
      "Tag": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string"
          },
          "normalizedName": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "postCount": {
            "type": "integer"
          },
          "followerCount": {
            "type": "integer"
          },
          "preference": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "follow",
              "mute",
              null
            ]
          }
        },
        "required": [
          "id",
          "normalizedName",
          "displayName",
          "description",
          "postCount",
          "followerCount",
          "preference"
        ]
      },
      "TagListResponse": {
        "type": "object",
        "properties": {
          "tags": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tag"
            }
          },
          "nextCursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "tags",
          "nextCursor"
        ],
        "additionalProperties": false
      },
      "ResolvedTag": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "string"
          },
          "normalizedName": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "normalizedName",
          "displayName",
          "description",
          "status"
        ]
      },
      "TagPreferencesResponse": {
        "type": "object",
        "properties": {
          "preferences": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string",
                  "enum": [
                    "follow",
                    "mute"
                  ]
                },
                "createdAt": {
                  "type": "integer"
                },
                "tag": {
                  "$ref": "#/components/schemas/ResolvedTag"
                }
              },
              "required": [
                "kind",
                "createdAt",
                "tag"
              ],
              "additionalProperties": false
            }
          },
          "nextCursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "preferences",
          "nextCursor"
        ],
        "additionalProperties": false
      },
      "TagPreferenceRequest": {
        "type": "object",
        "properties": {
          "preference": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "follow",
              "mute",
              null
            ]
          }
        },
        "required": [
          "preference"
        ],
        "additionalProperties": false
      },
      "TagPreferenceMutationResponse": {
        "type": "object",
        "properties": {
          "preference": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "follow",
              "mute",
              null
            ]
          },
          "tag": {
            "$ref": "#/components/schemas/ResolvedTag"
          }
        },
        "required": [
          "preference",
          "tag"
        ],
        "additionalProperties": false
      },
      "UserRelationship": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "following": {
            "type": "boolean"
          },
          "followedBy": {
            "type": "boolean"
          },
          "blocked": {
            "type": "boolean"
          },
          "blocking": {
            "type": "boolean"
          },
          "blockedBy": {
            "type": "boolean"
          },
          "muted": {
            "type": "boolean"
          },
          "muting": {
            "type": "boolean"
          },
          "canFollow": {
            "type": "boolean"
          }
        },
        "required": [
          "following",
          "followedBy",
          "blocked",
          "blocking",
          "blockedBy",
          "muted",
          "muting",
          "canFollow"
        ]
      },
      "UserRelationshipResponse": {
        "type": "object",
        "properties": {
          "user": {
            "type": "object",
            "properties": {
              "uid": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "image": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "uid",
              "name",
              "image"
            ],
            "additionalProperties": false
          },
          "relationship": {
            "$ref": "#/components/schemas/UserRelationship"
          },
          "viewer": {
            "$ref": "#/components/schemas/UserRelationship"
          }
        },
        "required": [
          "user",
          "relationship",
          "viewer"
        ],
        "additionalProperties": false
      },
      "FeedbackRequest": {
        "type": "object",
        "properties": {
          "feedback": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "not_interested",
              "hide",
              null
            ]
          },
          "reasonCode": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "feedback"
        ],
        "additionalProperties": false
      },
      "FeedbackResponse": {
        "type": "object",
        "properties": {
          "feedback": {}
        },
        "required": [
          "feedback"
        ],
        "additionalProperties": false
      },
      "ClearedFeedbackResponse": {
        "type": "object",
        "properties": {
          "cleared": {
            "type": "integer"
          }
        },
        "required": [
          "cleared"
        ],
        "additionalProperties": false
      },
      "ReportRequest": {
        "type": "object",
        "properties": {
          "targetKind": {
            "type": "string",
            "enum": [
              "post",
              "comment",
              "user"
            ]
          },
          "targetId": {},
          "reasonCode": {
            "type": "string",
            "enum": [
              "spam",
              "harassment",
              "hate",
              "sexual",
              "violence",
              "privacy",
              "copyright",
              "misinformation",
              "other"
            ]
          },
          "details": {
            "type": "string",
            "maxLength": 2000
          }
        },
        "required": [
          "targetKind",
          "targetId",
          "reasonCode"
        ],
        "additionalProperties": false
      },
      "ReportResponse": {
        "type": "object",
        "properties": {
          "report": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "required": [
          "report"
        ],
        "additionalProperties": false
      },
      "DeletedCommentResponse": {
        "type": "object",
        "properties": {
          "comment": {
            "type": "object",
            "additionalProperties": true
          }
        },
        "required": [
          "comment"
        ],
        "additionalProperties": false
      },
      "CommentActivityResponse": {
        "type": "object",
        "properties": {
          "comments": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "nextCursor": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "comments",
          "nextCursor"
        ],
        "additionalProperties": false
      },
      "Device": {
        "type": "object",
        "properties": {
          "browserFamily": {
            "type": [
              "string",
              "null"
            ]
          },
          "osFamily": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "browserFamily",
          "osFamily"
        ],
        "additionalProperties": false
      },
      "IpLocation": {
        "type": "object",
        "properties": {
          "countryCode": {
            "type": "string"
          },
          "regionCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "regionName": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "required": [
          "countryCode",
          "regionCode",
          "regionName"
        ],
        "additionalProperties": false
      },
      "PublicProfile": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "avatarSeed": {
            "type": "string"
          },
          "avatarUrl": {
            "type": [
              "string",
              "null"
            ]
          },
          "bio": {
            "type": [
              "string",
              "null"
            ]
          },
          "displayName": {
            "type": [
              "string",
              "null"
            ]
          },
          "handle": {
            "type": [
              "string",
              "null"
            ]
          },
          "joinedAt": {
            "type": "integer"
          },
          "owner": {
            "type": "boolean"
          },
          "role": {
            "type": "string"
          },
          "stats": {
            "type": "object",
            "additionalProperties": true
          },
          "uid": {
            "type": "integer"
          }
        },
        "required": [
          "avatarSeed",
          "avatarUrl",
          "bio",
          "displayName",
          "handle",
          "joinedAt",
          "owner",
          "role",
          "stats",
          "uid"
        ]
      },
      "PublicProfileViewer": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "blocked": {
            "type": "boolean"
          },
          "followedBy": {
            "type": "boolean"
          },
          "following": {
            "type": "boolean"
          },
          "muted": {
            "type": "boolean"
          },
          "canInteract": {
            "type": "boolean"
          }
        },
        "required": [
          "blocked",
          "followedBy",
          "following",
          "muted",
          "canInteract"
        ]
      },
      "PublicProfileResponse": {
        "type": "object",
        "properties": {
          "profile": {
            "$ref": "#/components/schemas/PublicProfile"
          },
          "viewer": {
            "$ref": "#/components/schemas/PublicProfileViewer"
          },
          "posts": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "postsNextCursor": {
            "type": [
              "string",
              "null"
            ]
          },
          "works": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "gameAccounts": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        },
        "required": [
          "profile",
          "viewer",
          "posts",
          "postsNextCursor",
          "works",
          "gameAccounts"
        ],
        "additionalProperties": false
      },
      "BestdoriRecordMap": {
        "type": "object",
        "additionalProperties": true
      },
      "BestdoriBand": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "bandId": {
            "type": "integer"
          },
          "bandName": {},
          "official": {
            "type": "boolean"
          },
          "memberBandIds": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "memberCharacterIds": {
            "type": "array",
            "items": {
              "type": "integer"
            }
          },
          "memberNames": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "bandId",
          "bandName",
          "official"
        ]
      },
      "BestdoriDifficulty": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "difficulty": {
            "type": "string"
          },
          "playLevel": {
            "type": [
              "number",
              "null"
            ]
          },
          "noteCount": {
            "type": [
              "number",
              "null"
            ]
          },
          "publishedAt": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "file": {
            "type": "string"
          }
        },
        "required": [
          "difficulty",
          "playLevel",
          "noteCount",
          "publishedAt",
          "file"
        ]
      },
      "BestdoriSong": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "musicId": {
            "type": "integer"
          },
          "musicTitle": {},
          "bandId": {
            "type": [
              "integer",
              "null"
            ]
          },
          "jacketUrl": {
            "type": "string"
          },
          "jacketThumbUrl": {
            "type": "string"
          },
          "musicUrl": {
            "type": "string"
          },
          "publishedAt": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "releaseAt": {
            "type": [
              "number",
              "null"
            ]
          },
          "difficulty": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/BestdoriDifficulty"
            }
          }
        },
        "required": [
          "musicId",
          "musicTitle",
          "bandId",
          "jacketUrl",
          "jacketThumbUrl",
          "musicUrl",
          "publishedAt",
          "releaseAt",
          "difficulty"
        ]
      },
      "BestdoriSongMeta": {
        "type": "object",
        "additionalProperties": true
      },
      "BestdoriCharacter": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "characterId": {
            "type": "integer"
          },
          "characterName": {},
          "bandId": {
            "type": [
              "number",
              "null"
            ]
          },
          "colorCode": {}
        },
        "required": [
          "characterId",
          "characterName",
          "bandId",
          "colorCode"
        ]
      },
      "BestdoriCard": {
        "type": "object",
        "additionalProperties": true,
        "properties": {
          "cardId": {
            "type": "integer"
          },
          "characterId": {
            "type": [
              "number",
              "null"
            ]
          },
          "rarity": {
            "type": [
              "number",
              "null"
            ]
          },
          "releasedAt": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": [
                "number",
                "null"
              ]
            }
          },
          "releaseAt": {
            "type": [
              "number",
              "null"
            ]
          },
          "hasStory": {
            "type": "boolean"
          },
          "resourceSetName": {
            "type": [
              "string",
              "null"
            ]
          },
          "episodes": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          }
        },
        "required": [
          "cardId",
          "characterId",
          "rarity",
          "releasedAt",
          "releaseAt",
          "hasStory",
          "resourceSetName",
          "episodes"
        ]
      },
      "BestdoriBandMap": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/BestdoriBand"
        }
      },
      "BestdoriSongMap": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/BestdoriSong"
        }
      },
      "BestdoriSongMetaMap": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/BestdoriSongMeta"
        }
      },
      "BestdoriCharacterMap": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/BestdoriCharacter"
        }
      },
      "BestdoriCardMap": {
        "type": "object",
        "additionalProperties": {
          "$ref": "#/components/schemas/BestdoriCard"
        }
      },
      "BestdoriStoryDocument": {
        "type": "object",
        "additionalProperties": true
      },
      "BestdoriEditorAssetResponse": {
        "type": "object",
        "properties": {
          "server": {
            "type": "string"
          },
          "tree": {
            "type": "object",
            "additionalProperties": true
          },
          "files": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "path": {
            "type": "string"
          }
        },
        "required": [
          "server"
        ],
        "additionalProperties": true
      },
      "BestdoriLive2dResponse": {
        "type": "object",
        "properties": {
          "items": {
            "type": "object",
            "additionalProperties": true
          },
          "missing": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "items",
          "missing"
        ],
        "additionalProperties": false
      },
      "BetterAuthResponse": {
        "type": "object",
        "additionalProperties": true
      }
    }
  }
}
