{
  "components": {
    "schemas": {
      "ActiveUserResponseDto": {
        "properties": {
          "fullName": {
            "type": "string"
          },
          "isChatParticipant": {
            "type": "boolean"
          },
          "joinedAt": {
            "type": "number"
          },
          "profileImage": {
            "type": "string"
          },
          "userAddress": {
            "type": "string"
          }
        },
        "required": [
          "userAddress",
          "isChatParticipant"
        ],
        "type": "object"
      },
      "ActiveUsersResponseDto": {
        "properties": {
          "tokenName": {
            "type": "string"
          },
          "total": {
            "type": "number"
          },
          "truncated": {
            "type": "boolean"
          },
          "type": {
            "enum": [
              "viewers",
              "chat_participants"
            ],
            "type": "string"
          },
          "users": {
            "items": {
              "$ref": "#/components/schemas/ActiveUserResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "tokenName",
          "type",
          "users",
          "total",
          "truncated"
        ],
        "type": "object"
      },
      "AddReactionDataResponseDto": {
        "properties": {
          "created": {
            "type": "boolean"
          },
          "reactions": {
            "items": {
              "$ref": "#/components/schemas/ReactionsByTypeResponseDto"
            },
            "type": "array"
          },
          "totalCount": {
            "type": "number"
          }
        },
        "required": [
          "reactions",
          "totalCount",
          "created"
        ],
        "type": "object"
      },
      "AddReactionSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/AddReactionDataResponseDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "AIModerationMode": {
        "enum": [
          "DISABLED",
          "ADVISORY"
        ],
        "type": "string"
      },
      "AIModerationProviderStatusResponseDto": {
        "properties": {
          "available": {
            "example": true,
            "type": "boolean"
          },
          "name": {
            "example": "claude",
            "type": "string"
          }
        },
        "required": [
          "name",
          "available"
        ],
        "type": "object"
      },
      "AIModerationResponseDto": {
        "properties": {
          "analysisTier": {
            "example": "QUICK",
            "oneOf": [
              {
                "enum": [
                  "QUICK",
                  "DETAILED",
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "analysisType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnalysisType"
              }
            ],
            "example": "VIDEO"
          },
          "categories": {
            "items": {
              "$ref": "#/components/schemas/CategoryResultResponseDto"
            },
            "nullable": true,
            "type": "array"
          },
          "confidence": {
            "example": 0.95,
            "maximum": 1,
            "minimum": 0,
            "nullable": true,
            "type": "number"
          },
          "createdAt": {
            "example": "2026-08-01T00:00:00.000Z",
            "format": "date-time",
            "type": "string"
          },
          "errorMessage": {
            "example": null,
            "nullable": true,
            "type": "string"
          },
          "escalatedFromQuick": {
            "example": false,
            "type": "boolean"
          },
          "flagId": {
            "example": 20,
            "type": "number"
          },
          "framesAnalyzed": {
            "example": 5,
            "nullable": true,
            "type": "number"
          },
          "id": {
            "example": 10,
            "type": "number"
          },
          "processingTimeMs": {
            "example": 1500,
            "nullable": true,
            "type": "number"
          },
          "provider": {
            "example": "claude",
            "type": "string"
          },
          "quickScanResult": {
            "example": "REVIEW_REQUIRED",
            "oneOf": [
              {
                "enum": [
                  "NO_ACTION",
                  "REVIEW_REQUIRED",
                  "DELETE_CONTENT",
                  "BAN_USER",
                  "DELETE_AND_BAN",
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "reasoning": {
            "example": "No policy violations were detected.",
            "nullable": true,
            "type": "string"
          },
          "recommendation": {
            "example": "NO_ACTION",
            "oneOf": [
              {
                "enum": [
                  "NO_ACTION",
                  "REVIEW_REQUIRED",
                  "DELETE_CONTENT",
                  "BAN_USER",
                  "DELETE_AND_BAN",
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "retryCount": {
            "example": 0,
            "type": "number"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnalysisStatus"
              }
            ],
            "example": "COMPLETED"
          },
          "summary": {
            "example": "Content appears safe",
            "nullable": true,
            "type": "string"
          },
          "tokensUsed": {
            "example": 1200,
            "nullable": true,
            "type": "number"
          },
          "updatedAt": {
            "example": "2026-08-01T00:00:01.500Z",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "flagId",
          "status",
          "analysisType",
          "provider",
          "recommendation",
          "confidence",
          "categories",
          "summary",
          "reasoning",
          "processingTimeMs",
          "framesAnalyzed",
          "errorMessage",
          "retryCount",
          "analysisTier",
          "quickScanResult",
          "escalatedFromQuick",
          "tokensUsed",
          "createdAt",
          "updatedAt"
        ],
        "type": "object"
      },
      "AIModerationSettingsResponseDto": {
        "properties": {
          "enabled": {
            "example": true,
            "type": "boolean"
          },
          "escalationConfidenceThreshold": {
            "example": 0.85,
            "maximum": 1,
            "minimum": 0,
            "type": "number"
          },
          "escalationRecommendations": {
            "example": [
              "REVIEW_REQUIRED"
            ],
            "items": {
              "$ref": "#/components/schemas/AIRecommendation"
            },
            "type": "array"
          },
          "frameInterval": {
            "example": 10,
            "type": "number"
          },
          "maxFrames": {
            "example": 20,
            "type": "number"
          },
          "mode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AIModerationMode"
              }
            ],
            "example": "ADVISORY"
          },
          "provider": {
            "example": "claude",
            "type": "string"
          },
          "quickScanFrames": {
            "example": 5,
            "type": "number"
          },
          "quickScanWidth": {
            "example": 480,
            "type": "number"
          },
          "tieredAnalysisEnabled": {
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "enabled",
          "mode",
          "provider",
          "maxFrames",
          "frameInterval",
          "tieredAnalysisEnabled",
          "quickScanFrames",
          "quickScanWidth",
          "escalationConfidenceThreshold",
          "escalationRecommendations"
        ],
        "type": "object"
      },
      "AIModerationStatusResponseDto": {
        "properties": {
          "enabled": {
            "example": true,
            "type": "boolean"
          },
          "mode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AIModerationMode"
              }
            ],
            "example": "ADVISORY"
          },
          "providerAvailable": {
            "example": true,
            "type": "boolean"
          },
          "providers": {
            "items": {
              "$ref": "#/components/schemas/AIModerationProviderStatusResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "enabled",
          "mode",
          "providerAvailable",
          "providers"
        ],
        "type": "object"
      },
      "AIRecommendation": {
        "enum": [
          "NO_ACTION",
          "REVIEW_REQUIRED",
          "DELETE_CONTENT",
          "BAN_USER",
          "DELETE_AND_BAN"
        ],
        "type": "string"
      },
      "AnalysisCategory": {
        "enum": [
          "VIOLENCE",
          "HATE_SPEECH",
          "SEXUAL_CONTENT",
          "HARASSMENT",
          "SPAM",
          "SCAM",
          "SELF_HARM",
          "ILLEGAL_ACTIVITY",
          "MISINFORMATION",
          "COPYRIGHT",
          "SAFE"
        ],
        "type": "string"
      },
      "AnalysisStatus": {
        "enum": [
          "PENDING",
          "PROCESSING",
          "COMPLETED",
          "FAILED"
        ],
        "type": "string"
      },
      "AnalysisType": {
        "enum": [
          "TEXT",
          "IMAGE",
          "VIDEO"
        ],
        "type": "string"
      },
      "AnalyticsIngressAcceptedResponseDto": {
        "properties": {
          "error": {
            "example": false,
            "type": "boolean"
          },
          "message": {
            "example": "Success",
            "type": "string"
          },
          "status": {
            "example": 202,
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message"
        ],
        "type": "object"
      },
      "ApiErrorEnvelope": {
        "description": "Global HttpException bodies use status/error/message. CustomError and unhandled exception bodies use statusCode/message. /bundle errors use status/error/message.",
        "oneOf": [
          {
            "properties": {
              "error": {
                "enum": [
                  true
                ],
                "type": "boolean"
              },
              "message": {
                "oneOf": [
                  {
                    "type": "string"
                  },
                  {
                    "items": {
                      "type": "string"
                    },
                    "type": "array"
                  }
                ]
              },
              "status": {
                "description": "HTTP status code.",
                "type": "integer"
              }
            },
            "required": [
              "status",
              "error",
              "message"
            ],
            "type": "object"
          },
          {
            "properties": {
              "message": {
                "type": "string"
              },
              "statusCode": {
                "description": "HTTP status code.",
                "type": "integer"
              }
            },
            "required": [
              "statusCode",
              "message"
            ],
            "type": "object"
          }
        ]
      },
      "ApiErrorResponseDto": {
        "properties": {
          "code": {
            "description": "Optional machine-readable error code.",
            "type": "string"
          },
          "message": {
            "description": "Error message.",
            "type": "string"
          },
          "statusCode": {
            "description": "HTTP status code.",
            "type": "number"
          }
        },
        "required": [
          "statusCode",
          "message"
        ],
        "type": "object"
      },
      "ApiKeyDelegationResponseDto": {
        "properties": {
          "apiKeyId": {
            "type": "number"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "permissions": {
            "items": {
              "enum": [
                "MANAGE_COMMUNITY",
                "MANAGE_STREAM",
                "MANAGE_SETTINGS",
                "MANAGE_RECORDINGS",
                "VIEW_ANALYTICS"
              ],
              "type": "string"
            },
            "nullable": true,
            "type": "array"
          },
          "tokenName": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "tokenName"
        ],
        "type": "object"
      },
      "ApiKeyListResponseDto": {
        "properties": {
          "apiKeys": {
            "items": {
              "$ref": "#/components/schemas/ApiKeyResponseDto"
            },
            "type": "array"
          },
          "pageInfo": {
            "$ref": "#/components/schemas/ApiKeyPageInfoDto"
          }
        },
        "required": [
          "apiKeys",
          "pageInfo"
        ],
        "type": "object"
      },
      "ApiKeyModelResponseDto": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "delegateAllTokens": {
            "type": "boolean"
          },
          "deletedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "expiresAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "keyHash": {
            "description": "Stored SHA-256 hash from the API key model.",
            "type": "string"
          },
          "keyPrefix": {
            "description": "Short key prefix for identification.",
            "type": "string"
          },
          "lastUsedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "role": {
            "enum": [
              "MODERATOR",
              "TECHNICAL_PRODUCER",
              "MANAGER",
              "OWNER"
            ],
            "type": "string"
          },
          "sourceType": {
            "enum": [
              "OWNER",
              "MODERATOR"
            ],
            "type": "string"
          },
          "tokenDelegations": {
            "items": {
              "$ref": "#/components/schemas/ApiKeyDelegationResponseDto"
            },
            "type": "array"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          },
          "userAddress": {
            "description": "Owner address from the API key model.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "userAddress",
          "keyPrefix",
          "keyHash",
          "description",
          "role",
          "sourceType",
          "delegateAllTokens",
          "expiresAt",
          "lastUsedAt",
          "createdAt",
          "updatedAt",
          "tokenDelegations",
          "deletedAt"
        ],
        "type": "object"
      },
      "ApiKeyPageInfoDto": {
        "properties": {
          "endCursor": {
            "nullable": true,
            "type": "string"
          },
          "hasNextPage": {
            "type": "boolean"
          },
          "hasPreviousPage": {
            "type": "boolean"
          },
          "startCursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "hasNextPage",
          "endCursor",
          "hasPreviousPage",
          "startCursor"
        ],
        "type": "object"
      },
      "ApiKeyResponseDto": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "delegateAllTokens": {
            "type": "boolean"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "expiresAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "description": "Unique API key identifier.",
            "type": "number"
          },
          "keyPrefix": {
            "description": "Short key prefix for identification.",
            "type": "string"
          },
          "lastUsedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "role": {
            "enum": [
              "MODERATOR",
              "TECHNICAL_PRODUCER",
              "MANAGER",
              "OWNER"
            ],
            "type": "string"
          },
          "sourceType": {
            "enum": [
              "OWNER",
              "MODERATOR"
            ],
            "type": "string"
          },
          "tokenNames": {
            "items": {
              "type": "string"
            },
            "nullable": true,
            "type": "array"
          },
          "tokenPermissions": {
            "additionalProperties": {
              "items": {
                "enum": [
                  "MANAGE_COMMUNITY",
                  "MANAGE_STREAM",
                  "MANAGE_SETTINGS",
                  "MANAGE_RECORDINGS",
                  "VIEW_ANALYTICS"
                ],
                "type": "string"
              },
              "type": "array"
            },
            "nullable": true,
            "type": "object"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "keyPrefix",
          "description",
          "role",
          "sourceType",
          "delegateAllTokens",
          "tokenNames",
          "expiresAt",
          "lastUsedAt",
          "createdAt",
          "updatedAt"
        ],
        "type": "object"
      },
      "ApiSuccessEnvelopeMetadataDto": {
        "properties": {
          "error": {
            "description": "Successful response marker.",
            "enum": [
              false
            ],
            "example": false,
            "type": "boolean"
          },
          "message": {
            "description": "Response message.",
            "example": "Success",
            "type": "string"
          },
          "status": {
            "description": "HTTP status code.",
            "example": 200,
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message"
        ],
        "type": "object"
      },
      "AvailablePermissionsResponseDto": {
        "properties": {
          "permissions": {
            "items": {
              "$ref": "#/components/schemas/PermissionDescriptionResponseDto"
            },
            "type": "array"
          },
          "presets": {
            "items": {
              "$ref": "#/components/schemas/RolePermissionPresetResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "permissions",
          "presets"
        ],
        "type": "object"
      },
      "AvailableRolesResponse": {
        "properties": {
          "permissions": {
            "description": "List of all available permission names",
            "example": [
              "MANAGE_COMMENTS",
              "MANAGE_CHAT",
              "BAN_USERS"
            ],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "roles": {
            "description": "List of available roles with their details",
            "items": {
              "$ref": "#/components/schemas/RoleInfo"
            },
            "type": "array"
          }
        },
        "required": [
          "roles",
          "permissions"
        ],
        "type": "object"
      },
      "BanListResponseDto": {
        "properties": {
          "bans": {
            "items": {
              "$ref": "#/components/schemas/BanResponseDto"
            },
            "type": "array"
          },
          "pageInfo": {
            "$ref": "#/components/schemas/BanPageInfoResponseDto"
          }
        },
        "required": [
          "bans",
          "pageInfo"
        ],
        "type": "object"
      },
      "BannedUserProfileResponseDto": {
        "properties": {
          "bio": {
            "nullable": true,
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "engagementBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EngagementBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "fullName": {
            "nullable": true,
            "type": "string"
          },
          "launchBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/LaunchBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "profileImage": {
            "nullable": true,
            "type": "string"
          },
          "successBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SuccessBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "volumeBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/VolumeBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          }
        },
        "required": [
          "fullName",
          "profileImage"
        ],
        "type": "object"
      },
      "BanPageInfoResponseDto": {
        "properties": {
          "endCursor": {
            "nullable": true,
            "type": "string"
          },
          "hasNextPage": {
            "type": "boolean"
          },
          "hasPreviousPage": {
            "type": "boolean"
          },
          "startCursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "hasNextPage",
          "endCursor",
          "hasPreviousPage",
          "startCursor"
        ],
        "type": "object"
      },
      "BanResponseDto": {
        "properties": {
          "bannedBy": {
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "expiresAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "isPermanent": {
            "type": "boolean"
          },
          "reason": {
            "nullable": true,
            "type": "string"
          },
          "tokenName": {
            "nullable": true,
            "type": "string"
          },
          "user": {
            "$ref": "#/components/schemas/BannedUserProfileResponseDto"
          },
          "userAddress": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "userAddress",
          "tokenName",
          "reason",
          "bannedBy",
          "expiresAt",
          "createdAt",
          "isPermanent"
        ],
        "type": "object"
      },
      "BlanketInviteClaimResponseDto": {
        "properties": {
          "claimedAt": {
            "format": "date-time",
            "type": "string"
          },
          "inviteScope": {
            "allOf": [
              {
                "$ref": "#/components/schemas/InviteScope"
              }
            ]
          },
          "role": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ModeratorRole"
              }
            ]
          }
        },
        "required": [
          "inviteScope",
          "role",
          "claimedAt"
        ],
        "type": "object"
      },
      "BundleAckResponseDto": {
        "properties": {
          "data": {
            "description": "Server-minted bundle operation id.",
            "format": "uuid",
            "type": "string"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "enum": [
              "Transaction Received"
            ],
            "type": "string"
          }
        },
        "required": [
          "data",
          "message",
          "error"
        ],
        "type": "object"
      },
      "BundleErrorResponseDto": {
        "properties": {
          "error": {
            "enum": [
              true
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "description": "HTTP status code.",
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message"
        ],
        "type": "object"
      },
      "BundleStatus": {
        "enum": [
          "PENDING",
          "PROCESSED",
          "FAILED"
        ],
        "type": "string"
      },
      "BundleStatusResponseDto": {
        "properties": {
          "error": {
            "description": "Failure reason, included only when status is FAILED and a reason was stored.",
            "type": "string"
          },
          "key": {
            "description": "The submitted lookup id after trimming.",
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BundleStatus"
              }
            ]
          }
        },
        "required": [
          "key",
          "status"
        ],
        "type": "object"
      },
      "CategoryResultResponseDto": {
        "properties": {
          "category": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnalysisCategory"
              }
            ],
            "example": "SAFE"
          },
          "confidence": {
            "example": 0.95,
            "maximum": 1,
            "minimum": 0,
            "type": "number"
          },
          "detected": {
            "example": false,
            "type": "boolean"
          }
        },
        "required": [
          "category",
          "confidence",
          "detected"
        ],
        "type": "object"
      },
      "ChartCandleResponseDto": {
        "properties": {
          "closePrice": {
            "example": 0.026,
            "type": "number"
          },
          "highPrice": {
            "example": 0.027,
            "type": "number"
          },
          "lowPrice": {
            "example": 0.024,
            "type": "number"
          },
          "openPrice": {
            "example": 0.025,
            "type": "number"
          },
          "startTime": {
            "example": 1737500000,
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ]
          },
          "volume": {
            "example": "1200.5",
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ]
          }
        },
        "required": [
          "startTime",
          "openPrice",
          "closePrice",
          "lowPrice",
          "highPrice",
          "volume"
        ],
        "type": "object"
      },
      "ChartResponseDto": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/ChartCandleResponseDto"
            },
            "type": "array"
          },
          "isPreviousData": {
            "example": true,
            "type": "boolean"
          },
          "nextTime": {
            "example": 1737499940,
            "type": "number"
          }
        },
        "required": [
          "data",
          "isPreviousData"
        ],
        "type": "object"
      },
      "ChatMessageResponseDto": {
        "properties": {
          "content": {
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "holderTier": {
            "$ref": "#/components/schemas/MessageHolderTierResponseDto"
          },
          "id": {
            "type": "number"
          },
          "messageId": {
            "type": "string"
          },
          "reactions": {
            "$ref": "#/components/schemas/ChatReactionDataResponseDto"
          },
          "tokenName": {
            "type": "string"
          },
          "user": {
            "$ref": "#/components/schemas/MessageUserProfileResponseDto"
          },
          "userAddress": {
            "type": "string"
          }
        },
        "required": [
          "tokenName",
          "content",
          "userAddress",
          "createdAt"
        ],
        "type": "object"
      },
      "ChatReactionDataResponseDto": {
        "properties": {
          "reactions": {
            "items": {
              "$ref": "#/components/schemas/ChatReactionsByTypeResponseDto"
            },
            "type": "array"
          },
          "totalCount": {
            "type": "number"
          }
        },
        "required": [
          "reactions",
          "totalCount"
        ],
        "type": "object"
      },
      "ChatReactionsByTypeResponseDto": {
        "properties": {
          "count": {
            "type": "number"
          },
          "reactionType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ContentReactionType"
              }
            ]
          },
          "userReacted": {
            "type": "boolean"
          },
          "users": {
            "items": {
              "$ref": "#/components/schemas/ChatReactionUserResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "reactionType",
          "count",
          "users",
          "userReacted"
        ],
        "type": "object"
      },
      "ChatReactionUserResponseDto": {
        "properties": {
          "fullName": {
            "type": "string"
          },
          "profileImage": {
            "type": "string"
          },
          "userAddress": {
            "type": "string"
          }
        },
        "required": [
          "userAddress"
        ],
        "type": "object"
      },
      "ChatStatusResponseDto": {
        "properties": {
          "enabled": {
            "example": false,
            "type": "boolean"
          },
          "reason": {
            "enum": [
              "global",
              "admin",
              "owner"
            ],
            "example": "admin",
            "type": "string"
          },
          "slowModeSeconds": {
            "example": 30,
            "maximum": 600,
            "minimum": 0,
            "type": "number"
          },
          "status": {
            "enum": [
              "ENABLED",
              "DISABLED",
              "ADMIN_DISABLED"
            ],
            "example": "ADMIN_DISABLED",
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "slowModeSeconds"
        ],
        "type": "object"
      },
      "ClientFlagsResponseDto": {
        "properties": {
          "flags": {
            "additionalProperties": {
              "type": "boolean"
            },
            "example": {
              "BIOMETRIC_AUTH": false,
              "DARK_MODE": true,
              "DEX_TRADING": true,
              "LIVE_STREAMING": true,
              "OFFLINE_MODE": false,
              "PUSH_NOTIFICATIONS": false
            },
            "properties": {
              "BIOMETRIC_AUTH": {
                "example": false,
                "type": "boolean"
              },
              "DARK_MODE": {
                "example": true,
                "type": "boolean"
              },
              "DEX_TRADING": {
                "example": true,
                "type": "boolean"
              },
              "LIVE_STREAMING": {
                "example": true,
                "type": "boolean"
              },
              "OFFLINE_MODE": {
                "example": false,
                "type": "boolean"
              },
              "PUSH_NOTIFICATIONS": {
                "example": false,
                "type": "boolean"
              }
            },
            "required": [
              "PUSH_NOTIFICATIONS",
              "OFFLINE_MODE",
              "BIOMETRIC_AUTH",
              "DARK_MODE",
              "LIVE_STREAMING",
              "DEX_TRADING"
            ],
            "type": "object"
          }
        },
        "type": "object"
      },
      "ConnectedClientResponseDto": {
        "properties": {
          "address": {
            "type": "string"
          },
          "authenticated": {
            "type": "boolean"
          },
          "connectedAt": {
            "format": "date-time",
            "type": "string"
          },
          "lastActivity": {
            "format": "date-time",
            "type": "string"
          },
          "rooms": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "socketId": {
            "type": "string"
          },
          "userAgent": {
            "type": "string"
          }
        },
        "required": [
          "socketId",
          "authenticated",
          "connectedAt",
          "lastActivity",
          "rooms"
        ],
        "type": "object"
      },
      "ConnectedClientsPaginationResponseDto": {
        "properties": {
          "hasMore": {
            "type": "boolean"
          },
          "limit": {
            "type": "number"
          },
          "offset": {
            "type": "number"
          },
          "total": {
            "type": "number"
          }
        },
        "required": [
          "offset",
          "limit",
          "total",
          "hasMore"
        ],
        "type": "object"
      },
      "ConnectedClientsResponseDto": {
        "properties": {
          "clients": {
            "items": {
              "$ref": "#/components/schemas/ConnectedClientResponseDto"
            },
            "type": "array"
          },
          "pagination": {
            "$ref": "#/components/schemas/ConnectedClientsPaginationResponseDto"
          },
          "summary": {
            "$ref": "#/components/schemas/ConnectedClientsSummaryResponseDto"
          }
        },
        "required": [
          "clients",
          "summary",
          "pagination"
        ],
        "type": "object"
      },
      "ConnectedClientsSummaryResponseDto": {
        "properties": {
          "anonymousCount": {
            "type": "number"
          },
          "authenticatedCount": {
            "type": "number"
          },
          "overseerCount": {
            "type": "number"
          },
          "requestedUsersOnline": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "roomCounts": {
            "additionalProperties": {
              "type": "number"
            },
            "type": "object"
          },
          "rooms": {
            "items": {
              "$ref": "#/components/schemas/ConnectedRoomSummaryResponseDto"
            },
            "type": "array"
          },
          "totalConnected": {
            "type": "number"
          }
        },
        "required": [
          "totalConnected",
          "authenticatedCount",
          "anonymousCount",
          "roomCounts",
          "rooms"
        ],
        "type": "object"
      },
      "ConnectedRoomSummaryResponseDto": {
        "properties": {
          "authenticatedCount": {
            "type": "number"
          },
          "connectedCount": {
            "type": "number"
          },
          "room": {
            "type": "string"
          }
        },
        "required": [
          "room",
          "connectedCount",
          "authenticatedCount"
        ],
        "type": "object"
      },
      "ConnectErrorResponseDto": {
        "properties": {
          "error": {
            "enum": [
              true
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message"
        ],
        "type": "object"
      },
      "ContentFlagCategoryResultDto": {
        "properties": {
          "category": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnalysisCategory"
              }
            ]
          },
          "confidence": {
            "type": "number"
          },
          "detected": {
            "type": "boolean"
          }
        },
        "required": [
          "category",
          "confidence",
          "detected"
        ],
        "type": "object"
      },
      "ContentFlagListDataDto": {
        "properties": {
          "flags": {
            "items": {
              "$ref": "#/components/schemas/ContentFlagResponseDto"
            },
            "type": "array"
          },
          "pageInfo": {
            "$ref": "#/components/schemas/ContentFlagPageInfoDto"
          }
        },
        "required": [
          "flags",
          "pageInfo"
        ],
        "type": "object"
      },
      "ContentFlagListSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ContentFlagListDataDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "ContentFlagModerationDto": {
        "properties": {
          "categories": {
            "items": {
              "$ref": "#/components/schemas/ContentFlagCategoryResultDto"
            },
            "nullable": true,
            "type": "array"
          },
          "completedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "confidence": {
            "nullable": true,
            "type": "number"
          },
          "errorMessage": {
            "nullable": true,
            "type": "string"
          },
          "provider": {
            "nullable": true,
            "type": "string"
          },
          "reasoning": {
            "nullable": true,
            "type": "string"
          },
          "recommendation": {
            "nullable": true,
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AnalysisStatus"
              }
            ]
          },
          "summary": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "status",
          "recommendation",
          "confidence",
          "summary",
          "categories",
          "reasoning",
          "provider",
          "completedAt",
          "errorMessage"
        ],
        "type": "object"
      },
      "ContentFlagMutationDataDto": {
        "properties": {
          "flag": {
            "$ref": "#/components/schemas/ContentFlagResponseDto"
          }
        },
        "required": [
          "flag"
        ],
        "type": "object"
      },
      "ContentFlagMutationSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ContentFlagMutationDataDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "ContentFlagPageInfoDto": {
        "properties": {
          "endCursor": {
            "nullable": true,
            "type": "string"
          },
          "hasNextPage": {
            "type": "boolean"
          },
          "hasPreviousPage": {
            "type": "boolean"
          },
          "startCursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "hasNextPage",
          "endCursor",
          "hasPreviousPage",
          "startCursor"
        ],
        "type": "object"
      },
      "ContentFlagReporterDto": {
        "properties": {
          "bio": {
            "nullable": true,
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "engagementBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EngagementBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "fullName": {
            "nullable": true,
            "type": "string"
          },
          "launchBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/LaunchBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "profileImage": {
            "nullable": true,
            "type": "string"
          },
          "successBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SuccessBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "volumeBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/VolumeBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          }
        },
        "required": [
          "fullName",
          "profileImage"
        ],
        "type": "object"
      },
      "ContentFlagResponseDto": {
        "properties": {
          "actionTaken": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/FlagAction"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "aiModeration": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContentFlagModerationDto"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "object"
              }
            ]
          },
          "contentId": {
            "type": "string"
          },
          "contentSnapshot": {
            "nullable": true,
            "type": "string"
          },
          "contentType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ContentType"
              }
            ]
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "details": {
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "reason": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/FlagReason"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "reportedUserAddress": {
            "type": "string"
          },
          "reporter": {
            "$ref": "#/components/schemas/ContentFlagReporterDto"
          },
          "reporterAddress": {
            "type": "string"
          },
          "reviewedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "reviewedBy": {
            "nullable": true,
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FlagStatus"
              }
            ]
          },
          "tokenName": {
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "tokenName",
          "contentType",
          "contentId",
          "contentSnapshot",
          "reporterAddress",
          "reportedUserAddress",
          "reason",
          "details",
          "status",
          "reviewedBy",
          "reviewedAt",
          "actionTaken",
          "createdAt",
          "updatedAt"
        ],
        "type": "object"
      },
      "ContentReactionType": {
        "enum": [
          "heart",
          "fire",
          "laugh",
          "wow",
          "thumbs_up"
        ],
        "type": "string"
      },
      "ContentType": {
        "enum": [
          "CHAT_MESSAGE",
          "COMMENT",
          "STREAM",
          "RECORDING"
        ],
        "type": "string"
      },
      "CreateApiKeyResponseDto": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "delegateAllTokens": {
            "type": "boolean"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "expiresAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "description": "Unique API key identifier.",
            "type": "number"
          },
          "keyPrefix": {
            "description": "Short key prefix for identification.",
            "type": "string"
          },
          "lastUsedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "rawKey": {
            "description": "Full API key returned only at creation.",
            "type": "string"
          },
          "role": {
            "enum": [
              "MODERATOR",
              "TECHNICAL_PRODUCER",
              "MANAGER",
              "OWNER"
            ],
            "type": "string"
          },
          "sourceType": {
            "enum": [
              "OWNER",
              "MODERATOR"
            ],
            "type": "string"
          },
          "tokenNames": {
            "items": {
              "type": "string"
            },
            "nullable": true,
            "type": "array"
          },
          "tokenPermissions": {
            "additionalProperties": {
              "items": {
                "enum": [
                  "MANAGE_COMMUNITY",
                  "MANAGE_STREAM",
                  "MANAGE_SETTINGS",
                  "MANAGE_RECORDINGS",
                  "VIEW_ANALYTICS"
                ],
                "type": "string"
              },
              "type": "array"
            },
            "nullable": true,
            "type": "object"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "keyPrefix",
          "description",
          "role",
          "sourceType",
          "delegateAllTokens",
          "tokenNames",
          "expiresAt",
          "lastUsedAt",
          "createdAt",
          "updatedAt",
          "rawKey"
        ],
        "type": "object"
      },
      "CreateBanDto": {
        "properties": {
          "durationSeconds": {
            "maximum": 31536000,
            "minimum": 60,
            "type": "number"
          },
          "reason": {
            "maxLength": 500,
            "type": "string"
          },
          "userAddress": {
            "format": "gala-chain-address",
            "type": "string"
          }
        },
        "required": [
          "userAddress"
        ],
        "type": "object"
      },
      "CreateOverseerDirectDto": {
        "properties": {
          "description": {
            "maxLength": 255,
            "type": "string"
          },
          "userAddress": {
            "description": "GalaChain wallet address to promote.",
            "type": "string"
          }
        },
        "required": [
          "userAddress"
        ],
        "type": "object"
      },
      "CreateOverseerInviteDto": {
        "properties": {
          "description": {
            "maxLength": 255,
            "type": "string"
          },
          "expiresAt": {
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "CreateSimulcastTargetDto": {
        "properties": {
          "passthrough": {
            "maxLength": 255,
            "type": "string"
          },
          "platform": {
            "enum": [
              "youtube",
              "twitch",
              "facebook",
              "custom"
            ],
            "type": "string"
          },
          "streamKey": {
            "maxLength": 255,
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "platform",
          "url",
          "streamKey"
        ],
        "type": "object"
      },
      "CreateTokenBanDto": {
        "properties": {
          "reason": {
            "description": "Optional reason for the ban.",
            "maxLength": 500,
            "type": "string"
          },
          "tokenName": {
            "description": "Token name to ban.",
            "type": "string"
          }
        },
        "required": [
          "tokenName"
        ],
        "type": "object"
      },
      "CurrentUserProfileResponseDto": {
        "properties": {
          "address": {
            "type": "string"
          },
          "bio": {
            "type": "string"
          },
          "fullName": {
            "nullable": true,
            "type": "string"
          },
          "launchBadge": {
            "items": {
              "$ref": "#/components/schemas/UserBadgeStatusResponseDto"
            },
            "type": "array"
          },
          "profileImage": {
            "nullable": true,
            "type": "string"
          },
          "successBadge": {
            "items": {
              "$ref": "#/components/schemas/UserBadgeStatusResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "address",
          "fullName",
          "profileImage",
          "bio",
          "launchBadge",
          "successBadge"
        ],
        "type": "object"
      },
      "DeletedMessageDataResponseDto": {
        "properties": {
          "deleted": {
            "type": "boolean"
          },
          "messageId": {
            "type": "string"
          }
        },
        "required": [
          "messageId",
          "deleted"
        ],
        "type": "object"
      },
      "DevicePlatform": {
        "enum": [
          "ios",
          "android"
        ],
        "type": "string"
      },
      "EngagementBadge": {
        "enum": [
          "SPARK",
          "GATHERING",
          "CROWD",
          "MOVEMENT"
        ],
        "type": "string"
      },
      "EventResponseDto": {
        "properties": {
          "clientTimestamp": {
            "format": "date-time",
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "eventType": {
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "payload": {
            "type": "object"
          },
          "sessionId": {
            "type": "string"
          },
          "tokenName": {
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          },
          "userAddress": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "eventType",
          "payload",
          "createdAt",
          "updatedAt"
        ],
        "type": "object"
      },
      "EventsBatchResponseDto": {
        "properties": {
          "accepted": {
            "type": "number"
          },
          "timestamp": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "accepted"
        ],
        "type": "object"
      },
      "EventsBatchSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/EventsBatchResponseDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "EventsListSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/EventResponseDto"
            },
            "type": "array"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "EventsStatsResponseDto": {
        "properties": {
          "eventsByType": {
            "additionalProperties": {
              "type": "number"
            },
            "type": "object"
          },
          "todayEvents": {
            "type": "number"
          },
          "totalEvents": {
            "type": "number"
          },
          "uniqueTokens": {
            "type": "number"
          },
          "uniqueUsers": {
            "type": "number"
          }
        },
        "required": [
          "totalEvents",
          "todayEvents",
          "uniqueUsers",
          "uniqueTokens",
          "eventsByType"
        ],
        "type": "object"
      },
      "EventsStatsSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/EventsStatsResponseDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "FeeAmountResponseDto": {
        "properties": {
          "feeAmount": {
            "type": "number"
          }
        },
        "required": [
          "feeAmount"
        ],
        "type": "object"
      },
      "FlagAction": {
        "enum": [
          "DELETE_CONTENT",
          "BAN_USER",
          "DELETE_AND_BAN"
        ],
        "type": "string"
      },
      "FlagReason": {
        "enum": [
          "INAPPROPRIATE_CONTENT",
          "SPAM",
          "HARASSMENT",
          "SCAM",
          "OTHER"
        ],
        "type": "string"
      },
      "FlagStatus": {
        "enum": [
          "PENDING",
          "DISMISSED",
          "ACTIONED"
        ],
        "type": "string"
      },
      "FlushResultDto": {
        "properties": {
          "duration": {
            "description": "Duration of the flush operation in milliseconds",
            "example": 156,
            "type": "number"
          },
          "flushedCount": {
            "description": "Number of cache keys flushed",
            "example": 42,
            "type": "number"
          },
          "target": {
            "description": "Target entity that was flushed (address or tokenName)",
            "example": "eth|0x1234567890abcdef1234567890abcdef12345678",
            "type": "string"
          }
        },
        "required": [
          "flushedCount",
          "duration"
        ],
        "type": "object"
      },
      "GalaBalanceResponseDto": {
        "properties": {
          "holdingPrice": {
            "type": "number"
          },
          "name": {
            "enum": [
              "GALA"
            ],
            "type": "string"
          },
          "price": {
            "type": "number"
          },
          "quantity": {
            "type": "number"
          }
        },
        "required": [
          "name",
          "quantity",
          "price",
          "holdingPrice"
        ],
        "type": "object"
      },
      "GetAIModerationAnalysisResponseDto": {
        "properties": {
          "analysis": {
            "$ref": "#/components/schemas/AIModerationResponseDto"
          }
        },
        "required": [
          "analysis"
        ],
        "type": "object"
      },
      "GetAIModerationSettingsResponseDto": {
        "properties": {
          "settings": {
            "$ref": "#/components/schemas/AIModerationSettingsResponseDto"
          }
        },
        "required": [
          "settings"
        ],
        "type": "object"
      },
      "GetAIModerationStatusResponseDto": {
        "properties": {
          "status": {
            "$ref": "#/components/schemas/AIModerationStatusResponseDto"
          }
        },
        "required": [
          "status"
        ],
        "type": "object"
      },
      "GetRestrictedNamesDto": {
        "properties": {
          "content": {
            "description": "Newline-separated list of restricted token names/patterns",
            "example": "scam\nrug\npump\ndump",
            "type": "string"
          }
        },
        "required": [
          "content"
        ],
        "type": "object"
      },
      "HealthCheckResponseDto": {
        "properties": {
          "database": {
            "$ref": "#/components/schemas/HealthServiceStatusDto"
          },
          "galachain_launchpad": {
            "$ref": "#/components/schemas/HealthServiceStatusDto"
          },
          "galachain_query": {
            "$ref": "#/components/schemas/HealthServiceStatusDto"
          },
          "mux": {
            "$ref": "#/components/schemas/HealthServiceStatusDto"
          },
          "rabbitmq": {
            "$ref": "#/components/schemas/HealthServiceStatusDto"
          },
          "redis": {
            "$ref": "#/components/schemas/HealthServiceStatusDto"
          },
          "status": {
            "enum": [
              "up"
            ],
            "example": "up",
            "type": "string"
          }
        },
        "required": [
          "status"
        ],
        "type": "object"
      },
      "HealthProbeResponseDto": {
        "properties": {
          "details": {
            "additionalProperties": {
              "properties": {
                "message": {
                  "type": "string"
                },
                "service": {
                  "type": "string"
                },
                "status": {
                  "enum": [
                    "up",
                    "down"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "status"
              ],
              "type": "object"
            },
            "example": {
              "database": {
                "status": "up"
              }
            },
            "type": "object"
          },
          "error": {
            "additionalProperties": {
              "properties": {
                "message": {
                  "type": "string"
                },
                "service": {
                  "type": "string"
                },
                "status": {
                  "enum": [
                    "up",
                    "down"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "status"
              ],
              "type": "object"
            },
            "example": {},
            "type": "object"
          },
          "info": {
            "additionalProperties": {
              "properties": {
                "message": {
                  "type": "string"
                },
                "service": {
                  "type": "string"
                },
                "status": {
                  "enum": [
                    "up",
                    "down"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "status"
              ],
              "type": "object"
            },
            "example": {
              "database": {
                "status": "up"
              }
            },
            "type": "object"
          },
          "status": {
            "enum": [
              "ok"
            ],
            "example": "ok",
            "type": "string"
          }
        },
        "required": [
          "status",
          "info",
          "error",
          "details"
        ],
        "type": "object"
      },
      "HealthServiceStatusDto": {
        "properties": {
          "service": {
            "example": "Connection unavailable",
            "type": "string"
          },
          "status": {
            "enum": [
              "up",
              "down"
            ],
            "example": "up",
            "type": "string"
          }
        },
        "required": [
          "status"
        ],
        "type": "object"
      },
      "HolderItemResponseDto": {
        "properties": {
          "owner": {
            "description": "Wallet address as returned by the holder service.",
            "type": "string"
          },
          "quantity": {
            "description": "Token quantity, represented as a decimal string.",
            "type": "string"
          }
        },
        "required": [
          "owner",
          "quantity"
        ],
        "type": "object"
      },
      "HolderListSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/HolderItemResponseDto"
            },
            "type": "array"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "HolderTier": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5
        ],
        "type": "number"
      },
      "HolderTierResponseDto": {
        "properties": {
          "tier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/HolderTier"
              }
            ]
          },
          "tierName": {
            "type": "string"
          }
        },
        "required": [
          "tier",
          "tierName"
        ],
        "type": "object"
      },
      "InviteClaimDto": {
        "properties": {
          "inviteCode": {
            "maxLength": 64,
            "type": "string"
          }
        },
        "required": [
          "inviteCode"
        ],
        "type": "object"
      },
      "InviteScope": {
        "enum": [
          "TOKEN",
          "ALL_OWNER_TOKENS"
        ],
        "type": "string"
      },
      "InviteStatus": {
        "enum": [
          "PENDING",
          "CLAIMED",
          "REVOKED",
          "EXPIRED"
        ],
        "type": "string"
      },
      "LaunchBadge": {
        "enum": [
          "ONE_HIT_WONDER",
          "TOKEN_CRAFTER",
          "CRYPTO_SAVVY",
          "CRYPTO_PRO",
          "MIDAS_TOUCH"
        ],
        "type": "string"
      },
      "LeaderboardTokenResponseDto": {
        "properties": {
          "creatorAddress": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "galaPrice": {
            "type": "string"
          },
          "image": {
            "type": "string"
          },
          "marketCapGala": {
            "type": "string"
          },
          "marketCapIncreaseGala": {
            "type": "number"
          },
          "marketCapUsd": {
            "type": "string"
          },
          "rank": {
            "type": "number"
          },
          "symbol": {
            "type": "string"
          },
          "telegramUrl": {
            "type": "string"
          },
          "tokenName": {
            "type": "string"
          },
          "twitterUrl": {
            "type": "string"
          },
          "usdPrice": {
            "type": "string"
          },
          "vaultAddress": {
            "type": "string"
          },
          "websiteUrl": {
            "type": "string"
          }
        },
        "required": [
          "vaultAddress",
          "tokenName",
          "symbol",
          "image",
          "description",
          "websiteUrl",
          "twitterUrl",
          "telegramUrl",
          "creatorAddress",
          "marketCapGala",
          "marketCapUsd",
          "marketCapIncreaseGala",
          "galaPrice",
          "usdPrice",
          "rank"
        ],
        "type": "object"
      },
      "LoginResponseDto": {
        "properties": {
          "accessToken": {
            "example": "synthetic-access-token",
            "type": "string"
          },
          "address": {
            "example": "client|000000000000000000000000",
            "type": "string"
          },
          "expiresIn": {
            "example": 900,
            "type": "number"
          },
          "refreshExpiresIn": {
            "example": 7776000,
            "type": "number"
          },
          "refreshToken": {
            "example": "synthetic-refresh-token",
            "type": "string"
          }
        },
        "required": [
          "accessToken",
          "expiresIn",
          "address"
        ],
        "type": "object"
      },
      "ManagedTokensResponse": {
        "properties": {
          "isOverseer": {
            "description": "Whether the user has platform-wide overseer access (can moderate any token)",
            "example": false,
            "type": "boolean"
          },
          "moderatedTokens": {
            "description": "Tokens the user has moderator access to via claimed invites",
            "items": {
              "$ref": "#/components/schemas/ModeratedTokenSummary"
            },
            "type": "array"
          },
          "moderatedTokensCount": {
            "description": "Total number of moderated tokens (for listParams)",
            "example": 10,
            "type": "number"
          },
          "overseerSince": {
            "description": "ISO timestamp when the user became an overseer (if applicable)",
            "example": "2024-01-01T00:00:00Z",
            "nullable": true,
            "type": "string"
          },
          "ownedTokens": {
            "description": "Tokens the user owns (has full OWNER access)",
            "items": {
              "$ref": "#/components/schemas/OwnedTokenSummary"
            },
            "type": "array"
          },
          "ownedTokensCount": {
            "description": "Total number of owned tokens (for listParams)",
            "example": 5,
            "type": "number"
          }
        },
        "required": [
          "ownedTokens",
          "moderatedTokens",
          "isOverseer",
          "overseerSince",
          "ownedTokensCount",
          "moderatedTokensCount"
        ],
        "type": "object"
      },
      "ManagedUserProfileInfoResponseDto": {
        "properties": {
          "address": {
            "type": "string"
          },
          "badges": {
            "$ref": "#/components/schemas/UserBadgeDataResponseDto"
          },
          "bio": {
            "nullable": true,
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "fullName": {
            "nullable": true,
            "type": "string"
          },
          "profileImage": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "address",
          "fullName",
          "profileImage",
          "bio",
          "badges",
          "createdAt"
        ],
        "type": "object"
      },
      "MasterAccessStatus": {
        "enum": [
          "none",
          "preparing",
          "ready",
          "errored"
        ],
        "type": "string"
      },
      "MessageDeleteSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/DeletedMessageDataResponseDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message"
        ],
        "type": "object"
      },
      "MessageHolderTierResponseDto": {
        "properties": {
          "tier": {
            "allOf": [
              {
                "$ref": "#/components/schemas/HolderTier"
              }
            ]
          },
          "tierName": {
            "type": "string"
          }
        },
        "required": [
          "tier",
          "tierName"
        ],
        "type": "object"
      },
      "MessageItemReactionsResponseDto": {
        "properties": {
          "counts": {
            "additionalProperties": {
              "type": "number"
            },
            "type": "object"
          },
          "userReacted": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "counts"
        ],
        "type": "object"
      },
      "MessageItemResponseDto": {
        "properties": {
          "content": {
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "deletedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "flagCount": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "messageId": {
            "type": "string"
          },
          "reactions": {
            "$ref": "#/components/schemas/MessageItemReactionsResponseDto"
          },
          "tokenImage": {
            "nullable": true,
            "type": "string"
          },
          "tokenName": {
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "user": {
            "$ref": "#/components/schemas/MessageQueryUserResponseDto"
          },
          "userAddress": {
            "type": "string"
          },
          "userProfile": {
            "$ref": "#/components/schemas/MessageQueryUserResponseDto"
          }
        },
        "required": [
          "id",
          "messageId",
          "tokenName",
          "tokenImage",
          "userAddress",
          "user",
          "userProfile",
          "content",
          "createdAt",
          "updatedAt",
          "deletedAt",
          "flagCount",
          "reactions"
        ],
        "type": "object"
      },
      "MessageListDataResponseDto": {
        "properties": {
          "messages": {
            "items": {
              "$ref": "#/components/schemas/MessageItemResponseDto"
            },
            "type": "array"
          },
          "pageInfo": {
            "$ref": "#/components/schemas/MessagePageInfoResponseDto"
          }
        },
        "required": [
          "messages",
          "pageInfo"
        ],
        "type": "object"
      },
      "MessageListSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/MessageListDataResponseDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "MessageMutationSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ChatMessageResponseDto"
              },
              {
                "$ref": "#/components/schemas/MessageResponseDto"
              }
            ]
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "MessagePageInfoResponseDto": {
        "properties": {
          "endCursor": {
            "nullable": true,
            "type": "string"
          },
          "hasNextPage": {
            "type": "boolean"
          },
          "hasPreviousPage": {
            "type": "boolean"
          },
          "startCursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "hasNextPage",
          "endCursor",
          "hasPreviousPage",
          "startCursor"
        ],
        "type": "object"
      },
      "MessageQueryUserResponseDto": {
        "properties": {
          "fullName": {
            "type": "string"
          },
          "profileImage": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "fullName",
          "profileImage"
        ],
        "type": "object"
      },
      "MessageResponseDto": {
        "properties": {
          "content": {
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "messageId": {
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          },
          "user": {
            "nullable": true,
            "properties": {
              "bio": {
                "nullable": true,
                "type": "string"
              },
              "createdAt": {
                "format": "date-time",
                "type": "string"
              },
              "engagementBadge": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/EngagementBadge"
                  },
                  {
                    "enum": [
                      null
                    ],
                    "nullable": true,
                    "type": "string"
                  }
                ]
              },
              "fullName": {
                "nullable": true,
                "type": "string"
              },
              "launchBadge": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/LaunchBadge"
                  },
                  {
                    "enum": [
                      null
                    ],
                    "nullable": true,
                    "type": "string"
                  }
                ]
              },
              "profileImage": {
                "nullable": true,
                "type": "string"
              },
              "successBadge": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/SuccessBadge"
                  },
                  {
                    "enum": [
                      null
                    ],
                    "nullable": true,
                    "type": "string"
                  }
                ]
              },
              "volumeBadge": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/VolumeBadge"
                  },
                  {
                    "enum": [
                      null
                    ],
                    "nullable": true,
                    "type": "string"
                  }
                ]
              }
            },
            "required": [
              "fullName",
              "profileImage"
            ],
            "type": "object"
          },
          "userAddress": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "messageId",
          "content",
          "userAddress",
          "createdAt",
          "updatedAt"
        ],
        "type": "object"
      },
      "MessageStatsResponseDto": {
        "properties": {
          "messagesByType": {
            "additionalProperties": {
              "type": "number"
            },
            "type": "object"
          },
          "todayMessages": {
            "type": "number"
          },
          "totalMessages": {
            "type": "number"
          },
          "uniqueTokens": {
            "type": "number"
          },
          "uniqueUsers": {
            "type": "number"
          }
        },
        "required": [
          "totalMessages",
          "todayMessages",
          "uniqueUsers",
          "uniqueTokens",
          "messagesByType"
        ],
        "type": "object"
      },
      "MessageStatsSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/MessageStatsResponseDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "MessageUserProfileResponseDto": {
        "properties": {
          "bio": {
            "nullable": true,
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "engagementBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/EngagementBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "fullName": {
            "nullable": true,
            "type": "string"
          },
          "launchBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/LaunchBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "profileImage": {
            "nullable": true,
            "type": "string"
          },
          "successBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/SuccessBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "volumeBadge": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/VolumeBadge"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          }
        },
        "required": [
          "fullName",
          "profileImage"
        ],
        "type": "object"
      },
      "ModeratedTokenResponseDto": {
        "properties": {
          "claimedAt": {
            "format": "date-time",
            "type": "string"
          },
          "creatorAddress": {
            "type": "string"
          },
          "inviteScope": {
            "allOf": [
              {
                "$ref": "#/components/schemas/InviteScope"
              }
            ]
          },
          "isLive": {
            "type": "boolean"
          },
          "muxStreamStatus": {
            "nullable": true,
            "type": "string"
          },
          "role": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ModeratorRole"
              }
            ]
          },
          "tokenImage": {
            "nullable": true,
            "type": "string"
          },
          "tokenName": {
            "type": "string"
          },
          "tokenSymbol": {
            "type": "string"
          },
          "viewerCount": {
            "type": "number"
          }
        },
        "required": [
          "tokenName",
          "tokenSymbol",
          "tokenImage",
          "role",
          "inviteScope",
          "muxStreamStatus",
          "isLive",
          "viewerCount",
          "creatorAddress",
          "claimedAt"
        ],
        "type": "object"
      },
      "ModeratedTokensDataDto": {
        "properties": {
          "pageInfo": {
            "$ref": "#/components/schemas/ModeratedTokensPageInfoDto"
          },
          "tokens": {
            "items": {
              "$ref": "#/components/schemas/ModeratedTokenResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "tokens",
          "pageInfo"
        ],
        "type": "object"
      },
      "ModeratedTokensPageInfoDto": {
        "properties": {
          "endCursor": {
            "nullable": true,
            "type": "string"
          },
          "hasNextPage": {
            "type": "boolean"
          },
          "hasPreviousPage": {
            "type": "boolean"
          },
          "startCursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "hasNextPage",
          "endCursor",
          "hasPreviousPage",
          "startCursor"
        ],
        "type": "object"
      },
      "ModeratedTokensSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ModeratedTokensDataDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "ModeratedTokenSummary": {
        "properties": {
          "claimedAt": {
            "description": "When the invite was claimed",
            "example": "2024-01-15T10:30:00Z",
            "type": "string"
          },
          "creatorAddress": {
            "description": "Address of the token creator who granted access",
            "example": "eth|0x123...",
            "type": "string"
          },
          "inviteScope": {
            "description": "Scope of the moderator invite",
            "enum": [
              "TOKEN",
              "ALL_OWNER_TOKENS"
            ],
            "example": "TOKEN",
            "type": "string"
          },
          "isLive": {
            "description": "Whether a live stream is currently active",
            "example": false,
            "type": "boolean"
          },
          "muxStreamStatus": {
            "description": "Current stream status",
            "example": "IDLE",
            "nullable": true,
            "type": "string"
          },
          "role": {
            "description": "User's role for this token",
            "enum": [
              "MANAGER",
              "TECHNICAL_PRODUCER",
              "MODERATOR"
            ],
            "example": "MODERATOR",
            "type": "string"
          },
          "tokenImage": {
            "description": "Token image URL",
            "example": "https://...",
            "type": "string"
          },
          "tokenName": {
            "description": "Token name (lowercase identifier)",
            "example": "mytoken",
            "type": "string"
          },
          "tokenSymbol": {
            "description": "Token symbol",
            "example": "MTK",
            "type": "string"
          },
          "viewerCount": {
            "description": "Current viewer count",
            "example": 0,
            "type": "number"
          }
        },
        "required": [
          "tokenName",
          "tokenSymbol",
          "tokenImage",
          "isLive",
          "viewerCount",
          "role",
          "inviteScope",
          "claimedAt",
          "creatorAddress"
        ],
        "type": "object"
      },
      "ModeratorInviteClaimSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ModeratedTokenResponseDto"
              },
              {
                "$ref": "#/components/schemas/BlanketInviteClaimResponseDto"
              }
            ]
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "ModeratorInviteDeleteSuccessEnvelopeDto": {
        "properties": {
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message"
        ],
        "type": "object"
      },
      "ModeratorInviteErrorEnvelopeDto": {
        "properties": {
          "error": {
            "enum": [
              true
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          }
        },
        "required": [
          "status",
          "error",
          "message"
        ],
        "type": "object"
      },
      "ModeratorInviteListDataDto": {
        "properties": {
          "invites": {
            "items": {
              "$ref": "#/components/schemas/ModeratorInviteResponseDto"
            },
            "type": "array"
          },
          "pageInfo": {
            "$ref": "#/components/schemas/ModeratorInvitePageInfoDto"
          }
        },
        "required": [
          "invites",
          "pageInfo"
        ],
        "type": "object"
      },
      "ModeratorInviteListSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ModeratorInviteListDataDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "ModeratorInvitePageInfoDto": {
        "properties": {
          "endCursor": {
            "nullable": true,
            "type": "string"
          },
          "hasNextPage": {
            "type": "boolean"
          },
          "hasPreviousPage": {
            "type": "boolean"
          },
          "startCursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "hasNextPage",
          "endCursor",
          "hasPreviousPage",
          "startCursor"
        ],
        "type": "object"
      },
      "ModeratorInviteResponseDto": {
        "properties": {
          "claimedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "claimedBy": {
            "nullable": true,
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "expiresAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "inviteCode": {
            "maxLength": 64,
            "type": "string"
          },
          "inviteScope": {
            "allOf": [
              {
                "$ref": "#/components/schemas/InviteScope"
              }
            ]
          },
          "inviteUrl": {
            "type": "string"
          },
          "role": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ModeratorRole"
              }
            ]
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/InviteStatus"
              }
            ]
          },
          "tokenName": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "id",
          "inviteScope",
          "tokenName",
          "role",
          "inviteCode",
          "inviteUrl",
          "description",
          "status",
          "claimedBy",
          "expiresAt",
          "createdAt",
          "claimedAt"
        ],
        "type": "object"
      },
      "ModeratorInviteSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ModeratorInviteResponseDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "ModeratorRole": {
        "enum": [
          "MODERATOR",
          "TECHNICAL_PRODUCER",
          "MANAGER"
        ],
        "type": "string"
      },
      "MuxWebhookAcceptedResponseDto": {
        "properties": {
          "data": {
            "example": {},
            "type": "object"
          },
          "error": {
            "example": false,
            "type": "boolean"
          },
          "message": {
            "example": "Success",
            "type": "string"
          },
          "status": {
            "example": 201,
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "MuxWebhookPayloadDto": {
        "properties": {
          "data": {
            "example": {
              "live_stream_id": "fixture-stream-42"
            },
            "type": "object"
          },
          "id": {
            "example": "fixture-webhook-42",
            "type": "string"
          },
          "type": {
            "example": "video.live_stream.active",
            "type": "string"
          }
        },
        "required": [
          "id",
          "type",
          "data"
        ],
        "type": "object"
      },
      "NotificationErrorEnvelopeDto": {
        "properties": {
          "error": {
            "enum": [
              true
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          }
        },
        "required": [
          "status",
          "error",
          "message"
        ],
        "type": "object"
      },
      "NotificationPreferencesDto": {
        "properties": {
          "chatEnabled": {
            "type": "boolean"
          },
          "streamsEnabled": {
            "type": "boolean"
          },
          "systemEnabled": {
            "type": "boolean"
          },
          "tradesEnabled": {
            "type": "boolean"
          }
        },
        "required": [
          "tradesEnabled",
          "streamsEnabled",
          "chatEnabled",
          "systemEnabled"
        ],
        "type": "object"
      },
      "NotificationPreferencesSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/NotificationPreferencesDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "OEmbedErrorResponseDto": {
        "properties": {
          "error": {
            "enum": [
              true
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "message",
          "status",
          "error"
        ],
        "type": "object"
      },
      "OEmbedJsonResponseDto": {
        "properties": {
          "author_name": {
            "type": "string"
          },
          "provider_name": {
            "type": "string"
          },
          "provider_url": {
            "format": "uri",
            "type": "string"
          },
          "thumbnail_height": {
            "type": "number"
          },
          "thumbnail_url": {
            "format": "uri",
            "type": "string"
          },
          "thumbnail_width": {
            "type": "number"
          },
          "title": {
            "type": "string"
          },
          "type": {
            "enum": [
              "link"
            ],
            "type": "string"
          },
          "version": {
            "enum": [
              "1.0"
            ],
            "type": "string"
          }
        },
        "required": [
          "version",
          "type",
          "title",
          "author_name",
          "provider_name",
          "provider_url",
          "thumbnail_url",
          "thumbnail_width",
          "thumbnail_height"
        ],
        "type": "object"
      },
      "OverseerBanStatsResponseDto": {
        "properties": {
          "total": {
            "type": "number"
          }
        },
        "required": [
          "total"
        ],
        "type": "object"
      },
      "OverseerFlagStatsResponseDto": {
        "properties": {
          "actioned": {
            "type": "number"
          },
          "dismissed": {
            "type": "number"
          },
          "pending": {
            "type": "number"
          },
          "total": {
            "type": "number"
          }
        },
        "required": [
          "total",
          "pending",
          "actioned",
          "dismissed"
        ],
        "type": "object"
      },
      "OverseerInviteListDataResponseDto": {
        "properties": {
          "invites": {
            "items": {
              "$ref": "#/components/schemas/OverseerInviteResponseDto"
            },
            "type": "array"
          },
          "pageInfo": {
            "$ref": "#/components/schemas/OverseerInvitePageInfoResponseDto"
          }
        },
        "required": [
          "invites",
          "pageInfo"
        ],
        "type": "object"
      },
      "OverseerInvitePageInfoResponseDto": {
        "properties": {
          "endCursor": {
            "nullable": true,
            "type": "string"
          },
          "hasNextPage": {
            "type": "boolean"
          },
          "hasPreviousPage": {
            "type": "boolean"
          },
          "startCursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "hasNextPage",
          "endCursor",
          "hasPreviousPage",
          "startCursor"
        ],
        "type": "object"
      },
      "OverseerInviteResponseDto": {
        "properties": {
          "claimedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "claimedBy": {
            "nullable": true,
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "description": {
            "nullable": true,
            "type": "string"
          },
          "expiresAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "inviteCode": {
            "maxLength": 64,
            "type": "string"
          },
          "invitedBy": {
            "type": "string"
          },
          "inviteUrl": {
            "format": "uri",
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/OverseerInviteResponseStatus"
              }
            ]
          }
        },
        "required": [
          "id",
          "inviteCode",
          "inviteUrl",
          "description",
          "status",
          "invitedBy",
          "claimedBy",
          "expiresAt",
          "createdAt",
          "claimedAt"
        ],
        "type": "object"
      },
      "OverseerInviteResponseStatus": {
        "enum": [
          "PENDING",
          "ACCEPTED",
          "REVOKED",
          "EXPIRED"
        ],
        "type": "string"
      },
      "OverseerInviteStatsResponseDto": {
        "properties": {
          "claimed": {
            "type": "number"
          },
          "pending": {
            "type": "number"
          },
          "revoked": {
            "type": "number"
          },
          "total": {
            "type": "number"
          }
        },
        "required": [
          "total",
          "pending",
          "claimed",
          "revoked"
        ],
        "type": "object"
      },
      "OverseerListDataResponseDto": {
        "properties": {
          "overseers": {
            "items": {
              "$ref": "#/components/schemas/OverseerResponseDto"
            },
            "type": "array"
          },
          "pageInfo": {
            "$ref": "#/components/schemas/OverseerPageInfoResponseDto"
          }
        },
        "required": [
          "overseers",
          "pageInfo"
        ],
        "type": "object"
      },
      "OverseerMeResponseDto": {
        "properties": {
          "isOverseer": {
            "type": "boolean"
          },
          "overseer": {
            "nullable": true,
            "properties": {
              "createdAt": {
                "format": "date-time",
                "type": "string"
              },
              "id": {
                "type": "number"
              },
              "revokedAt": {
                "format": "date-time",
                "nullable": true,
                "type": "string"
              },
              "revokedBy": {
                "nullable": true,
                "type": "string"
              },
              "status": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OverseerStatus"
                  }
                ]
              },
              "user": {
                "$ref": "#/components/schemas/OverseerProfileResponseDto"
              },
              "userAddress": {
                "type": "string"
              }
            },
            "required": [
              "id",
              "userAddress",
              "user",
              "status",
              "createdAt",
              "revokedAt",
              "revokedBy"
            ],
            "type": "object"
          }
        },
        "required": [
          "isOverseer",
          "overseer"
        ],
        "type": "object"
      },
      "OverseerPageInfoResponseDto": {
        "properties": {
          "endCursor": {
            "nullable": true,
            "type": "string"
          },
          "hasNextPage": {
            "type": "boolean"
          },
          "hasPreviousPage": {
            "type": "boolean"
          },
          "startCursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "hasNextPage",
          "endCursor",
          "hasPreviousPage",
          "startCursor"
        ],
        "type": "object"
      },
      "OverseerProfileResponseDto": {
        "properties": {
          "address": {
            "type": "string"
          },
          "fullName": {
            "nullable": true,
            "type": "string"
          },
          "profileImage": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "address",
          "fullName",
          "profileImage"
        ],
        "type": "object"
      },
      "OverseerResponseDto": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "revokedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "revokedBy": {
            "nullable": true,
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/OverseerStatus"
              }
            ]
          },
          "user": {
            "$ref": "#/components/schemas/OverseerProfileResponseDto"
          },
          "userAddress": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "userAddress",
          "user",
          "status",
          "createdAt",
          "revokedAt",
          "revokedBy"
        ],
        "type": "object"
      },
      "OverseerStatus": {
        "enum": [
          "ACTIVE",
          "REVOKED"
        ],
        "type": "string"
      },
      "OverseerSummaryResponseDto": {
        "properties": {
          "activeStreams": {
            "type": "number"
          },
          "graduatedPools": {
            "description": "Pools that have graduated (isFinalized)",
            "type": "number"
          },
          "pendingFlags": {
            "type": "number"
          },
          "totalPools": {
            "type": "number"
          },
          "totalViewers": {
            "type": "number"
          }
        },
        "required": [
          "activeStreams",
          "totalViewers",
          "pendingFlags",
          "totalPools",
          "graduatedPools"
        ],
        "type": "object"
      },
      "OverseerTokenBanStatsResponseDto": {
        "properties": {
          "total": {
            "type": "number"
          }
        },
        "required": [
          "total"
        ],
        "type": "object"
      },
      "OverseerUserStatsResponseDto": {
        "properties": {
          "bannedUsers": {
            "type": "number"
          },
          "flaggedUsers": {
            "type": "number"
          },
          "totalUsers": {
            "type": "number"
          }
        },
        "required": [
          "totalUsers",
          "flaggedUsers",
          "bannedUsers"
        ],
        "type": "object"
      },
      "OwnedTokenSummary": {
        "properties": {
          "isLive": {
            "description": "Whether a live stream is currently active",
            "example": false,
            "type": "boolean"
          },
          "muxStreamStatus": {
            "description": "Current stream status",
            "example": "IDLE",
            "nullable": true,
            "type": "string"
          },
          "tokenImage": {
            "description": "Token image URL",
            "example": "https://...",
            "type": "string"
          },
          "tokenName": {
            "description": "Token name (lowercase identifier)",
            "example": "mytoken",
            "type": "string"
          },
          "tokenSymbol": {
            "description": "Token symbol",
            "example": "MTK",
            "type": "string"
          },
          "viewerCount": {
            "description": "Current viewer count",
            "example": 0,
            "type": "number"
          }
        },
        "required": [
          "tokenName",
          "tokenSymbol",
          "tokenImage",
          "isLive",
          "viewerCount"
        ],
        "type": "object"
      },
      "Permission": {
        "enum": [
          "MANAGE_COMMUNITY",
          "MANAGE_STREAM",
          "MANAGE_SETTINGS",
          "MANAGE_RECORDINGS",
          "VIEW_ANALYTICS"
        ],
        "type": "string"
      },
      "PermissionDescriptionResponseDto": {
        "properties": {
          "description": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "name": {
            "enum": [
              "MANAGE_COMMUNITY",
              "MANAGE_STREAM",
              "MANAGE_SETTINGS",
              "MANAGE_RECORDINGS",
              "VIEW_ANALYTICS"
            ],
            "type": "string"
          }
        },
        "required": [
          "name",
          "displayName",
          "description"
        ],
        "type": "object"
      },
      "PinMessageSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/PinnedMessageResponseDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "PinnedMessageResponseDto": {
        "properties": {
          "content": {
            "type": "string"
          },
          "holderTier": {
            "$ref": "#/components/schemas/MessageHolderTierResponseDto"
          },
          "messageId": {
            "type": "string"
          },
          "pinnedAt": {
            "format": "date-time",
            "type": "string"
          },
          "pinnedBy": {
            "type": "string"
          },
          "user": {
            "$ref": "#/components/schemas/MessageUserProfileResponseDto"
          },
          "userAddress": {
            "type": "string"
          }
        },
        "required": [
          "messageId",
          "content",
          "userAddress",
          "pinnedBy",
          "pinnedAt"
        ],
        "type": "object"
      },
      "PinnedMessageSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "nullable": true,
            "properties": {
              "content": {
                "type": "string"
              },
              "holderTier": {
                "$ref": "#/components/schemas/MessageHolderTierResponseDto"
              },
              "messageId": {
                "type": "string"
              },
              "pinnedAt": {
                "format": "date-time",
                "type": "string"
              },
              "pinnedBy": {
                "type": "string"
              },
              "user": {
                "$ref": "#/components/schemas/MessageUserProfileResponseDto"
              },
              "userAddress": {
                "type": "string"
              }
            },
            "required": [
              "messageId",
              "content",
              "userAddress",
              "pinnedBy",
              "pinnedAt"
            ],
            "type": "object"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "PlatformConfigResponseDto": {
        "properties": {
          "aiModerationAvailable": {
            "example": true,
            "type": "boolean"
          },
          "aiModerationEnabled": {
            "example": false,
            "type": "boolean"
          },
          "chatEnabled": {
            "example": true,
            "type": "boolean"
          },
          "commentsEnabled": {
            "example": true,
            "type": "boolean"
          },
          "streamingEnabled": {
            "example": true,
            "type": "boolean"
          },
          "webhooksEnabled": {
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "streamingEnabled",
          "chatEnabled",
          "commentsEnabled",
          "webhooksEnabled",
          "aiModerationEnabled",
          "aiModerationAvailable"
        ],
        "type": "object"
      },
      "PlatformConfigUpdateResponseDto": {
        "properties": {
          "aiModerationEnabled": {
            "example": false,
            "type": "boolean"
          },
          "chatEnabled": {
            "example": true,
            "type": "boolean"
          },
          "commentsEnabled": {
            "example": true,
            "type": "boolean"
          },
          "streamingEnabled": {
            "example": true,
            "type": "boolean"
          },
          "webhooksEnabled": {
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "streamingEnabled",
          "chatEnabled",
          "commentsEnabled",
          "webhooksEnabled",
          "aiModerationEnabled"
        ],
        "type": "object"
      },
      "PlatformStatsDto": {
        "properties": {
          "galaVolume1h": {
            "description": "GALA trading volume in the last hour.",
            "type": "number"
          },
          "galaVolume24h": {
            "description": "GALA trading volume in the last 24 hours.",
            "type": "number"
          },
          "galaVolume7d": {
            "description": "GALA trading volume in the last 7 days.",
            "type": "number"
          },
          "timestamp": {
            "description": "Timestamp when the statistics were calculated.",
            "format": "date-time",
            "type": "string"
          },
          "totalTokens": {
            "description": "Total number of tokens on the platform.",
            "type": "number"
          }
        },
        "required": [
          "galaVolume1h",
          "galaVolume24h",
          "galaVolume7d",
          "totalTokens",
          "timestamp"
        ],
        "type": "object"
      },
      "ProfileLaunchesResponseDto": {
        "properties": {
          "launches": {
            "items": {
              "$ref": "#/components/schemas/ProfileLaunchItemResponseDto"
            },
            "type": "array"
          },
          "pageInfo": {
            "$ref": "#/components/schemas/TokenPageInfoResponseDto"
          }
        },
        "required": [
          "launches",
          "pageInfo"
        ],
        "type": "object"
      },
      "ProfileLaunchItemResponseDto": {
        "properties": {
          "bondingCurvePercentage": {
            "type": "number"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "currentViewerCount": {
            "type": "number"
          },
          "image": {
            "type": "string"
          },
          "isFinalized": {
            "type": "boolean"
          },
          "muxStreamStatus": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/StreamStatus"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "string"
              }
            ]
          },
          "symbol": {
            "type": "string"
          },
          "tokenName": {
            "type": "string"
          },
          "vaultAddress": {
            "type": "string"
          },
          "volume": {
            "type": "number"
          },
          "volumeSum": {
            "type": "number"
          }
        },
        "required": [
          "tokenName",
          "symbol",
          "image",
          "isFinalized",
          "bondingCurvePercentage",
          "volume",
          "volumeSum",
          "createdAt",
          "muxStreamStatus",
          "currentViewerCount",
          "vaultAddress"
        ],
        "type": "object"
      },
      "PublicModeratorInviteInfoDto": {
        "properties": {
          "description": {
            "nullable": true,
            "type": "string"
          },
          "expiresAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "invitedBy": {
            "type": "string"
          },
          "inviteScope": {
            "allOf": [
              {
                "$ref": "#/components/schemas/InviteScope"
              }
            ]
          },
          "role": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ModeratorRole"
              }
            ]
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/InviteStatus"
              }
            ]
          },
          "tokenImage": {
            "nullable": true,
            "type": "string"
          },
          "tokenName": {
            "nullable": true,
            "type": "string"
          },
          "tokenSymbol": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "inviteScope",
          "tokenName",
          "tokenSymbol",
          "tokenImage",
          "role",
          "description",
          "status",
          "expiresAt",
          "invitedBy"
        ],
        "type": "object"
      },
      "PublicModeratorInviteSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/PublicModeratorInviteInfoDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "PublicOverseerInviteInfoResponseDto": {
        "properties": {
          "description": {
            "nullable": true,
            "type": "string"
          },
          "expiresAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "invitedBy": {
            "type": "string"
          },
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/InviteStatus"
              }
            ]
          }
        },
        "required": [
          "description",
          "status",
          "expiresAt",
          "invitedBy"
        ],
        "type": "object"
      },
      "PublicUserProfileResponseDto": {
        "properties": {
          "address": {
            "type": "string"
          },
          "bio": {
            "nullable": true,
            "type": "string"
          },
          "engagementBadge": {
            "items": {
              "$ref": "#/components/schemas/UserBadgeStatusResponseDto"
            },
            "type": "array"
          },
          "fullName": {
            "nullable": true,
            "type": "string"
          },
          "isLiveStreaming": {
            "type": "boolean"
          },
          "launchBadge": {
            "items": {
              "$ref": "#/components/schemas/UserBadgeStatusResponseDto"
            },
            "type": "array"
          },
          "liveStreamToken": {
            "nullable": true,
            "type": "string"
          },
          "profileImage": {
            "nullable": true,
            "type": "string"
          },
          "stats": {
            "$ref": "#/components/schemas/UserProfileStatsResponseDto"
          },
          "successBadge": {
            "items": {
              "$ref": "#/components/schemas/UserBadgeStatusResponseDto"
            },
            "type": "array"
          },
          "volumeBadge": {
            "items": {
              "$ref": "#/components/schemas/UserBadgeStatusResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "address",
          "fullName",
          "profileImage",
          "bio",
          "stats",
          "launchBadge",
          "successBadge",
          "volumeBadge",
          "engagementBadge",
          "isLiveStreaming",
          "liveStreamToken"
        ],
        "type": "object"
      },
      "ReactionsByTypeResponseDto": {
        "properties": {
          "count": {
            "type": "number"
          },
          "reactionType": {
            "enum": [
              "heart",
              "fire",
              "laugh",
              "wow",
              "thumbs_up"
            ],
            "type": "string"
          },
          "userReacted": {
            "type": "boolean"
          },
          "users": {
            "items": {
              "$ref": "#/components/schemas/ReactionUserInfoResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "reactionType",
          "count",
          "users",
          "userReacted"
        ],
        "type": "object"
      },
      "ReactionUserInfoResponseDto": {
        "properties": {
          "fullName": {
            "type": "string"
          },
          "profileImage": {
            "type": "string"
          },
          "userAddress": {
            "type": "string"
          }
        },
        "required": [
          "userAddress"
        ],
        "type": "object"
      },
      "RecordingAnimatedAssetUrlsDto": {
        "properties": {
          "gif": {
            "type": "string"
          },
          "webp": {
            "type": "string"
          }
        },
        "required": [
          "gif",
          "webp"
        ],
        "type": "object"
      },
      "RecordingAssetUrlGroupDto": {
        "properties": {
          "default": {
            "type": "string"
          },
          "poster": {
            "type": "string"
          },
          "ribbon": {
            "type": "string"
          },
          "webp": {
            "type": "string"
          }
        },
        "required": [
          "default",
          "webp",
          "ribbon",
          "poster"
        ],
        "type": "object"
      },
      "RecordingAssetUrlsDto": {
        "properties": {
          "animated": {
            "$ref": "#/components/schemas/RecordingAnimatedAssetUrlsDto"
          },
          "storyboard": {
            "$ref": "#/components/schemas/RecordingStoryboardAssetUrlsDto"
          },
          "stream": {
            "type": "string"
          },
          "thumbnails": {
            "$ref": "#/components/schemas/RecordingAssetUrlGroupDto"
          }
        },
        "required": [
          "stream",
          "thumbnails",
          "animated",
          "storyboard"
        ],
        "type": "object"
      },
      "RecordingDeleteSuccessEnvelopeDto": {
        "properties": {
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message"
        ],
        "type": "object"
      },
      "RecordingDownloadResponseDto": {
        "properties": {
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/RecordingDownloadStatus"
              }
            ]
          },
          "url": {
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "status"
        ],
        "type": "object"
      },
      "RecordingDownloadStatus": {
        "enum": [
          "none",
          "preparing",
          "ready",
          "errored"
        ],
        "type": "string"
      },
      "RecordingDownloadSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/RecordingDownloadResponseDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "RecordingInfoResponseDto": {
        "properties": {
          "aspectRatio": {
            "type": "string"
          },
          "assets": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RecordingAssetUrlsDto"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "object"
              }
            ]
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "duration": {
            "type": "number"
          },
          "id": {
            "type": "string"
          },
          "masterAccess": {
            "$ref": "#/components/schemas/RecordingMasterAccessDto"
          },
          "playbackId": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "playbackId",
          "status",
          "duration",
          "createdAt",
          "masterAccess"
        ],
        "type": "object"
      },
      "RecordingListSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "items": {
              "$ref": "#/components/schemas/RecordingInfoResponseDto"
            },
            "type": "array"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "RecordingMasterAccessDto": {
        "properties": {
          "status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MasterAccessStatus"
              }
            ]
          },
          "url": {
            "format": "uri",
            "type": "string"
          }
        },
        "required": [
          "status"
        ],
        "type": "object"
      },
      "RecordingStoryboardAssetUrlsDto": {
        "properties": {
          "jpg": {
            "type": "string"
          },
          "json": {
            "type": "string"
          },
          "png": {
            "type": "string"
          },
          "vtt": {
            "type": "string"
          },
          "webp": {
            "type": "string"
          }
        },
        "required": [
          "vtt",
          "json",
          "jpg",
          "png",
          "webp"
        ],
        "type": "object"
      },
      "ReferralCodeDto": {
        "properties": {
          "code": {
            "description": "Referral code to share.",
            "type": "string"
          },
          "username": {
            "description": "Gala Connect username, when available.",
            "type": "string"
          }
        },
        "required": [
          "code"
        ],
        "type": "object"
      },
      "ReferralCodeResponseDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ReferralCodeDto"
          },
          "error": {
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message"
        ],
        "type": "object"
      },
      "RefreshResponseDto": {
        "properties": {
          "accessToken": {
            "example": "synthetic-access-token",
            "type": "string"
          },
          "address": {
            "example": "client|000000000000000000000000",
            "type": "string"
          },
          "expiresIn": {
            "example": 900,
            "type": "number"
          },
          "refreshExpiresIn": {
            "example": 31536000,
            "type": "number"
          },
          "refreshToken": {
            "example": "synthetic-refresh-token",
            "type": "string"
          }
        },
        "required": [
          "accessToken",
          "expiresIn",
          "address"
        ],
        "type": "object"
      },
      "RegisterDeviceDto": {
        "properties": {
          "deviceId": {
            "maxLength": 255,
            "type": "string"
          },
          "platform": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DevicePlatform"
              }
            ]
          },
          "token": {
            "maxLength": 512,
            "type": "string"
          }
        },
        "required": [
          "token",
          "platform"
        ],
        "type": "object"
      },
      "RegisterDeviceSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/RegisteredDeviceDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "RegisteredDeviceDto": {
        "properties": {
          "registered": {
            "enum": [
              true
            ],
            "type": "boolean"
          }
        },
        "required": [
          "registered"
        ],
        "type": "object"
      },
      "RegisterPoolDto": {
        "properties": {
          "amount": {
            "maxLength": 50,
            "type": "string"
          },
          "blockNumber": {
            "type": "number"
          },
          "description": {
            "maxLength": 1000,
            "type": "string"
          },
          "facebookUrl": {
            "type": "string"
          },
          "image": {
            "format": "uri",
            "maxLength": 2048,
            "type": "string"
          },
          "initialBuyQuantity": {
            "maxLength": 50,
            "type": "string"
          },
          "instagramUrl": {
            "type": "string"
          },
          "outputAmount": {
            "maxLength": 50,
            "type": "string"
          },
          "redditUrl": {
            "type": "string"
          },
          "reverseBondingCurveConfiguration": {
            "$ref": "#/components/schemas/ReverseBondingCurveConfigurationDto"
          },
          "saleStartTime": {
            "minimum": 0,
            "type": "number"
          },
          "symbol": {
            "maxLength": 10,
            "type": "string"
          },
          "telegramUrl": {
            "type": "string"
          },
          "tiktokUrl": {
            "type": "string"
          },
          "tokenName": {
            "maxLength": 50,
            "type": "string"
          },
          "twitterUrl": {
            "type": "string"
          },
          "txnId": {
            "maxLength": 255,
            "type": "string"
          },
          "urls": {
            "properties": {
              "facebookUrl": {
                "type": "string"
              },
              "instagramUrl": {
                "type": "string"
              },
              "redditUrl": {
                "type": "string"
              },
              "telegramUrl": {
                "type": "string"
              },
              "tiktokUrl": {
                "type": "string"
              },
              "twitterUrl": {
                "type": "string"
              },
              "websiteUrl": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "vaultAddress": {
            "maxLength": 255,
            "type": "string"
          },
          "websiteUrl": {
            "type": "string"
          }
        },
        "required": [
          "txnId",
          "image",
          "tokenName",
          "symbol",
          "description",
          "amount",
          "blockNumber",
          "urls",
          "initialBuyQuantity",
          "vaultAddress"
        ],
        "type": "object"
      },
      "RemoveReactionSuccessEnvelopeDto": {
        "properties": {
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message"
        ],
        "type": "object"
      },
      "ReverseBondingCurveConfigurationDto": {
        "properties": {
          "maxFeePortion": {
            "maxLength": 10,
            "type": "string"
          },
          "minFeePortion": {
            "maxLength": 10,
            "type": "string"
          }
        },
        "required": [
          "minFeePortion",
          "maxFeePortion"
        ],
        "type": "object"
      },
      "RoleInfo": {
        "properties": {
          "description": {
            "description": "Human-readable description of the role",
            "example": "Full moderator + technical producer + recordings management",
            "type": "string"
          },
          "level": {
            "description": "Hierarchy level (higher = more privileges). MODERATOR=0, TECHNICAL_PRODUCER=1, MANAGER=2, OWNER=3",
            "example": 2,
            "type": "number"
          },
          "name": {
            "description": "Role name identifier",
            "enum": [
              "OWNER",
              "MANAGER",
              "TECHNICAL_PRODUCER",
              "MODERATOR"
            ],
            "example": "MANAGER",
            "type": "string"
          },
          "permissions": {
            "description": "List of permissions this role has",
            "example": [
              "MANAGE_COMMENTS",
              "MANAGE_CHAT",
              "BAN_USERS"
            ],
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "name",
          "description",
          "level",
          "permissions"
        ],
        "type": "object"
      },
      "RolePermissionPresetResponseDto": {
        "properties": {
          "permissions": {
            "items": {
              "$ref": "#/components/schemas/Permission"
            },
            "type": "array"
          },
          "role": {
            "enum": [
              "MODERATOR",
              "TECHNICAL_PRODUCER",
              "MANAGER"
            ],
            "type": "string"
          }
        },
        "required": [
          "role",
          "permissions"
        ],
        "type": "object"
      },
      "SaleDetailsResponseDto": {
        "properties": {
          "maxSupply": {
            "type": "string"
          },
          "nativeTokenQuantity": {
            "type": "string"
          },
          "saleStartTime": {
            "type": "number"
          },
          "saleStatus": {
            "type": "string"
          },
          "sellingTokenQuantity": {
            "type": "string"
          },
          "timeUntilLaunch": {
            "type": "number"
          }
        },
        "required": [
          "maxSupply",
          "sellingTokenQuantity",
          "nativeTokenQuantity",
          "saleStatus"
        ],
        "type": "object"
      },
      "SendUnifiedMessageDto": {
        "properties": {
          "content": {
            "maxLength": 2000,
            "type": "string"
          },
          "tokenName": {
            "maxLength": 25,
            "type": "string"
          },
          "type": {
            "enum": [
              "COMMENT",
              "CHAT_MESSAGE"
            ],
            "type": "string"
          }
        },
        "required": [
          "tokenName",
          "content"
        ],
        "type": "object"
      },
      "SessionResponseDto": {
        "properties": {
          "address": {
            "example": "client|000000000000000000000000",
            "type": "string"
          },
          "expiresAt": {
            "example": "2026-08-01T00:15:00.000Z",
            "format": "date-time",
            "type": "string"
          },
          "issuedAt": {
            "example": "2026-08-01T00:00:00.000Z",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "address",
          "issuedAt",
          "expiresAt"
        ],
        "type": "object"
      },
      "SetChatStatusRequestDto": {
        "properties": {
          "enabled": {
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object"
      },
      "SetSlowModeRequestDto": {
        "properties": {
          "slowModeSeconds": {
            "example": 30,
            "maximum": 600,
            "minimum": 0,
            "type": "number"
          }
        },
        "required": [
          "slowModeSeconds"
        ],
        "type": "object"
      },
      "SimulatedMessageDataDto": {
        "properties": {
          "tokenName": {
            "example": "fixture-token",
            "type": "string"
          }
        },
        "required": [
          "tokenName"
        ],
        "type": "object"
      },
      "SimulatedMessageResponseDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/SimulatedMessageDataDto"
          },
          "error": {
            "example": false,
            "type": "boolean"
          },
          "message": {
            "example": "Success",
            "type": "string"
          },
          "status": {
            "example": 201,
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "SimulatedStreamStatusDataDto": {
        "properties": {
          "previousStatus": {
            "example": "IDLE",
            "type": "string"
          },
          "status": {
            "enum": [
              "ACTIVE",
              "IDLE",
              "DISABLED"
            ],
            "example": "ACTIVE",
            "type": "string"
          },
          "tokenName": {
            "example": "fixture-token",
            "type": "string"
          }
        },
        "required": [
          "tokenName",
          "status",
          "previousStatus"
        ],
        "type": "object"
      },
      "SimulatedWebhookResponseDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/SimulatedStreamStatusDataDto"
          },
          "error": {
            "example": false,
            "type": "boolean"
          },
          "message": {
            "example": "Success",
            "type": "string"
          },
          "status": {
            "example": 201,
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "SimulcastTargetResponseDto": {
        "properties": {
          "id": {
            "type": "string"
          },
          "passthrough": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "url",
          "status"
        ],
        "type": "object"
      },
      "StreamControlStatusResponseDto": {
        "properties": {
          "enabled": {
            "type": "boolean"
          },
          "tokenName": {
            "type": "string"
          }
        },
        "required": [
          "enabled",
          "tokenName"
        ],
        "type": "object"
      },
      "StreamCredentialsResponseDto": {
        "properties": {
          "playbackId": {
            "type": "string"
          },
          "rtmpsUrl": {
            "type": "string"
          },
          "srtPassphrase": {
            "type": "string"
          },
          "srtUrl": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "streamKey": {
            "type": "string"
          }
        },
        "required": [
          "streamKey",
          "rtmpsUrl",
          "srtUrl",
          "srtPassphrase",
          "playbackId",
          "status"
        ],
        "type": "object"
      },
      "StreamStatus": {
        "enum": [
          "ACTIVE",
          "IDLE",
          "DISABLED"
        ],
        "type": "string"
      },
      "SuccessBadge": {
        "enum": [
          "250k",
          "1M",
          "10M+"
        ],
        "type": "string"
      },
      "TokenBadgeResponseDto": {
        "properties": {
          "badgeName": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          }
        },
        "required": [
          "badgeName",
          "isActive"
        ],
        "type": "object"
      },
      "TokenBadgesResponseDto": {
        "properties": {
          "engagement": {
            "items": {
              "$ref": "#/components/schemas/TokenBadgeResponseDto"
            },
            "type": "array"
          },
          "volume": {
            "items": {
              "$ref": "#/components/schemas/TokenBadgeResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "volume",
          "engagement"
        ],
        "type": "object"
      },
      "TokenBanListResponseDto": {
        "properties": {
          "bans": {
            "items": {
              "$ref": "#/components/schemas/TokenBanResponseDto"
            },
            "type": "array"
          },
          "pageInfo": {
            "$ref": "#/components/schemas/TokenBanPageInfoResponseDto"
          }
        },
        "required": [
          "bans",
          "pageInfo"
        ],
        "type": "object"
      },
      "TokenBanPageInfoResponseDto": {
        "properties": {
          "endCursor": {
            "nullable": true,
            "type": "string"
          },
          "hasNextPage": {
            "type": "boolean"
          },
          "hasPreviousPage": {
            "type": "boolean"
          },
          "startCursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "hasNextPage",
          "endCursor",
          "hasPreviousPage",
          "startCursor"
        ],
        "type": "object"
      },
      "TokenBanPoolResponseDto": {
        "properties": {
          "creatorAddress": {
            "type": "string"
          },
          "image": {
            "nullable": true,
            "type": "string"
          },
          "symbol": {
            "type": "string"
          }
        },
        "required": [
          "symbol",
          "image",
          "creatorAddress"
        ],
        "type": "object"
      },
      "TokenBanResponseDto": {
        "properties": {
          "bannedBy": {
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "pool": {
            "$ref": "#/components/schemas/TokenBanPoolResponseDto"
          },
          "reason": {
            "nullable": true,
            "type": "string"
          },
          "tokenName": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "tokenName",
          "reason",
          "bannedBy",
          "createdAt"
        ],
        "type": "object"
      },
      "TokenDetailsResponseDto": {
        "properties": {
          "pageInfo": {
            "$ref": "#/components/schemas/TokenPageInfoResponseDto"
          },
          "tokens": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TokenPoolResponseDto"
              },
              {
                "items": {
                  "$ref": "#/components/schemas/TokenPoolResponseDto"
                },
                "type": "array"
              }
            ]
          }
        },
        "required": [
          "tokens",
          "pageInfo"
        ],
        "type": "object"
      },
      "TokenListResponseDto": {
        "properties": {
          "pageInfo": {
            "$ref": "#/components/schemas/TokenPageInfoResponseDto"
          },
          "tokens": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/TokenPoolResponseDto"
              },
              {
                "items": {
                  "$ref": "#/components/schemas/TokenPoolResponseDto"
                },
                "type": "array"
              }
            ]
          }
        },
        "required": [
          "tokens",
          "pageInfo"
        ],
        "type": "object"
      },
      "TokenPageInfoResponseDto": {
        "properties": {
          "endCursor": {
            "nullable": true,
            "type": "string"
          },
          "hasNextPage": {
            "type": "boolean"
          },
          "hasPreviousPage": {
            "type": "boolean"
          },
          "startCursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "hasNextPage",
          "endCursor",
          "hasPreviousPage",
          "startCursor"
        ],
        "type": "object"
      },
      "TokenPoolRecordResponseDto": {
        "properties": {
          "additionalKey": {
            "nullable": true,
            "type": "string"
          },
          "blockNumber": {
            "type": "number"
          },
          "bondingCurvePercentage": {
            "type": "number"
          },
          "category": {
            "nullable": true,
            "type": "string"
          },
          "chatStatus": {
            "type": "string"
          },
          "collection": {
            "nullable": true,
            "type": "string"
          },
          "creatorAddress": {
            "type": "string"
          },
          "currentViewerCount": {
            "type": "number"
          },
          "description": {
            "type": "string"
          },
          "dexSynced": {
            "type": "boolean"
          },
          "engagementBadge": {
            "nullable": true,
            "type": "string"
          },
          "facebookUrl": {
            "type": "string"
          },
          "image": {
            "type": "string"
          },
          "initialBuyAmount": {
            "type": "number"
          },
          "instagramUrl": {
            "type": "string"
          },
          "isFinalized": {
            "type": "number"
          },
          "lastStreamedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "muxPlaybackId": {
            "nullable": true,
            "type": "string"
          },
          "muxStreamAspectRatio": {
            "nullable": true,
            "type": "string"
          },
          "muxStreamId": {
            "nullable": true,
            "type": "string"
          },
          "muxStreamStatus": {
            "nullable": true,
            "type": "string"
          },
          "nextLiveStreamAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "peakViewerCount": {
            "type": "number"
          },
          "poolHash": {
            "type": "string"
          },
          "recordingsCount": {
            "type": "number"
          },
          "redditUrl": {
            "type": "string"
          },
          "reverseBondingCurveMaxFeePortion": {
            "nullable": true,
            "type": "string"
          },
          "reverseBondingCurveMinFeePortion": {
            "nullable": true,
            "type": "string"
          },
          "saleStartTime": {
            "nullable": true,
            "type": "number"
          },
          "slowModeSeconds": {
            "type": "number"
          },
          "streamControlStatus": {
            "type": "string"
          },
          "streamLanguage": {
            "type": "string"
          },
          "streamStartedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "telegramUrl": {
            "type": "string"
          },
          "tiktokUrl": {
            "type": "string"
          },
          "tokenName": {
            "type": "string"
          },
          "totalSecondsStreamed": {
            "type": "number"
          },
          "twitterUrl": {
            "type": "string"
          },
          "type": {
            "nullable": true,
            "type": "string"
          },
          "vaultAddress": {
            "type": "string"
          },
          "volume": {
            "type": "number"
          },
          "volume1h": {
            "type": "number"
          },
          "volumeBadge": {
            "nullable": true,
            "type": "string"
          },
          "volumeSum": {
            "type": "number"
          },
          "websiteUrl": {
            "type": "string"
          }
        },
        "required": [
          "tokenName",
          "image",
          "symbol",
          "description",
          "websiteUrl",
          "telegramUrl",
          "twitterUrl",
          "instagramUrl",
          "facebookUrl",
          "redditUrl",
          "tiktokUrl",
          "initialBuyAmount",
          "vaultAddress",
          "volume",
          "volume1h",
          "bondingCurvePercentage",
          "creatorAddress",
          "blockNumber",
          "reverseBondingCurveMinFeePortion",
          "reverseBondingCurveMaxFeePortion",
          "isFinalized",
          "collection",
          "category",
          "type",
          "additionalKey",
          "volumeSum",
          "dexSynced",
          "muxStreamId",
          "muxPlaybackId",
          "muxStreamStatus",
          "muxStreamAspectRatio",
          "currentViewerCount",
          "peakViewerCount",
          "streamStartedAt",
          "lastStreamedAt",
          "chatStatus",
          "streamControlStatus",
          "nextLiveStreamAt",
          "streamLanguage",
          "recordingsCount",
          "totalSecondsStreamed",
          "slowModeSeconds"
        ],
        "type": "object"
      },
      "TokenPoolResponseDto": {
        "properties": {
          "additionalKey": {
            "nullable": true,
            "type": "string"
          },
          "assets": {
            "nullable": true,
            "type": "object"
          },
          "badges": {
            "$ref": "#/components/schemas/TokenBadgesResponseDto"
          },
          "bondingCurvePercentage": {
            "type": "number"
          },
          "category": {
            "nullable": true,
            "type": "string"
          },
          "circulatingSupply": {
            "type": "string"
          },
          "collection": {
            "nullable": true,
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "creatorAddress": {
            "type": "string"
          },
          "currentViewerCount": {
            "type": "number"
          },
          "deltaSupply": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "engagementBadge": {
            "nullable": true,
            "type": "string"
          },
          "facebookUrl": {
            "type": "string"
          },
          "galaInPool": {
            "type": "string"
          },
          "galaPrice": {
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "image": {
            "type": "string"
          },
          "instagramUrl": {
            "type": "string"
          },
          "isFinalized": {
            "type": "number"
          },
          "isGraduated": {
            "type": "boolean"
          },
          "lastStreamedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "marketCapGala": {
            "type": "string"
          },
          "marketCapUsd": {
            "type": "string"
          },
          "muxPlaybackId": {
            "nullable": true,
            "type": "string"
          },
          "muxStreamAspectRatio": {
            "nullable": true,
            "type": "string"
          },
          "muxStreamId": {
            "nullable": true,
            "type": "string"
          },
          "muxStreamStatus": {
            "nullable": true,
            "type": "string"
          },
          "nextLiveStreamAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "peakViewerCount": {
            "type": "number"
          },
          "recordingsCount": {
            "type": "number"
          },
          "redditUrl": {
            "type": "string"
          },
          "reverseBondingCurveMaxFeePortion": {
            "nullable": true,
            "type": "string"
          },
          "reverseBondingCurveMinFeePortion": {
            "nullable": true,
            "type": "string"
          },
          "saleStartTime": {
            "type": "number"
          },
          "streamLanguage": {
            "nullable": true,
            "type": "string"
          },
          "streamStartedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "telegramUrl": {
            "type": "string"
          },
          "tiktokUrl": {
            "type": "string"
          },
          "tokenName": {
            "type": "string"
          },
          "totalSecondsStreamed": {
            "type": "number"
          },
          "twitterUrl": {
            "type": "string"
          },
          "type": {
            "nullable": true,
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          },
          "usdPrice": {
            "type": "string"
          },
          "vaultAddress": {
            "type": "string"
          },
          "volume": {
            "type": "string"
          },
          "volume1h": {
            "type": "string"
          },
          "volumeBadge": {
            "nullable": true,
            "type": "string"
          },
          "websiteUrl": {
            "type": "string"
          }
        },
        "required": [
          "galaPrice",
          "galaInPool",
          "usdPrice",
          "marketCapUsd",
          "marketCapGala",
          "circulatingSupply",
          "volume",
          "deltaSupply",
          "volume1h",
          "isGraduated",
          "badges"
        ],
        "type": "object"
      },
      "TokenStatsResponse": {
        "properties": {
          "chatMessageCount": {
            "type": "number"
          },
          "commentCount": {
            "type": "number"
          },
          "holdersCount": {
            "type": "number"
          },
          "roomCount": {
            "type": "number"
          }
        },
        "required": [
          "holdersCount",
          "chatMessageCount",
          "commentCount",
          "roomCount"
        ],
        "type": "object"
      },
      "TradeAmountResponseDto": {
        "properties": {
          "calculatedQuantity": {
            "type": "string"
          },
          "extraFees": {
            "$ref": "#/components/schemas/TradeQuoteFeesResponseDto"
          }
        },
        "required": [
          "calculatedQuantity",
          "extraFees"
        ],
        "type": "object"
      },
      "TradeHistoryResponseDto": {
        "properties": {
          "pageInfo": {
            "$ref": "#/components/schemas/TradePageInfoResponseDto"
          },
          "trades": {
            "items": {
              "$ref": "#/components/schemas/TradeItemResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "trades",
          "pageInfo"
        ],
        "type": "object"
      },
      "TradeItemResponseDto": {
        "properties": {
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "inputAmount": {
            "type": "number"
          },
          "outputAmount": {
            "type": "number"
          },
          "tokenImage": {
            "nullable": true,
            "type": "string"
          },
          "tokenName": {
            "type": "string"
          },
          "tokenSymbol": {
            "type": "string"
          },
          "txnId": {
            "type": "string"
          },
          "txnType": {
            "enum": [
              "BUY",
              "SELL"
            ],
            "type": "string"
          },
          "userAddress": {
            "type": "string"
          }
        },
        "required": [
          "txnId",
          "tokenName",
          "tokenSymbol",
          "tokenImage",
          "userAddress",
          "txnType",
          "inputAmount",
          "outputAmount",
          "createdAt"
        ],
        "type": "object"
      },
      "TradePageInfoResponseDto": {
        "properties": {
          "endCursor": {
            "nullable": true,
            "type": "string"
          },
          "hasNextPage": {
            "type": "boolean"
          },
          "hasPreviousPage": {
            "type": "boolean"
          },
          "startCursor": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "hasNextPage",
          "endCursor",
          "hasPreviousPage",
          "startCursor"
        ],
        "type": "object"
      },
      "TradeQuoteFeesResponseDto": {
        "properties": {
          "reverseBondingCurve": {
            "type": "string"
          },
          "transactionFees": {
            "type": "string"
          }
        },
        "required": [
          "reverseBondingCurve",
          "transactionFees"
        ],
        "type": "object"
      },
      "TransactionMethodDto": {
        "properties": {
          "contract": {
            "type": "string"
          },
          "contractName": {
            "type": "string"
          },
          "method": {
            "description": "Allowlisted Launchpad operation method.",
            "type": "string"
          },
          "signedDto": {
            "description": "Caller-signed chain DTO.",
            "type": "object"
          },
          "stringsInstructions": {
            "description": "Caller-provided bundle grouping keys.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "method",
          "stringsInstructions",
          "signedDto"
        ],
        "type": "object"
      },
      "TriggerModerationResponseDto": {
        "properties": {
          "message": {
            "example": "Analysis queued successfully",
            "type": "string"
          },
          "queued": {
            "example": true,
            "type": "boolean"
          }
        },
        "required": [
          "queued",
          "message"
        ],
        "type": "object"
      },
      "UnpinMessageSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/UnpinnedMessageDataResponseDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "UnpinnedMessageDataResponseDto": {
        "properties": {
          "messageId": {
            "type": "string"
          },
          "unpinned": {
            "type": "boolean"
          }
        },
        "required": [
          "unpinned"
        ],
        "type": "object"
      },
      "UnregisterDeviceDto": {
        "properties": {
          "token": {
            "maxLength": 512,
            "type": "string"
          }
        },
        "required": [
          "token"
        ],
        "type": "object"
      },
      "UnregisterDeviceSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/UnregisteredDeviceDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "UnregisteredDeviceDto": {
        "properties": {
          "unregistered": {
            "enum": [
              true
            ],
            "type": "boolean"
          }
        },
        "required": [
          "unregistered"
        ],
        "type": "object"
      },
      "UpdateAIModerationSettingsDto": {
        "properties": {
          "enabled": {
            "description": "Enable or disable AI moderation",
            "example": true,
            "type": "boolean"
          },
          "mode": {
            "allOf": [
              {
                "$ref": "#/components/schemas/AIModerationMode"
              }
            ],
            "description": "AI moderation mode",
            "example": "ADVISORY"
          },
          "provider": {
            "description": "AI provider (e.g., claude)",
            "example": "claude",
            "type": "string"
          }
        },
        "type": "object"
      },
      "UpdateAIModerationSettingsResponseDto": {
        "properties": {
          "message": {
            "example": "AI moderation settings updated successfully",
            "type": "string"
          },
          "settings": {
            "$ref": "#/components/schemas/AIModerationSettingsResponseDto"
          }
        },
        "required": [
          "settings",
          "message"
        ],
        "type": "object"
      },
      "UpdateConfigDto": {
        "properties": {
          "aiModerationEnabled": {
            "example": false,
            "type": "boolean"
          },
          "chatEnabled": {
            "example": false,
            "type": "boolean"
          },
          "commentsEnabled": {
            "example": false,
            "type": "boolean"
          },
          "streamingEnabled": {
            "example": false,
            "type": "boolean"
          },
          "webhooksEnabled": {
            "example": false,
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "UpdatePreferencesDto": {
        "properties": {
          "chatEnabled": {
            "type": "boolean"
          },
          "streamsEnabled": {
            "type": "boolean"
          },
          "systemEnabled": {
            "type": "boolean"
          },
          "tradesEnabled": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "UpdateProfileDto": {
        "properties": {
          "fullName": {
            "maxLength": 20,
            "minLength": 2,
            "type": "string"
          },
          "profileImage": {
            "format": "uri",
            "maxLength": 2048,
            "nullable": true,
            "type": "string"
          }
        },
        "type": "object"
      },
      "UpdateTokenConfigDto": {
        "properties": {
          "chatEnabled": {
            "type": "boolean"
          },
          "commentsEnabled": {
            "type": "boolean"
          },
          "facebookUrl": {
            "nullable": true,
            "type": "string"
          },
          "instagramUrl": {
            "nullable": true,
            "type": "string"
          },
          "nextLiveStreamAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "redditUrl": {
            "nullable": true,
            "type": "string"
          },
          "streamingEnabled": {
            "type": "boolean"
          },
          "streamLanguage": {
            "maxLength": 5,
            "minLength": 2,
            "type": "string"
          },
          "telegramUrl": {
            "nullable": true,
            "type": "string"
          },
          "tiktokUrl": {
            "nullable": true,
            "type": "string"
          },
          "twitterUrl": {
            "nullable": true,
            "type": "string"
          },
          "websiteUrl": {
            "nullable": true,
            "type": "string"
          }
        },
        "type": "object"
      },
      "UpdateUnifiedMessageDto": {
        "properties": {
          "content": {
            "maxLength": 2000,
            "type": "string"
          }
        },
        "required": [
          "content"
        ],
        "type": "object"
      },
      "UserActivityStatsResponseDto": {
        "properties": {
          "activeBans": {
            "type": "number"
          },
          "chatMessagesCount": {
            "type": "number"
          },
          "commentsCount": {
            "type": "number"
          },
          "flagsPending": {
            "type": "number"
          },
          "flagsReceived": {
            "type": "number"
          },
          "globalBan": {
            "type": "boolean"
          },
          "tokensCreated": {
            "type": "number"
          },
          "tokensHeld": {
            "type": "number"
          }
        },
        "required": [
          "tokensHeld",
          "tokensCreated",
          "commentsCount",
          "chatMessagesCount",
          "flagsReceived",
          "flagsPending",
          "activeBans",
          "globalBan"
        ],
        "type": "object"
      },
      "UserBadgeDataResponseDto": {
        "properties": {
          "engagement": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "launch": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "success": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "volume": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "launch",
          "success",
          "volume",
          "engagement"
        ],
        "type": "object"
      },
      "UserBadgeStatusResponseDto": {
        "properties": {
          "badgeName": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          }
        },
        "required": [
          "badgeName",
          "isActive"
        ],
        "type": "object"
      },
      "UserHolderResponseDto": {
        "properties": {
          "holderTier": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/HolderTierResponseDto"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "object"
              }
            ]
          },
          "isCreator": {
            "type": "boolean"
          },
          "percentage": {
            "nullable": true,
            "type": "number"
          },
          "quantity": {
            "nullable": true,
            "type": "string"
          },
          "rank": {
            "nullable": true,
            "type": "number"
          },
          "tokenName": {
            "type": "string"
          },
          "userAddress": {
            "type": "string"
          }
        },
        "required": [
          "tokenName",
          "userAddress",
          "quantity",
          "percentage",
          "holderTier",
          "isCreator",
          "rank"
        ],
        "type": "object"
      },
      "UserHolderSuccessEnvelopeDto": {
        "properties": {
          "data": {
            "$ref": "#/components/schemas/UserHolderResponseDto"
          },
          "error": {
            "enum": [
              false
            ],
            "type": "boolean"
          },
          "message": {
            "type": "string"
          },
          "status": {
            "type": "number"
          }
        },
        "required": [
          "status",
          "error",
          "message",
          "data"
        ],
        "type": "object"
      },
      "UserListItemResponseDto": {
        "properties": {
          "activeBans": {
            "type": "number"
          },
          "address": {
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "flagsPending": {
            "type": "number"
          },
          "flagsReceived": {
            "type": "number"
          },
          "fullName": {
            "nullable": true,
            "type": "string"
          },
          "globalBan": {
            "type": "boolean"
          },
          "profileImage": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "address",
          "fullName",
          "profileImage",
          "flagsReceived",
          "flagsPending",
          "activeBans",
          "globalBan",
          "createdAt"
        ],
        "type": "object"
      },
      "UserPermissionsResponse": {
        "properties": {
          "isOverseer": {
            "description": "Whether the user has a platform-wide overseer role",
            "example": false,
            "type": "boolean"
          },
          "isOwner": {
            "description": "Whether the user is the token owner (owners have all permissions)",
            "example": false,
            "type": "boolean"
          },
          "matchedPreset": {
            "description": "If permissions match a role preset exactly, the preset name",
            "enum": [
              "MODERATOR",
              "TECHNICAL_PRODUCER",
              "MANAGER"
            ],
            "example": "MODERATOR",
            "nullable": true,
            "type": "string"
          },
          "permissions": {
            "description": "Array of permission strings the user has for this token",
            "example": [
              "MANAGE_COMMUNITY",
              "VIEW_ANALYTICS"
            ],
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "source": {
            "description": "Source of the permissions (how access was granted)",
            "enum": [
              "owner",
              "moderator_invite",
              "api_key",
              "overseer"
            ],
            "example": "moderator_invite",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "permissions",
          "source",
          "isOwner",
          "isOverseer"
        ],
        "type": "object"
      },
      "UserProfileStatsResponseDto": {
        "properties": {
          "accountAgeDays": {
            "type": "number"
          },
          "accountCreatedAt": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "graduationRate": {
            "type": "number"
          },
          "holdingsCount": {
            "nullable": true,
            "type": "number"
          },
          "tokensCreated": {
            "type": "number"
          },
          "tokensGraduated": {
            "type": "number"
          },
          "totalTrades": {
            "type": "number"
          },
          "totalVolumeGala": {
            "type": "string"
          },
          "totalVolumeUsd": {
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "tokensCreated",
          "tokensGraduated",
          "graduationRate",
          "totalTrades",
          "totalVolumeGala",
          "totalVolumeUsd",
          "holdingsCount",
          "accountCreatedAt",
          "accountAgeDays"
        ],
        "type": "object"
      },
      "UserRoleResponse": {
        "properties": {
          "inviteScope": {
            "description": "For moderator access: the scope of the invite (TOKEN or ALL_OWNER_TOKENS)",
            "enum": [
              "TOKEN",
              "ALL_OWNER_TOKENS"
            ],
            "example": "TOKEN",
            "nullable": true,
            "type": "string"
          },
          "isOwner": {
            "description": "Whether the user is the token owner",
            "example": false,
            "type": "boolean"
          },
          "role": {
            "description": "User's effective role for this token's stream",
            "enum": [
              "OWNER",
              "MANAGER",
              "TECHNICAL_PRODUCER",
              "MODERATOR",
              null
            ],
            "example": "MANAGER",
            "nullable": true,
            "type": "string"
          },
          "source": {
            "description": "Source of access: OWNER (token creator), MODERATOR (claimed invite), or null (no access)",
            "enum": [
              "OWNER",
              "MODERATOR",
              null
            ],
            "example": "MODERATOR",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "isOwner"
        ],
        "type": "object"
      },
      "UsersListResponseDto": {
        "properties": {
          "pageInfo": {
            "$ref": "#/components/schemas/TokenPageInfoResponseDto"
          },
          "users": {
            "items": {
              "$ref": "#/components/schemas/UserListItemResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "users",
          "pageInfo"
        ],
        "type": "object"
      },
      "UserSummaryResponseDto": {
        "properties": {
          "profile": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ManagedUserProfileInfoResponseDto"
              },
              {
                "enum": [
                  null
                ],
                "nullable": true,
                "type": "object"
              }
            ]
          },
          "stats": {
            "$ref": "#/components/schemas/UserActivityStatsResponseDto"
          }
        },
        "required": [
          "profile",
          "stats"
        ],
        "type": "object"
      },
      "UserTokenListItemResponseDto": {
        "properties": {
          "additionalKey": {
            "nullable": true,
            "type": "string"
          },
          "category": {
            "nullable": true,
            "type": "string"
          },
          "collection": {
            "nullable": true,
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "creatorAddress": {
            "type": "string"
          },
          "decimals": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "holdingPriceGala": {
            "oneOf": [
              {
                "type": "number"
              },
              {
                "type": "string"
              }
            ]
          },
          "holdingPriceUsd": {
            "type": "number"
          },
          "id": {
            "type": "number"
          },
          "image": {
            "type": "string"
          },
          "isFinalized": {
            "type": "boolean"
          },
          "name": {
            "type": "string"
          },
          "quantity": {
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "tokenName": {
            "type": "string"
          },
          "totalUsdValue": {
            "type": "string"
          },
          "type": {
            "nullable": true,
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          },
          "vaultAddress": {
            "type": "string"
          },
          "verify": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "UserTokenListResponseDto": {
        "properties": {
          "pageInfo": {
            "$ref": "#/components/schemas/TokenPageInfoResponseDto"
          },
          "token": {
            "items": {
              "$ref": "#/components/schemas/UserTokenListItemResponseDto"
            },
            "type": "array"
          }
        },
        "required": [
          "token",
          "pageInfo"
        ],
        "type": "object"
      },
      "ValidateTokenDto": {
        "properties": {
          "symbol": {
            "description": "Token symbol to validate (1-20 characters)",
            "example": "MYTKN",
            "type": "string"
          },
          "tokenName": {
            "description": "Token name to validate (1-50 characters)",
            "example": "mytoken",
            "type": "string"
          }
        },
        "type": "object"
      },
      "ValidateTokenResponseDto": {
        "properties": {
          "errors": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "nameAvailable": {
            "type": "boolean"
          },
          "nameBlocklisted": {
            "type": "boolean"
          },
          "symbolAvailable": {
            "type": "boolean"
          },
          "symbolBlocklisted": {
            "type": "boolean"
          }
        },
        "required": [
          "nameAvailable",
          "symbolAvailable",
          "nameBlocklisted",
          "symbolBlocklisted",
          "errors"
        ],
        "type": "object"
      },
      "VolumeBadge": {
        "enum": [
          "1k",
          "10k",
          "100k",
          "1M+"
        ],
        "type": "string"
      },
      "WeeklyChallengeLeaderboardResponseDto": {
        "properties": {
          "count": {
            "type": "number"
          },
          "snapshotDate": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "tokens": {
            "items": {
              "$ref": "#/components/schemas/LeaderboardTokenResponseDto"
            },
            "type": "array"
          },
          "weekEnd": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          },
          "weekStart": {
            "format": "date-time",
            "nullable": true,
            "type": "string"
          }
        },
        "required": [
          "tokens",
          "snapshotDate",
          "weekStart",
          "weekEnd",
          "count"
        ],
        "type": "object"
      },
      "WeeklyChallengeSnapshotResponseDto": {
        "properties": {
          "circulatingSupply": {
            "type": "string"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "galaInPool": {
            "type": "string"
          },
          "id": {
            "type": "number"
          },
          "isFinalized": {
            "type": "boolean"
          },
          "marketCapGala": {
            "type": "string"
          },
          "marketCapIncreaseGala": {
            "type": "string"
          },
          "marketCapUsd": {
            "type": "string"
          },
          "priceGala": {
            "type": "string"
          },
          "priceUsd": {
            "type": "string"
          },
          "snapshotDate": {
            "format": "date-time",
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          },
          "vaultAddress": {
            "type": "string"
          },
          "volumeWeekly": {
            "type": "string"
          },
          "weekEnd": {
            "format": "date-time",
            "type": "string"
          },
          "weekStart": {
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "id",
          "vaultAddress",
          "snapshotDate",
          "weekStart",
          "weekEnd",
          "marketCapGala",
          "marketCapUsd",
          "marketCapIncreaseGala",
          "priceGala",
          "priceUsd",
          "circulatingSupply",
          "volumeWeekly",
          "galaInPool",
          "isFinalized",
          "createdAt",
          "updatedAt"
        ],
        "type": "object"
      }
    },
    "securitySchemes": {
      "apiKeyAuth": {
        "description": "Launchpad API key.",
        "in": "header",
        "name": "x-api-key",
        "type": "apiKey"
      },
      "bearer": {
        "bearerFormat": "JWT",
        "description": "JWT session token.",
        "scheme": "bearer",
        "type": "http"
      },
      "muxSignature": {
        "description": "Mux webhook signature.",
        "in": "header",
        "name": "mux-signature",
        "type": "apiKey"
      }
    }
  },
  "info": {
    "contact": {},
    "description": "Generated API contract for launchpad-backend-service-v3.",
    "title": "Launchpad Backend API",
    "version": "1.0.0"
  },
  "openapi": "3.0.3",
  "paths": {
    "/": {
      "get": {
        "description": "Root health check",
        "operationId": "AppController_getRoot",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "service": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Service status"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Root health check",
        "tags": [
          "Health"
        ]
      }
    },
    "/auth/login": {
      "post": {
        "description": "Login with wallet signature (or bypass in dev environments)",
        "operationId": "AuthController_login",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/LoginResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Login successful; the access token and user identity are returned in data."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - signature verification failed or address invalid"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Login with wallet signature (or bypass in dev environments)",
        "tags": [
          "auth"
        ]
      }
    },
    "/auth/logout": {
      "post": {
        "description": "Logout and optionally invalidate all devices",
        "operationId": "AuthController_logout",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "Logout successful; undefined data is omitted from the JSON body."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Logout and optionally invalidate all devices",
        "tags": [
          "auth"
        ]
      }
    },
    "/auth/refresh": {
      "post": {
        "description": "Refresh access token (legacy or refresh token flow)",
        "operationId": "AuthController_refresh",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/RefreshResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Token refreshed; legacy flow, refresh-token flow, and cookie-session flow return their corresponding data fields."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - token invalid, expired, or missing"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Refresh access token (legacy or refresh token flow)",
        "tags": [
          "auth"
        ]
      }
    },
    "/auth/session": {
      "get": {
        "description": "Get current session info",
        "operationId": "AuthController_getSession",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/SessionResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Session info retrieved; timestamps are ISO 8601 strings in JSON."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get current session info",
        "tags": [
          "auth"
        ]
      }
    },
    "/bundle": {
      "get": {
        "description": "Status of a submitted operation by bundle id or chain uniqueKey",
        "operationId": "BundleController_status",
        "parameters": [
          {
            "description": "Bundle UUID or chain uniqueKey.",
            "in": "query",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BundleStatusResponseDto"
                }
              }
            },
            "description": "{\"key\":\"<id>\",\"status\":\"PENDING|PROCESSED|FAILED\",\"error\"?:\"<reason when FAILED>\"}"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BundleErrorResponseDto"
                }
              }
            },
            "description": "Transaction with the requested id was not found."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BundleErrorResponseDto"
                }
              }
            },
            "description": "Bundle status lookup failed."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Status of a submitted operation by bundle id or chain uniqueKey",
        "tags": [
          "bundle"
        ]
      },
      "post": {
        "description": "Submit a signed launchpad operation for batching (bundler-compatible)",
        "operationId": "BundleController_submit",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionMethodDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BundleAckResponseDto"
                }
              }
            },
            "description": "{\"data\":\"<uuid>\",\"message\":\"Transaction Received\",\"error\":false}"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BundleErrorResponseDto"
                }
              }
            },
            "description": "Bundle validation or intake error."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BundleErrorResponseDto"
                }
              }
            },
            "description": "Bundle intake failed."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Submit a signed launchpad operation for batching (bundler-compatible)",
        "tags": [
          "bundle"
        ]
      }
    },
    "/health": {
      "get": {
        "description": "Check server health status (database and cache connections)",
        "operationId": "HealthController_checkHealth",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/HealthCheckResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Overall health and the state of required and informational dependencies."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Service unavailable - database or Redis connection failed, dependencies unreachable"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Health check",
        "tags": [
          "health"
        ]
      }
    },
    "/health/live": {
      "get": {
        "description": "Responsiveness only — no dependency or memory checks.",
        "operationId": "HealthController_checkLiveness",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/HealthProbeResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Process responsiveness and the successful health-check result."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Health check failed."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Liveness probe",
        "tags": [
          "health"
        ]
      }
    },
    "/health/ready": {
      "get": {
        "description": "Gates on critical deps (database, Redis); includes Mux + RabbitMQ + GalaChain as informational (non-gating).",
        "operationId": "HealthController_checkReadiness",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/HealthProbeResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Critical dependencies up with informational dependency details."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "A critical dependency (database or Redis) is down."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Readiness probe",
        "tags": [
          "health"
        ]
      }
    },
    "/live/{tokenName}/chat": {
      "get": {
        "description": "Get per-token chat status",
        "operationId": "StreamChatController_getChatStatus",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ChatStatusResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Enabled state, feature status, disable reason, and slow-mode interval."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid token name."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Chat status could not be retrieved."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get per-token chat status",
        "tags": [
          "stream-chat"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Toggle per-token chat status (admin/overseer)",
        "operationId": "StreamChatController_setChatStatus",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetChatStatusRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "Chat status updated; the success envelope has no data field."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Chat status could not be updated."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Chat status could not be updated."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Toggle per-token chat status (admin/overseer)",
        "tags": [
          "stream-chat"
        ]
      }
    },
    "/live/{tokenName}/chat/slow-mode": {
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "patch": {
        "description": "Set chat slow mode interval",
        "operationId": "StreamChatController_setSlowMode",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetSlowModeRequestDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "Slow mode updated; the success envelope has no data field."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid slowModeSeconds value"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - requires MANAGE_COMMUNITY permission"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Slow mode could not be updated."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Set chat slow mode interval",
        "tags": [
          "stream-chat"
        ]
      }
    },
    "/oembed": {
      "get": {
        "description": "Get oEmbed data for home page with trending token info",
        "operationId": "OEmbedController_getHomeOEmbed",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "enum": [
                "json"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedJsonResponseDto"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Returns the oEmbed JSON body when format=json, otherwise an HTML preview page."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedErrorResponseDto"
                }
              }
            },
            "description": "Internal server error - failed to generate oEmbed data."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Home oEmbed",
        "tags": [
          "oembed"
        ]
      }
    },
    "/oembed/buy-sell/{tokenName}": {
      "get": {
        "description": "Get oEmbed data for a token pool page",
        "operationId": "OEmbedController_getPoolOEmbed",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "enum": [
                "json"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedJsonResponseDto"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Returns the oEmbed JSON body when format=json, otherwise an HTML preview page."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedErrorResponseDto"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Not found - token does not exist."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedErrorResponseDto"
                }
              }
            },
            "description": "Internal server error - failed to generate oEmbed data."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Pool oEmbed",
        "tags": [
          "oembed"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/oembed/profile/{address}": {
      "get": {
        "description": "Get oEmbed data for a user profile page",
        "operationId": "OEmbedController_getProfileOEmbed",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "enum": [
                "json"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedJsonResponseDto"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Returns the oEmbed JSON body when format=json, otherwise an HTML preview page."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedErrorResponseDto"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Not found - profile does not exist."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedErrorResponseDto"
                }
              }
            },
            "description": "Internal server error - failed to generate oEmbed data."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Profile oEmbed",
        "tags": [
          "oembed"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "address",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/oembed/t/{tokenName}": {
      "get": {
        "description": "Short URL for token pool oEmbed (/t/:tokenName)",
        "operationId": "OEmbedController_getPoolOEmbedShortUrl",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "enum": [
                "json"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedJsonResponseDto"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Returns the oEmbed JSON body when format=json, otherwise an HTML preview page."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedErrorResponseDto"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Not found - token does not exist."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedErrorResponseDto"
                }
              }
            },
            "description": "Internal server error - failed to generate oEmbed data."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Pool oEmbed (short URL)",
        "tags": [
          "oembed"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/oembed/u/{address}": {
      "get": {
        "description": "Short URL for user profile oEmbed (/u/:address)",
        "operationId": "OEmbedController_getProfileOEmbedShortUrl",
        "parameters": [
          {
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {
              "enum": [
                "json"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedJsonResponseDto"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Returns the oEmbed JSON body when format=json, otherwise an HTML preview page."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedErrorResponseDto"
                }
              },
              "text/html": {
                "schema": {
                  "type": "string"
                }
              }
            },
            "description": "Not found - profile does not exist."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OEmbedErrorResponseDto"
                }
              }
            },
            "description": "Internal server error - failed to generate oEmbed data."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Profile oEmbed (short URL)",
        "tags": [
          "oembed"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "address",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1": {
      "get": {
        "description": "Get platform configuration",
        "operationId": "SiteConfigController_getConfig[1]",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/PlatformConfigResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Current platform feature configuration and AI moderation availability."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Platform configuration could not be retrieved."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Platform configuration could not be retrieved."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get platform configuration",
        "tags": [
          "Platform Config"
        ]
      },
      "put": {
        "description": "Update platform configuration (admin/overseer only)",
        "operationId": "SiteConfigController_updateConfig[1]",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateConfigDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/PlatformConfigUpdateResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Updated platform configuration fields."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid configuration"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Configuration could not be updated."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update platform configuration (admin/overseer only)",
        "tags": [
          "Platform Config"
        ]
      }
    },
    "/v1/ai-moderation/flags/{flagId}": {
      "get": {
        "description": "Get AI moderation for a flag",
        "operationId": "AIModerationController_getAnalysis",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GetAIModerationAnalysisResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "AI moderation retrieved successfully"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - valid authentication required"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - admin or overseer role required"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Analysis not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get AI moderation for a flag",
        "tags": [
          "AI Moderation"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "flagId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/ai-moderation/flags/{flagId}/analyze": {
      "parameters": [
        {
          "in": "path",
          "name": "flagId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Trigger AI moderation for a flag",
        "operationId": "AIModerationController_triggerAnalysis",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TriggerModerationResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Analysis queued successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Analysis already exists or in progress"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - valid authentication required"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - admin or overseer role required"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Flag not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Trigger AI moderation for a flag",
        "tags": [
          "AI Moderation"
        ]
      }
    },
    "/v1/ai-moderation/settings": {
      "get": {
        "description": "Get AI moderation settings",
        "operationId": "AIModerationController_getSettings",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GetAIModerationSettingsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "AI settings retrieved successfully"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - valid authentication required"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - admin or overseer role required"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get AI moderation settings",
        "tags": [
          "AI Moderation"
        ]
      },
      "post": {
        "description": "Update AI moderation settings",
        "operationId": "AIModerationController_updateSettings",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateAIModerationSettingsDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/UpdateAIModerationSettingsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "AI settings updated successfully"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - valid authentication required"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - admin or overseer role required"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Update AI moderation settings",
        "tags": [
          "AI Moderation"
        ]
      }
    },
    "/v1/ai-moderation/status": {
      "get": {
        "description": "Get AI system status",
        "operationId": "AIModerationController_getStatus",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GetAIModerationStatusResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "AI status retrieved successfully"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - valid authentication required"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - admin or overseer role required"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get AI system status",
        "tags": [
          "AI Moderation"
        ]
      }
    },
    "/v1/analytics/ingest": {
      "post": {
        "description": "Naive transparent proxy endpoint for analytics. Accepts any JSON payload and forwards to Gala Analytics. Returns 202 Accepted immediately (fire-and-forget).",
        "operationId": "AnalyticsIngressController_ingest",
        "parameters": [],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AnalyticsIngressAcceptedResponseDto"
                }
              }
            },
            "description": "Analytics event accepted for forwarding"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Accept analytics event for forwarding",
        "tags": [
          "Analytics"
        ]
      }
    },
    "/v1/api-keys": {
      "get": {
        "description": "List all API keys for the authenticated user",
        "operationId": "ApiKeyController_findAll",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ApiKeyListResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Cursor-paginated API key metadata. Raw keys are never returned."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT or API key"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Internal server error - failed to retrieve API keys from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List API keys",
        "tags": [
          "api-keys"
        ]
      },
      "post": {
        "description": "Create a new API key (raw key returned only once)",
        "operationId": "ApiKeyController_create",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/CreateApiKeyResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "API key created successfully. The raw key is returned only once."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Bad request - role is invalid (MODERATOR/TECHNICAL_PRODUCER/MANAGER/OWNER), expiresAt not valid ISO 8601, or token names invalid"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT or API key"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Internal server error - failed to create API key in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create API key",
        "tags": [
          "api-keys"
        ]
      }
    },
    "/v1/api-keys/{id}": {
      "delete": {
        "description": "Revoke an API key (soft delete)",
        "operationId": "ApiKeyController_revoke",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "API key revoked; the success envelope has no JSON data field."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT or API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Forbidden - user is not the API key owner"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "API key not found - id parameter does not match any existing key"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Internal server error - failed to revoke API key in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Revoke API key",
        "tags": [
          "api-keys"
        ]
      },
      "get": {
        "description": "Get a single API key by ID",
        "operationId": "ApiKeyController_findOne",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ApiKeyResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "API key metadata without the raw key or stored key hash."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT or API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Forbidden - user is not the API key owner"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "API key not found - id parameter does not match any existing key"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Internal server error - failed to retrieve API key from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get API key",
        "tags": [
          "api-keys"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "patch": {
        "description": "Update API key metadata and permissions",
        "operationId": "ApiKeyController_update",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ApiKeyModelResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Serialized API key model returned by the current controller implementation."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Bad request - role is invalid, expiresAt not valid ISO 8601, or token names not found"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT or API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Forbidden - user is not the API key owner"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "API key not found - id parameter does not match any existing key"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorResponseDto"
                }
              }
            },
            "description": "Internal server error - failed to update API key in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Update API key",
        "tags": [
          "api-keys"
        ]
      }
    },
    "/v1/cache/flush/address/{address}": {
      "delete": {
        "description": "Flush all cache entries associated with a wallet address (admin/overseer only)",
        "operationId": "CacheManagementController_flushByAddress",
        "parameters": [
          {
            "description": "Wallet address to flush cache for",
            "in": "path",
            "name": "address",
            "required": true,
            "schema": {
              "example": "0x1234..."
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlushResultDto"
                }
              }
            },
            "description": "Cache flushed successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - invalid address"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid authentication"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - cache flush failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Flush cache by address",
        "tags": [
          "cache-management"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "address",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/cache/flush/all": {
      "delete": {
        "description": "Flush ALL Launchpad cache entries. NUCLEAR OPTION - requires confirm=true query parameter (admin/overseer only)",
        "operationId": "CacheManagementController_flushAll",
        "parameters": [
          {
            "description": "Safety confirmation - must be true",
            "in": "query",
            "name": "confirm",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlushResultDto"
                }
              }
            },
            "description": "All cache flushed successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - confirm=true required"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid authentication"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - cache flush failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Flush all cache",
        "tags": [
          "cache-management"
        ]
      }
    },
    "/v1/cache/flush/token/{tokenName}": {
      "delete": {
        "description": "Flush all cache entries associated with a token name (admin/overseer only)",
        "operationId": "CacheManagementController_flushByToken",
        "parameters": [
          {
            "description": "Token name to flush cache for",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "example": "MYTOKEN"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlushResultDto"
                }
              }
            },
            "description": "Cache flushed successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - invalid token name"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid authentication"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - cache flush failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Flush cache by token",
        "tags": [
          "cache-management"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/cache/flush/wallet-aliases": {
      "delete": {
        "description": "Flush ALL cached wallet alias entries (eth| → client| resolution). Requires confirm=true (admin/overseer only)",
        "operationId": "CacheManagementController_flushAllWalletAliases",
        "parameters": [
          {
            "description": "Safety confirmation - must be true",
            "in": "query",
            "name": "confirm",
            "required": true,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlushResultDto"
                }
              }
            },
            "description": "Cache flushed successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - confirm=true required"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid authentication"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - cache flush failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Flush all wallet-alias cache entries",
        "tags": [
          "cache-management"
        ]
      }
    },
    "/v1/cache/flush/wallet-aliases/{address}": {
      "delete": {
        "description": "Flush the cached wallet alias (eth| → client| resolution) for a specific address (admin/overseer only)",
        "operationId": "CacheManagementController_flushWalletAliasByAddress",
        "parameters": [
          {
            "description": "Wallet address to flush alias cache for",
            "in": "path",
            "name": "address",
            "required": true,
            "schema": {
              "example": "eth|0xabc..."
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FlushResultDto"
                }
              }
            },
            "description": "Cache flushed successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - invalid address"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid authentication"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - cache flush failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Flush wallet-alias cache for an address",
        "tags": [
          "cache-management"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "address",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/chart": {
      "get": {
        "description": "Get historical chart data",
        "operationId": "ChartController_getChart",
        "parameters": [
          {
            "description": "Token name to get chart data for",
            "in": "query",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Start timestamp (Unix seconds)",
            "in": "query",
            "name": "from",
            "required": true,
            "schema": {
              "example": 1737500000,
              "type": "number"
            }
          },
          {
            "description": "End timestamp (Unix seconds)",
            "in": "query",
            "name": "to",
            "required": true,
            "schema": {
              "example": 1737600000,
              "type": "number"
            }
          },
          {
            "description": "Data point interval in minutes (1, 5, 10, 15, 30, 60, 240, 1440)",
            "in": "query",
            "name": "resolution",
            "required": true,
            "schema": {
              "example": 5,
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ChartResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Candle values and history metadata in the standard success envelope."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid parameters"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get historical chart data",
        "tags": [
          "Chart"
        ]
      }
    },
    "/v1/config": {
      "get": {
        "description": "Get platform configuration",
        "operationId": "SiteConfigController_getConfig[0]",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/PlatformConfigResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Current platform feature configuration and AI moderation availability."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Platform configuration could not be retrieved."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Platform configuration could not be retrieved."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get platform configuration",
        "tags": [
          "Platform Config"
        ]
      },
      "put": {
        "description": "Update platform configuration (admin/overseer only)",
        "operationId": "SiteConfigController_updateConfig[0]",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateConfigDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/PlatformConfigUpdateResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Updated platform configuration fields."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid configuration"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - insufficient permissions"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Configuration could not be updated."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update platform configuration (admin/overseer only)",
        "tags": [
          "Platform Config"
        ]
      }
    },
    "/v1/config/client-flags": {
      "get": {
        "description": "Returns feature flag overrides for the native mobile app. No authentication required.",
        "operationId": "ClientConfigController_getClientFlags",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ClientFlagsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Feature flag values consumed by native clients."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Client feature flags could not be retrieved."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get client feature flags",
        "tags": [
          "Client Config"
        ]
      }
    },
    "/v1/config/roles": {
      "get": {
        "description": "Get available roles",
        "operationId": "SiteConfigController_getAvailableRoles[0]",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/AvailableRolesResponse"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Available roles retrieved successfully"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Available roles could not be retrieved."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get available roles",
        "tags": [
          "Platform Config"
        ]
      }
    },
    "/v1/connect/{path}": {
      "delete": {
        "description": "Proxy requests to Gala Connect API",
        "operationId": "ConnectController_handleRequest_delete",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Request proxied successfully; the response body is defined by the upstream route."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Invalid route or bad request."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Internal server error."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Gala Connect response passed through; status and JSON payload vary by upstream route."
          }
        },
        "summary": "Proxy requests to Gala Connect API",
        "tags": [
          "Connect Proxy"
        ]
      },
      "get": {
        "description": "Proxy requests to Gala Connect API",
        "operationId": "ConnectController_handleRequest_get",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Request proxied successfully; the response body is defined by the upstream route."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Invalid route or bad request."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Internal server error."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Gala Connect response passed through; status and JSON payload vary by upstream route."
          }
        },
        "summary": "Proxy requests to Gala Connect API",
        "tags": [
          "Connect Proxy"
        ]
      },
      "head": {
        "description": "Proxy requests to Gala Connect API",
        "operationId": "ConnectController_handleRequest_head",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Request proxied successfully; the response body is defined by the upstream route."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Invalid route or bad request."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Internal server error."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Gala Connect response passed through; status and JSON payload vary by upstream route."
          }
        },
        "summary": "Proxy requests to Gala Connect API",
        "tags": [
          "Connect Proxy"
        ]
      },
      "options": {
        "description": "Proxy requests to Gala Connect API",
        "operationId": "ConnectController_handleRequest_options",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Request proxied successfully; the response body is defined by the upstream route."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Invalid route or bad request."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Internal server error."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Gala Connect response passed through; status and JSON payload vary by upstream route."
          }
        },
        "summary": "Proxy requests to Gala Connect API",
        "tags": [
          "Connect Proxy"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "path",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "patch": {
        "description": "Proxy requests to Gala Connect API",
        "operationId": "ConnectController_handleRequest_patch",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Request proxied successfully; the response body is defined by the upstream route."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Invalid route or bad request."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Internal server error."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Gala Connect response passed through; status and JSON payload vary by upstream route."
          }
        },
        "summary": "Proxy requests to Gala Connect API",
        "tags": [
          "Connect Proxy"
        ]
      },
      "post": {
        "description": "Proxy requests to Gala Connect API",
        "operationId": "ConnectController_handleRequest_post",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Request proxied successfully; the response body is defined by the upstream route."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Invalid route or bad request."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Internal server error."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Gala Connect response passed through; status and JSON payload vary by upstream route."
          }
        },
        "summary": "Proxy requests to Gala Connect API",
        "tags": [
          "Connect Proxy"
        ]
      },
      "put": {
        "description": "Proxy requests to Gala Connect API",
        "operationId": "ConnectController_handleRequest_put",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Request proxied successfully; the response body is defined by the upstream route."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Invalid route or bad request."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Internal server error."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Gala Connect response passed through; status and JSON payload vary by upstream route."
          }
        },
        "summary": "Proxy requests to Gala Connect API",
        "tags": [
          "Connect Proxy"
        ]
      },
      "trace": {
        "description": "Proxy requests to Gala Connect API",
        "operationId": "ConnectController_handleRequest_trace",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Request proxied successfully; the response body is defined by the upstream route."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Invalid route or bad request."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Internal server error."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Gala Connect response passed through; status and JSON payload vary by upstream route."
          }
        },
        "summary": "Proxy requests to Gala Connect API",
        "tags": [
          "Connect Proxy"
        ]
      },
      "x-search": {
        "description": "Proxy requests to Gala Connect API",
        "operationId": "ConnectController_handleRequest_search",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Request proxied successfully; the response body is defined by the upstream route."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Invalid route or bad request."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Internal server error."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Gala Connect response passed through; status and JSON payload vary by upstream route."
          }
        },
        "summary": "Proxy requests to Gala Connect API",
        "tags": [
          "Connect Proxy"
        ]
      }
    },
    "/v1/connect/users/referrals/code": {
      "get": {
        "description": "Fetch the authenticated user referral code from Gala Connect",
        "operationId": "ConnectController_getReferralCode",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReferralCodeResponseDto"
                }
              }
            },
            "description": "Referral code returned from Gala Connect."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ConnectErrorResponseDto"
                }
              }
            },
            "description": "Missing or invalid session."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Gala Connect request failed; the error envelope is returned."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Fetch the authenticated user referral code from Gala Connect",
        "tags": [
          "Connect Proxy"
        ]
      }
    },
    "/v1/connected-clients": {
      "get": {
        "description": "Get list of currently connected users (admin/overseer only)",
        "operationId": "WebSocketAdminController_getConnectedClients",
        "parameters": [
          {
            "in": "query",
            "name": "minConnectionSeconds",
            "required": false,
            "schema": {
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "isOverseer",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "authenticated",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          },
          {
            "in": "query",
            "name": "userAddresses",
            "required": false,
            "schema": {
              "maxLength": 5000,
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "userAddress",
            "required": false,
            "schema": {
              "maxLength": 100,
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "tokenName",
            "required": false,
            "schema": {
              "maxLength": 50,
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "default": 50,
              "maximum": 100,
              "minimum": 1,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "offset",
            "required": false,
            "schema": {
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "room",
            "required": false,
            "schema": {
              "maxLength": 200,
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ConnectedClientsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Connected clients, room statistics, and offset pagination in the success envelope."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid query parameters"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT/API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to list clients"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for connected-client lookup failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List connected WebSocket clients",
        "tags": [
          "websocket-admin"
        ]
      }
    },
    "/v1/content-flags": {
      "get": {
        "description": "Get flags with optional filtering by tokenName (token-specific or global admin view)",
        "operationId": "ContentFlagController_getFlags",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentFlagListSuccessEnvelopeDto"
                }
              }
            },
            "description": "Paginated flags retrieved successfully."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks permission to view flags"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication, authorization, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get content flags",
        "tags": [
          "content-flags"
        ]
      },
      "post": {
        "description": "Create a flag/report for chat, comment, or stream content",
        "operationId": "ContentFlagController_createFlag",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentFlagMutationSuccessEnvelopeDto"
                }
              }
            },
            "description": "Flag created successfully."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - contentType invalid, contentId missing, or required reason missing for stream type"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user profile incomplete"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to create flag in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication, validation, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create content flag",
        "tags": [
          "content-flags"
        ]
      }
    },
    "/v1/content-flags/{id}/action": {
      "parameters": [
        {
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Take action on a flag (delete content, ban user, or both)",
        "operationId": "ContentFlagController_actionFlag",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentFlagMutationSuccessEnvelopeDto"
                }
              }
            },
            "description": "Flag action completed successfully."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - action parameter invalid (must be DELETE_CONTENT, BAN_USER, or BOTH)"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks permission to action this flag"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Flag not found - id parameter does not match any existing flag"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to execute action in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication, authorization, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Action flag",
        "tags": [
          "content-flags"
        ]
      }
    },
    "/v1/content-flags/{id}/dismiss": {
      "parameters": [
        {
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Dismiss a flag without taking action",
        "operationId": "ContentFlagController_dismissFlag",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContentFlagMutationSuccessEnvelopeDto"
                }
              }
            },
            "description": "Flag dismissed successfully."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks permission to dismiss this flag"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Flag not found - id parameter does not match any existing flag"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to update flag in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication, authorization, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Dismiss flag",
        "tags": [
          "content-flags"
        ]
      }
    },
    "/v1/dev/webhooks/messages": {
      "post": {
        "description": "Send a simulated message webhook event for testing - development mode only",
        "operationId": "DevWebhooksController_simulateMessageWebhook",
        "parameters": [],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SimulatedMessageResponseDto"
                }
              }
            },
            "description": "Message webhook simulated and processed successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - webhook payload is invalid"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to process webhook"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "[DEV ONLY] Simulate message webhook",
        "tags": [
          "webhooks"
        ]
      }
    },
    "/v1/dev/webhooks/simulate": {
      "post": {
        "description": "Send a simulated webhook event for testing - development mode only",
        "operationId": "DevWebhooksController_simulateWebhook",
        "parameters": [],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SimulatedWebhookResponseDto"
                }
              }
            },
            "description": "Webhook simulated and processed successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - webhook payload is invalid"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to process webhook"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "[DEV ONLY] Simulate webhook event",
        "tags": [
          "webhooks"
        ]
      }
    },
    "/v1/events": {
      "get": {
        "description": "Query historical events with filters and pagination",
        "operationId": "EventsController_queryEvents",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventsListSuccessEnvelopeDto"
                }
              }
            },
            "description": "Paginated event results."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication and query failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Query historical events",
        "tags": [
          "Events"
        ]
      },
      "post": {
        "description": "Submit a batch of events for processing",
        "operationId": "EventsController_submitEvents",
        "parameters": [],
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventsBatchSuccessEnvelopeDto"
                }
              }
            },
            "description": "Batch accepted for processing."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for invalid event batches or processing failures."
          }
        },
        "summary": "Submit events batch",
        "tags": [
          "Events"
        ]
      }
    },
    "/v1/events/stats": {
      "get": {
        "description": "Get aggregate event statistics for dashboard display",
        "operationId": "EventsController_getEventStats",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EventsStatsSuccessEnvelopeDto"
                }
              }
            },
            "description": "Aggregate event statistics."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication and query failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get event statistics",
        "tags": [
          "Events"
        ]
      }
    },
    "/v1/holders": {
      "get": {
        "description": "Get top token holders or specific user holder data using query parameters",
        "operationId": "HolderController_getHolders",
        "parameters": [
          {
            "description": "Maximum number of holders to return (1-100, default 10)",
            "in": "query",
            "name": "pageSize",
            "required": false,
            "schema": {
              "example": 10
            }
          },
          {
            "description": "Specific user address to get holder data for",
            "in": "query",
            "name": "userAddress",
            "required": false,
            "schema": {
              "example": "eth|0x123..."
            }
          },
          {
            "description": "Token name to query holders for",
            "in": "query",
            "name": "tokenName",
            "required": true,
            "schema": {
              "example": "anime"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/HolderListSuccessEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/UserHolderSuccessEnvelopeDto"
                    }
                  ]
                }
              }
            },
            "description": "Holder data retrieved successfully - returns array of top holders or specific user data"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - invalid query parameters or tokenName format"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to retrieve holder data from blockchain or cache"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token lookup and holder service failures."
          }
        },
        "summary": "Get token holders with query filtering",
        "tags": [
          "holders"
        ]
      }
    },
    "/v1/messages": {
      "get": {
        "description": "Query messages with flexible filtering by token, user address, and optional type filter",
        "operationId": "StreamChatController_getChatMessages",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageListSuccessEnvelopeDto"
                }
              }
            },
            "description": "Messages retrieved successfully - returns paginated array of message objects"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - either tokenName or userAddress must be provided, skip/limit parameters invalid, invalid sort field, or invalid type filter"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for query validation and database failures."
          }
        },
        "summary": "Query unified messages (chat and comments)",
        "tags": [
          "stream-chat"
        ]
      },
      "post": {
        "description": "Send a new message via public v1 endpoint (supports both chat and comments)",
        "operationId": "StreamChatController_createUnifiedMessage",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendUnifiedMessageDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageMutationSuccessEnvelopeDto"
                }
              }
            },
            "description": "Message created successfully - returns message object with ID, timestamp, and user info"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - tokenName missing, content missing/empty/exceeds max length, invalid message type, or other validation error"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user profile incomplete, user is banned, or messaging disabled"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to save message to database or broadcast via WebSocket"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication, validation, and message service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create unified message (chat or comment)",
        "tags": [
          "stream-chat"
        ]
      }
    },
    "/v1/messages/{id}": {
      "delete": {
        "description": "Delete a message (message author, pool owner, or moderator)",
        "operationId": "StreamChatController_deleteMessage",
        "parameters": [
          {
            "description": "Message identifier returned by the message API.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageDeleteSuccessEnvelopeDto"
                }
              }
            },
            "description": "Message deleted successfully - message marked deleted and viewers notified via WebSocket"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not message author or moderator with MANAGE_CHAT permission, or user is banned"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Message not found - id parameter does not match any existing message"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to delete message from database or broadcast via WebSocket"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication, authorization, and message deletion failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Delete unified message (chat or comment)",
        "tags": [
          "stream-chat"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "put": {
        "description": "Update a message (message author only)",
        "operationId": "StreamChatController_updateMessage",
        "parameters": [
          {
            "description": "Message identifier returned by the message API.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateUnifiedMessageDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageMutationSuccessEnvelopeDto"
                }
              }
            },
            "description": "Message updated successfully - returns updated message object"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - content is missing, empty, or exceeds max length (500 for chat, 2000 for comment)"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not the message author or user is banned"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Message not found - id parameter does not match any existing message"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to update message in database or broadcast via WebSocket"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication, validation, and message update failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Update unified message (chat or comment)",
        "tags": [
          "stream-chat"
        ]
      }
    },
    "/v1/messages/{messageId}/pin": {
      "delete": {
        "description": "Unpin a message (requires MANAGE_STREAM_SETTINGS permission)",
        "operationId": "StreamChatController_unpinMessage",
        "parameters": [
          {
            "description": "Message identifier returned by the message API.",
            "in": "path",
            "name": "messageId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnpinMessageSuccessEnvelopeDto"
                }
              }
            },
            "description": "Message unpinned successfully."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks MANAGE_STREAM_SETTINGS permission"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Message not found - messageId does not exist"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to unpin message in database or broadcast via WebSocket"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication, authorization, and unpinning failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Unpin message",
        "tags": [
          "stream-chat"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "messageId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Pin a message to the top (requires MANAGE_STREAM_SETTINGS permission)",
        "operationId": "StreamChatController_pinMessage",
        "parameters": [
          {
            "description": "Message identifier returned by the message API.",
            "in": "path",
            "name": "messageId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PinMessageSuccessEnvelopeDto"
                }
              }
            },
            "description": "Message pinned successfully - previous pinned message automatically unpinned"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks MANAGE_STREAM_SETTINGS permission"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Message not found - messageId does not exist"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to pin message in database or broadcast via WebSocket"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication, authorization, and pinning failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Pin message",
        "tags": [
          "stream-chat"
        ]
      }
    },
    "/v1/messages/pinned": {
      "get": {
        "description": "Get the currently pinned message for a token (requires tokenName query parameter)",
        "operationId": "StreamChatController_getPinnedMessage",
        "parameters": [
          {
            "description": "Token to look up the pinned message for.",
            "in": "query",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PinnedMessageSuccessEnvelopeDto"
                }
              }
            },
            "description": "Pinned message retrieved successfully - returns message object if pinned, or null if none"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - tokenName query parameter is missing"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token lookup and pinned message failures."
          }
        },
        "summary": "Get pinned message",
        "tags": [
          "stream-chat"
        ]
      }
    },
    "/v1/messages/stats": {
      "get": {
        "description": "Get aggregate message statistics for dashboard display",
        "operationId": "StreamChatController_getMessageStats",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MessageStatsSuccessEnvelopeDto"
                }
              }
            },
            "description": "Message statistics in the shared success envelope."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for dashboard authentication and query failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get message statistics",
        "tags": [
          "stream-chat"
        ]
      }
    },
    "/v1/moderated-tokens": {
      "get": {
        "description": "Get all tokens the authenticated user can moderate",
        "operationId": "ModeratedTokensController_getModeratedTokens",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModeratedTokensSuccessEnvelopeDto"
                }
              }
            },
            "description": "Moderated tokens retrieved successfully - returns paginated array of manageable tokens"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to retrieve moderated tokens from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get moderated tokens",
        "tags": [
          "moderated-tokens"
        ]
      }
    },
    "/v1/moderator-invites": {
      "get": {
        "description": "List invites for a token or all tokens",
        "operationId": "ModeratorInvitesController_listInvites",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModeratorInviteListSuccessEnvelopeDto"
                }
              }
            },
            "description": "Invites retrieved successfully - returns paginated array of invites"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName query parameter invalid or token does not exist"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/ModeratorInviteErrorEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/ApiErrorEnvelope"
                    }
                  ]
                }
              }
            },
            "description": "Shared error envelope for authentication, ownership, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List moderator invites",
        "tags": [
          "moderator-invites"
        ]
      },
      "post": {
        "description": "Create a new moderator invite (token or all tokens scope)",
        "operationId": "ModeratorInvitesController_createInvite",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModeratorInviteSuccessEnvelopeDto"
                }
              }
            },
            "description": "Invite created successfully - returns invite code and shareable URL"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - inviteScope is invalid (TOKEN or ALL_OWNER_TOKENS), or role not valid"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not token owner or user is banned"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool when scope is TOKEN"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to create invite in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/ModeratorInviteErrorEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/ApiErrorEnvelope"
                    }
                  ]
                }
              }
            },
            "description": "Shared error envelope for authentication, authorization, validation, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create moderator invite",
        "tags": [
          "moderator-invites"
        ]
      }
    },
    "/v1/moderator-invites/{id}": {
      "delete": {
        "description": "Revoke a moderator invite (owner only)",
        "operationId": "ModeratorInvitesController_revokeInvite",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModeratorInviteDeleteSuccessEnvelopeDto"
                }
              }
            },
            "description": "Invite revoked successfully - invite status changed and no longer usable"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not the invite creator or user is banned"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invite not found - id parameter does not match any existing invite"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to revoke invite in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/ModeratorInviteErrorEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/ApiErrorEnvelope"
                    }
                  ]
                }
              }
            },
            "description": "Shared error envelope for authentication, ownership, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Revoke moderator invite",
        "tags": [
          "moderator-invites"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "patch": {
        "description": "Update the role and/or description of a moderator invite (owner only)",
        "operationId": "ModeratorInvitesController_updateInvite",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModeratorInviteSuccessEnvelopeDto"
                }
              }
            },
            "description": "Invite updated successfully - returns updated invite"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - neither role nor description provided, or role is invalid"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not the invite creator or user is banned"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invite not found - id parameter does not match any existing invite"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to update invite in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/ModeratorInviteErrorEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/ApiErrorEnvelope"
                    }
                  ]
                }
              }
            },
            "description": "Shared error envelope for authentication, ownership, validation, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Update moderator invite",
        "tags": [
          "moderator-invites"
        ]
      }
    },
    "/v1/moderator-invites/{id}/role": {
      "parameters": [
        {
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "patch": {
        "description": "Update the role of a moderator invite (owner only)",
        "operationId": "ModeratorInvitesController_updateInviteRole",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModeratorInviteSuccessEnvelopeDto"
                }
              }
            },
            "description": "Role updated successfully - returns updated invite with new role"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - role is invalid (must be MODERATOR, MANAGER, or TECHNICAL_PRODUCER)"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not the invite creator or user is banned"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invite not found - id parameter does not match any existing invite"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to update invite in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/ModeratorInviteErrorEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/ApiErrorEnvelope"
                    }
                  ]
                }
              }
            },
            "description": "Shared error envelope for authentication, ownership, validation, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Update moderator role",
        "tags": [
          "moderator-invites"
        ]
      }
    },
    "/v1/moderator-invites/claim": {
      "post": {
        "description": "Claim an invite to become a moderator",
        "operationId": "ModeratorInvitesController_claimInvite",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ModeratorInviteClaimSuccessEnvelopeDto"
                }
              }
            },
            "description": "Invite claimed successfully - user promoted to moderator for token(s)"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - inviteCode is missing, invalid format, not found, already claimed, revoked, or expired"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user profile incomplete or user is banned"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to promote user to moderator in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/ModeratorInviteErrorEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/ApiErrorEnvelope"
                    }
                  ]
                }
              }
            },
            "description": "Shared error envelope for authentication, profile, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Claim moderator invite",
        "tags": [
          "moderator-invites"
        ]
      }
    },
    "/v1/moderator-invites/code/{code}": {
      "get": {
        "description": "Get invite details by code (public - no auth required)",
        "operationId": "ModeratorInvitesController_getInviteByCode",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicModeratorInviteSuccessEnvelopeDto"
                }
              }
            },
            "description": "Invite details retrieved successfully - returns invite scope, role, and expiration date"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invite code not found or expired - code parameter does not match any valid invite"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to retrieve invite from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/ModeratorInviteErrorEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/ApiErrorEnvelope"
                    }
                  ]
                }
              }
            },
            "description": "Shared error envelope for invite lookup failures."
          }
        },
        "summary": "Get moderator invite by code",
        "tags": [
          "moderator-invites"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "code",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/notifications/preferences": {
      "get": {
        "description": "Get push notification preferences for the authenticated user",
        "operationId": "NotificationController_getPreferences",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationPreferencesSuccessEnvelopeDto"
                }
              }
            },
            "description": "Preferences retrieved successfully"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/NotificationErrorEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/ApiErrorEnvelope"
                    }
                  ]
                }
              }
            },
            "description": "Shared authentication and service error envelope."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get notification preferences",
        "tags": [
          "Notifications"
        ]
      },
      "put": {
        "description": "Partially update push notification preferences for the authenticated user",
        "operationId": "NotificationController_updatePreferences",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePreferencesDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NotificationPreferencesSuccessEnvelopeDto"
                }
              }
            },
            "description": "Preferences updated successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - invalid preference values"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/NotificationErrorEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/ApiErrorEnvelope"
                    }
                  ]
                }
              }
            },
            "description": "Shared authentication and service error envelope."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Update notification preferences",
        "tags": [
          "Notifications"
        ]
      }
    },
    "/v1/notifications/register": {
      "post": {
        "description": "Register or update a push notification token for the authenticated user",
        "operationId": "NotificationController_registerDevice",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterDeviceDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegisterDeviceSuccessEnvelopeDto"
                }
              }
            },
            "description": "Device registered successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - invalid token or platform"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/NotificationErrorEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/ApiErrorEnvelope"
                    }
                  ]
                }
              }
            },
            "description": "Shared authentication and service error envelope."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Register push notification device",
        "tags": [
          "Notifications"
        ]
      }
    },
    "/v1/notifications/unregister": {
      "delete": {
        "description": "Deactivate a push notification token",
        "operationId": "NotificationController_unregisterDevice",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UnregisterDeviceDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UnregisterDeviceSuccessEnvelopeDto"
                }
              }
            },
            "description": "Device unregistered successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - token not found"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "anyOf": [
                    {
                      "$ref": "#/components/schemas/NotificationErrorEnvelopeDto"
                    },
                    {
                      "$ref": "#/components/schemas/ApiErrorEnvelope"
                    }
                  ]
                }
              }
            },
            "description": "Shared authentication and service error envelope."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Unregister push notification device",
        "tags": [
          "Notifications"
        ]
      }
    },
    "/v1/overseer-invites": {
      "get": {
        "description": "List all overseer invites with optional filtering",
        "operationId": "OverseerInvitesController_listInvites",
        "parameters": [
          {
            "description": "Invite status filter.",
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "enum": [
                "PENDING",
                "CLAIMED",
                "REVOKED",
                "EXPIRED"
              ],
              "type": "string"
            }
          },
          {
            "description": "Sort direction.",
            "in": "query",
            "name": "sortOrder",
            "required": false,
            "schema": {
              "enum": [
                "ASC",
                "DESC"
              ],
              "type": "string"
            }
          },
          {
            "description": "Invite field to sort by.",
            "in": "query",
            "name": "sortBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of invites to return.",
            "in": "query",
            "name": "pageSize",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "Cursor from the previous page.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerInviteListDataResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Cursor-paginated overseer invites with status and timestamps."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and invite query failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List overseer invites",
        "tags": [
          "overseer-invites"
        ]
      },
      "post": {
        "description": "Create a new invite for an overseer (admin/overseer only)",
        "operationId": "OverseerInvitesController_createInvite",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOverseerInviteDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerInviteResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Created invite with its claim URL and expiration date."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - expiresAt is not a valid ISO 8601 timestamp or is in the past"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to generate invite code or database error"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and invite creation failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create overseer invite",
        "tags": [
          "overseer-invites"
        ]
      }
    },
    "/v1/overseer-invites/{id}": {
      "delete": {
        "description": "Revoke an unused overseer invite",
        "operationId": "OverseerInvitesController_revokeInvite",
        "parameters": [
          {
            "description": "Numeric invite identifier.",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "Invite revoked; the success envelope omits its undefined data field."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invite not found - id parameter does not match any existing invite"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to update invite status in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and invite revocation failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Revoke overseer invite",
        "tags": [
          "overseer-invites"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "id",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/overseer-invites/claim": {
      "post": {
        "description": "Claim an invite to become an overseer",
        "operationId": "OverseerInvitesController_claimInvite",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InviteClaimDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Claimed invite result; this endpoint returns the promoted overseer record."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - inviteCode is missing, invalid format, not found, already claimed, revoked, or expired"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to promote user to overseer in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication and invite claim failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Claim overseer invite",
        "tags": [
          "overseer-invites"
        ]
      }
    },
    "/v1/overseer-invites/code/{code}": {
      "get": {
        "description": "Get invite details by code (public - no auth required)",
        "operationId": "OverseerInvitesController_getInviteByCode",
        "parameters": [
          {
            "description": "Invite code from the claim URL.",
            "in": "path",
            "name": "code",
            "required": true,
            "schema": {
              "maxLength": 64
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/PublicOverseerInviteInfoResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Public invite details used by the claim page."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invite not found - code parameter does not match any existing invite"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to retrieve invite from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for invite lookup failures."
          }
        },
        "summary": "Get invite by code",
        "tags": [
          "overseer-invites"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "code",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/overseer-summary": {
      "get": {
        "description": "Get platform metrics for the CCTV dashboard (admin/overseer only)",
        "operationId": "OverseerSummaryController_getSummary",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerSummaryResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Platform stream, viewer, flag, and pool counts."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to calculate platform metrics from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and platform summary failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get platform summary",
        "tags": [
          "overseer-summary"
        ]
      }
    },
    "/v1/overseer-summary/bans": {
      "get": {
        "description": "Get global user ban count",
        "operationId": "OverseerSummaryController_getBanStats",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerBanStatsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Global user ban count."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - ban stats query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and ban stats failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get ban stats",
        "tags": [
          "overseer-summary"
        ]
      }
    },
    "/v1/overseer-summary/flags": {
      "get": {
        "description": "Get content flag counts by status",
        "operationId": "OverseerSummaryController_getFlagStats",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerFlagStatsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Content flag counts by status."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - flag stats query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and flag stats failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get flag stats",
        "tags": [
          "overseer-summary"
        ]
      }
    },
    "/v1/overseer-summary/invites": {
      "get": {
        "description": "Get overseer invite counts by status",
        "operationId": "OverseerSummaryController_getInviteStats",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerInviteStatsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Overseer invite counts by status."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - invite stats query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and invite stats failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get invite stats",
        "tags": [
          "overseer-summary"
        ]
      }
    },
    "/v1/overseer-summary/token-bans": {
      "get": {
        "description": "Get delisted token count",
        "operationId": "OverseerSummaryController_getTokenBanStats",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerTokenBanStatsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Delisted token count."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - token ban stats query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and token ban stats failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get token ban stats",
        "tags": [
          "overseer-summary"
        ]
      }
    },
    "/v1/overseer-summary/users": {
      "get": {
        "description": "Get user counts (total, flagged, banned)",
        "operationId": "OverseerSummaryController_getUserStats",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerUserStatsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "User counts across the platform."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - user stats query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and user stats failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get user stats",
        "tags": [
          "overseer-summary"
        ]
      }
    },
    "/v1/overseers": {
      "get": {
        "description": "List all platform overseers with optional filtering",
        "operationId": "OverseerController_listOverseers",
        "parameters": [
          {
            "description": "Status filter.",
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "enum": [
                "ACTIVE",
                "REVOKED"
              ],
              "type": "string"
            }
          },
          {
            "description": "Sort direction.",
            "in": "query",
            "name": "sortOrder",
            "required": false,
            "schema": {
              "enum": [
                "ASC",
                "DESC"
              ],
              "type": "string"
            }
          },
          {
            "description": "Overseer field to sort by.",
            "in": "query",
            "name": "sortBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Number of overseers to return.",
            "in": "query",
            "name": "pageSize",
            "required": false,
            "schema": {
              "type": "number"
            }
          },
          {
            "description": "Cursor from the previous page.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerListDataResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Cursor-paginated overseers with status and profile details."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and overseer list failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List overseers",
        "tags": [
          "overseers"
        ]
      },
      "post": {
        "description": "Directly promote a user to overseer status (admin/overseer only). Bypasses invite flow.",
        "operationId": "OverseerController_createOverseerDirect",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOverseerDirectDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Created overseer record and profile."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - invalid address format or user is already an overseer"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to create overseer in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and overseer creation failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create overseer directly",
        "tags": [
          "overseers"
        ]
      }
    },
    "/v1/overseers/{address}": {
      "delete": {
        "description": "Revoke an overseer's platform access (admin/overseer only)",
        "operationId": "OverseerController_revokeOverseer",
        "parameters": [
          {
            "description": "GalaChain wallet address of the overseer to revoke.",
            "in": "path",
            "name": "address",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "Overseer access revoked; the success envelope omits its undefined data field."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer, or attempting to revoke their own access"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Overseer not found - address parameter does not match any existing overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to update overseer status in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and revocation failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Revoke overseer",
        "tags": [
          "overseers"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "address",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/overseers/me": {
      "get": {
        "description": "Get the authenticated user's overseer status",
        "operationId": "OverseerController_getOverseerMe",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/OverseerMeResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Current user overseer status, with null when the user is not an overseer."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to retrieve overseer status from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication and overseer status lookup failures."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get current user overseer status",
        "tags": [
          "overseers"
        ]
      }
    },
    "/v1/permissions": {
      "get": {
        "description": "Returns the effective permissions for the authenticated user on a specific token. User address is inferred from the JWT token.",
        "operationId": "PermissionsController_getUserPermissions",
        "parameters": [
          {
            "description": "Token name to check permissions for",
            "in": "query",
            "name": "tokenName",
            "required": true,
            "schema": {
              "example": "MYTOKEN"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserPermissionsResponse"
                }
              }
            },
            "description": "User permissions retrieved successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Missing or invalid tokenName parameter"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get user permissions for a token",
        "tags": [
          "Permissions"
        ]
      }
    },
    "/v1/reactions": {
      "delete": {
        "description": "Remove an emoji reaction from a pool message (reaction owner only)",
        "operationId": "ContentReactionsController_removeReaction",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RemoveReactionSuccessEnvelopeDto"
                }
              }
            },
            "description": "Reaction removed successfully."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Reaction not found - messageId/reactionType combination does not exist for this user"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to delete reaction from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication, authorization, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Remove reaction",
        "tags": [
          "content-reactions"
        ]
      },
      "post": {
        "description": "Add an emoji reaction to a pool message",
        "operationId": "ContentReactionsController_addReaction",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddReactionSuccessEnvelopeDto"
                }
              }
            },
            "description": "Reaction added; counts and preview users are returned."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - reactionType is invalid emoji format or messageId is not a valid UUID"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user profile incomplete or user is banned"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Message not found - messageId does not exist"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to save reaction to database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication, validation, and service failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Add reaction",
        "tags": [
          "content-reactions"
        ]
      }
    },
    "/v1/restricted-token-names": {
      "get": {
        "description": "Retrieve the list of restricted token names as newline-separated content",
        "operationId": "RestrictedTokenNamesController_getRestrictedNames",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetRestrictedNamesDto"
                }
              }
            },
            "description": "Restricted names content"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - insufficient permissions"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Get restricted token names (overseer only)",
        "tags": [
          "Restricted Token Names"
        ]
      },
      "put": {
        "description": "Replace the entire list of restricted token names with newline-separated content",
        "operationId": "RestrictedTokenNamesController_updateRestrictedNames",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetRestrictedNamesDto"
                }
              }
            },
            "description": "Restricted names updated"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid input"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - insufficient permissions"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "bearer": []
          }
        ],
        "summary": "Update restricted token names (overseer only)",
        "tags": [
          "Restricted Token Names"
        ]
      }
    },
    "/v1/roles": {
      "get": {
        "description": "Get available roles",
        "operationId": "SiteConfigController_getAvailableRoles[1]",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/AvailableRolesResponse"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Available roles retrieved successfully"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Available roles could not be retrieved."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get available roles",
        "tags": [
          "Platform Config"
        ]
      }
    },
    "/v1/stats": {
      "get": {
        "description": "Get platform-wide statistics",
        "operationId": "StatsController_getStats",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/PlatformStatsDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "GALA trading volume windows, total token count, and calculation timestamp."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Platform stats could not be retrieved."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for platform statistics failures."
          }
        },
        "summary": "Get platform-wide statistics",
        "tags": [
          "Stats"
        ]
      }
    },
    "/v1/token-bans": {
      "get": {
        "description": "List all banned tokens (admin/overseer only)",
        "operationId": "TokenBanController_listBans",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TokenBanListResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Cursor-paginated token bans with pool metadata."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and token ban listing failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List banned tokens",
        "tags": [
          "token-bans"
        ]
      },
      "post": {
        "description": "Ban a token from the platform (admin/overseer only)",
        "operationId": "TokenBanController_createBan",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateTokenBanDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TokenBanResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Created token ban with associated pool metadata."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - tokenName missing or reason exceeds max length"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not admin or overseer"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to create ban in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and token ban failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Ban a token",
        "tags": [
          "token-bans"
        ]
      }
    },
    "/v1/token-bans/{tokenName}": {
      "delete": {
        "description": "Remove a ban from a token (admin/overseer only)",
        "operationId": "TokenBanController_removeBan",
        "parameters": [
          {
            "description": "Token name resolved to a platform pool.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "Ban removed; the global success envelope omits data."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not admin or overseer"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to remove ban from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and token unban failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Unban a token",
        "tags": [
          "token-bans"
        ]
      },
      "get": {
        "description": "Get ban details for a specific token",
        "operationId": "TokenBanController_getBan",
        "parameters": [
          {
            "description": "Token name resolved to a platform pool.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "oneOf": [
                            {
                              "$ref": "#/components/schemas/TokenBanResponseDto"
                            },
                            {
                              "enum": [
                                null
                              ],
                              "nullable": true,
                              "type": "object"
                            }
                          ]
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Token ban details, or null when no ban exists."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not admin or overseer"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool or ban not found"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authorization and token ban lookup failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get token ban",
        "tags": [
          "token-bans"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens": {
      "get": {
        "description": "List all tokens",
        "operationId": "TokensController_listTokens",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TokenListResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Token results and cursor metadata; tokens is an object for a tokenName query and otherwise an array."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token list failures."
          }
        },
        "summary": "List all tokens",
        "tags": [
          "Tokens"
        ]
      },
      "post": {
        "description": "Create a new token on the bonding curve",
        "operationId": "TokensController_createToken",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterPoolDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "Token was created; the success envelope omits data."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid token configuration"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token creation failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Create a new token on the bonding curve",
        "tags": [
          "Tokens"
        ]
      }
    },
    "/v1/tokens/{tokenName}": {
      "get": {
        "description": "Get token details",
        "operationId": "TokensController_getToken",
        "parameters": [
          {
            "description": "Token name resolved to a platform pool.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TokenDetailsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Token details with cursor metadata."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token lookup failures."
          }
        },
        "summary": "Get token details",
        "tags": [
          "Tokens"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "patch": {
        "description": "Update token configuration",
        "operationId": "TokensController_updateTokenConfig",
        "parameters": [
          {
            "description": "Token name resolved to a platform pool.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateTokenConfigDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TokenPoolRecordResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Updated token pool record."
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token configuration failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Update token configuration",
        "tags": [
          "Tokens"
        ]
      }
    },
    "/v1/tokens/{tokenName}/active-users": {
      "get": {
        "description": "Get active viewers or chat participants",
        "operationId": "TokenActiveUsersController_getActiveUsers",
        "parameters": [
          {
            "in": "query",
            "name": "userAddress",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "name",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "enum": [
                "viewers",
                "chat_participants"
              ],
              "type": "string"
            }
          },
          {
            "description": "Token whose active users are returned.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ActiveUsersResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Active users with participation and truncation metadata."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for active user lookup failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get active users for token",
        "tags": [
          "Token Active Users"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/assets/animated.{ext}": {
      "get": {
        "description": "Redirects to Mux animated GIF/WebP. Supports start, end, width, height, fps params.",
        "operationId": "AssetsController_getAnimated",
        "parameters": [
          {
            "description": "Frames per second (default 15, max 30)",
            "in": "query",
            "name": "fps",
            "required": false,
            "schema": {}
          },
          {
            "description": "Width in pixels (max 640)",
            "in": "query",
            "name": "width",
            "required": false,
            "schema": {}
          },
          {
            "description": "End time in seconds",
            "in": "query",
            "name": "end",
            "required": false,
            "schema": {}
          },
          {
            "description": "Start time in seconds",
            "in": "query",
            "name": "start",
            "required": false,
            "schema": {}
          },
          {
            "description": "Format: gif or webp",
            "in": "path",
            "name": "ext",
            "required": true,
            "schema": {
              "enum": [
                "gif",
                "webp"
              ],
              "type": "string"
            }
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux animated preview"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found or no stream configured"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get animated preview",
        "tags": [
          "assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "ext",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/assets/image": {
      "get": {
        "description": "Redirects to the token pool image",
        "operationId": "AssetsController_getImage",
        "parameters": [
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "302": {
            "description": "Redirect to pool image"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found or no image available"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get token image",
        "tags": [
          "assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/assets/live.m3u8": {
      "get": {
        "description": "Redirects to Mux HLS live stream URL",
        "operationId": "AssetsController_getLiveStream",
        "parameters": [
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux HLS stream"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found or no stream configured"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get live stream",
        "tags": [
          "assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/assets/poster.jpg": {
      "get": {
        "description": "Redirects to high-res (1920x1080) thumbnail optimized for video player posters.",
        "operationId": "AssetsController_getPoster",
        "parameters": [
          {
            "description": "Override fit mode (default smartcrop)",
            "in": "query",
            "name": "fit_mode",
            "required": false,
            "schema": {}
          },
          {
            "description": "Override height (default 1080)",
            "in": "query",
            "name": "height",
            "required": false,
            "schema": {}
          },
          {
            "description": "Override width (default 1920)",
            "in": "query",
            "name": "width",
            "required": false,
            "schema": {}
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux poster thumbnail"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found or no stream configured"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get poster image",
        "tags": [
          "assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/assets/storyboard.{ext}": {
      "get": {
        "description": "Redirects to Mux storyboard sprite image. VOD only.",
        "operationId": "AssetsController_getStoryboardImage",
        "parameters": [
          {
            "description": "Format: png, jpg, or webp",
            "in": "path",
            "name": "ext",
            "required": true,
            "schema": {
              "enum": [
                "png",
                "jpg",
                "webp"
              ],
              "type": "string"
            }
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux storyboard sprite"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found or no stream configured"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get storyboard sprite sheet",
        "tags": [
          "assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "ext",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/assets/storyboard.json": {
      "get": {
        "description": "Redirects to Mux storyboard metadata JSON. VOD only.",
        "operationId": "AssetsController_getStoryboardJson",
        "parameters": [
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux storyboard JSON"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found or no stream configured"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get storyboard JSON",
        "tags": [
          "assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/assets/storyboard.vtt": {
      "get": {
        "description": "Redirects to Mux storyboard VTT for timeline hover previews. VOD only.",
        "operationId": "AssetsController_getStoryboardVtt",
        "parameters": [
          {
            "description": "Image format in VTT: webp (default jpg)",
            "in": "query",
            "name": "format",
            "required": false,
            "schema": {}
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux storyboard VTT"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found or no stream configured"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get storyboard VTT",
        "tags": [
          "assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/assets/thumbnail.{ext}": {
      "get": {
        "description": "Redirects to Mux thumbnail. Supports time, width, height, rotate, fit_mode params.",
        "operationId": "AssetsController_getThumbnail",
        "parameters": [
          {
            "description": "preserve, stretch, crop, smartcrop, or pad",
            "in": "query",
            "name": "fit_mode",
            "required": false,
            "schema": {}
          },
          {
            "description": "Height in pixels",
            "in": "query",
            "name": "height",
            "required": false,
            "schema": {}
          },
          {
            "description": "Width in pixels",
            "in": "query",
            "name": "width",
            "required": false,
            "schema": {}
          },
          {
            "description": "Thumbnail time in seconds",
            "in": "query",
            "name": "time",
            "required": false,
            "schema": {}
          },
          {
            "description": "Image format: jpg, png, or webp",
            "in": "path",
            "name": "ext",
            "required": true,
            "schema": {
              "enum": [
                "jpg",
                "png",
                "webp"
              ],
              "type": "string"
            }
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux thumbnail"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found or no stream configured"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get stream thumbnail",
        "tags": [
          "assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "ext",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/bans": {
      "get": {
        "description": "List users banned from token",
        "operationId": "TokenBansController_listBans",
        "parameters": [
          {
            "description": "Token name whose bans are listed.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/BanListResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Cursor-paginated user bans for the token."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token ban listing failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List users banned from token",
        "tags": [
          "Token Bans"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Ban user from token",
        "operationId": "TokenBansController_banUser",
        "parameters": [
          {
            "description": "Token name whose user is banned.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateBanDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/BanResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Created ban record."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid user address"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token ban creation failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Ban user from token",
        "tags": [
          "Token Bans"
        ]
      }
    },
    "/v1/tokens/{tokenName}/bans/{userAddress}": {
      "delete": {
        "description": "Unban user from token",
        "operationId": "TokenBansController_unbanUser",
        "parameters": [
          {
            "description": "Wallet address to unban.",
            "in": "path",
            "name": "userAddress",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Token name whose user is unbanned.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "User unbanned; the success envelope omits data."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token or ban not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token unban failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Unban user from token",
        "tags": [
          "Token Bans"
        ]
      },
      "get": {
        "description": "Check if user is banned from token",
        "operationId": "TokenBansController_getBanStatus",
        "parameters": [
          {
            "description": "Wallet address to check.",
            "in": "path",
            "name": "userAddress",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Token name to check.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "oneOf": [
                            {
                              "$ref": "#/components/schemas/BanResponseDto"
                            },
                            {
                              "enum": [
                                null
                              ],
                              "nullable": true,
                              "type": "object"
                            }
                          ]
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Ban details, or null when the user is not banned."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token ban lookup failures."
          }
        },
        "summary": "Check if user is banned from token",
        "tags": [
          "Token Bans"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "userAddress",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/credentials": {
      "get": {
        "description": "Get stream key and RTMPS URL (requires START_STREAM permission)",
        "operationId": "StreamActionsController_getStreamCredentials",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/StreamCredentialsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Current stream credentials in the success envelope."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token in Authorization header"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks START_STREAM permission or no active stream"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to retrieve stream credentials"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for credential lookup failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get stream credentials",
        "tags": [
          "stream-actions"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/image": {
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Upload token image",
        "operationId": "TokensController_uploadImage",
        "parameters": [
          {
            "description": "Token name used to scope the uploaded image.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "properties": {
                  "image": {
                    "format": "binary",
                    "type": "string"
                  }
                },
                "required": [
                  "image"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "format": "uri",
                          "type": "string"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Uploaded image URL."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid file format or size"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - token owner only"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for image upload failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Upload token image",
        "tags": [
          "Tokens"
        ]
      }
    },
    "/v1/tokens/{tokenName}/recordings": {
      "get": {
        "description": "List all video recordings for a token with pagination",
        "operationId": "RecordingController_listRecordings",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordingListSuccessEnvelopeDto"
                }
              }
            },
            "description": "Recordings retrieved successfully - returns paginated array of recording metadata"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - skip/limit parameters invalid"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to retrieve recordings from Mux"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token lookup and recording service failures."
          }
        },
        "summary": "List token recordings",
        "tags": [
          "recordings"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/recordings/{assetId}": {
      "delete": {
        "description": "Delete a recording (token owner only)",
        "operationId": "RecordingController_deleteRecording",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordingDeleteSuccessEnvelopeDto"
                }
              }
            },
            "description": "Recording deleted successfully - removed from Mux"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - only token owner can delete recordings"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Recording not found - assetId does not match any recording for this token"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to delete recording from Mux"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication and recording deletion failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Delete recording",
        "tags": [
          "recordings"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "assetId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/recordings/{assetId}/assets/animated.{ext}": {
      "get": {
        "description": "Redirects to Mux animated preview. Supports start, end, width, fps params.",
        "operationId": "RecordingAssetsController_getRecordingAnimated",
        "parameters": [
          {
            "description": "Format: gif or webp",
            "in": "path",
            "name": "ext",
            "required": true,
            "schema": {
              "enum": [
                "gif",
                "webp"
              ],
              "type": "string"
            }
          },
          {
            "description": "Mux asset ID of the recording",
            "in": "path",
            "name": "assetId",
            "required": true,
            "schema": {}
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux animated preview"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Recording not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get recording animated preview",
        "tags": [
          "recording-assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "assetId",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "ext",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/recordings/{assetId}/assets/poster.jpg": {
      "get": {
        "description": "Redirects to high-res (1920x1080) recording thumbnail for video player posters.",
        "operationId": "RecordingAssetsController_getRecordingPoster",
        "parameters": [
          {
            "description": "Mux asset ID of the recording",
            "in": "path",
            "name": "assetId",
            "required": true,
            "schema": {}
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux poster thumbnail"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Recording not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get recording poster image",
        "tags": [
          "recording-assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "assetId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/recordings/{assetId}/assets/storyboard.{ext}": {
      "get": {
        "description": "Redirects to Mux storyboard sprite image.",
        "operationId": "RecordingAssetsController_getRecordingStoryboardImage",
        "parameters": [
          {
            "description": "Format: png, jpg, or webp",
            "in": "path",
            "name": "ext",
            "required": true,
            "schema": {
              "enum": [
                "png",
                "jpg",
                "webp"
              ],
              "type": "string"
            }
          },
          {
            "description": "Mux asset ID of the recording",
            "in": "path",
            "name": "assetId",
            "required": true,
            "schema": {}
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux storyboard sprite"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Recording not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get recording storyboard sprite",
        "tags": [
          "recording-assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "assetId",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "ext",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/recordings/{assetId}/assets/storyboard.json": {
      "get": {
        "description": "Redirects to Mux storyboard metadata JSON.",
        "operationId": "RecordingAssetsController_getRecordingStoryboardJson",
        "parameters": [
          {
            "description": "Mux asset ID of the recording",
            "in": "path",
            "name": "assetId",
            "required": true,
            "schema": {}
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux storyboard JSON"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Recording not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get recording storyboard JSON",
        "tags": [
          "recording-assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "assetId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/recordings/{assetId}/assets/storyboard.vtt": {
      "get": {
        "description": "Redirects to Mux storyboard VTT for timeline hover previews.",
        "operationId": "RecordingAssetsController_getRecordingStoryboardVtt",
        "parameters": [
          {
            "description": "Mux asset ID of the recording",
            "in": "path",
            "name": "assetId",
            "required": true,
            "schema": {}
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux storyboard VTT"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Recording not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get recording storyboard VTT",
        "tags": [
          "recording-assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "assetId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/recordings/{assetId}/assets/stream.m3u8": {
      "get": {
        "description": "Redirects to Mux HLS recording playback",
        "operationId": "RecordingAssetsController_getRecordingStream",
        "parameters": [
          {
            "description": "Mux asset ID of the recording",
            "in": "path",
            "name": "assetId",
            "required": true,
            "schema": {}
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux HLS recording"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Recording not found or does not belong to this token"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get recording stream",
        "tags": [
          "recording-assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "assetId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/recordings/{assetId}/assets/thumbnail.{ext}": {
      "get": {
        "description": "Redirects to Mux recording thumbnail. Supports time, width, height params.",
        "operationId": "RecordingAssetsController_getRecordingThumbnail",
        "parameters": [
          {
            "description": "Image format: jpg, png, or webp",
            "in": "path",
            "name": "ext",
            "required": true,
            "schema": {
              "enum": [
                "jpg",
                "png",
                "webp"
              ],
              "type": "string"
            }
          },
          {
            "description": "Mux asset ID of the recording",
            "in": "path",
            "name": "assetId",
            "required": true,
            "schema": {}
          },
          {
            "description": "Token name identifier",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "301": {
            "description": "Redirect to Mux recording thumbnail"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Recording not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "summary": "Get recording thumbnail",
        "tags": [
          "recording-assets"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "assetId",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "ext",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/recordings/{assetId}/download": {
      "get": {
        "description": "Get download URL for a recording (token owner only)",
        "operationId": "RecordingController_getRecordingDownload",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RecordingDownloadSuccessEnvelopeDto"
                }
              }
            },
            "description": "Download info retrieved successfully - URL only provided to token owner"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - only token owner can download recordings"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Recording not found - assetId does not match any recording for this token"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to prepare download"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for authentication and download preparation failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get recording download",
        "tags": [
          "recordings"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "assetId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/reset-key": {
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Reset the RTMPS stream key for a token",
        "operationId": "StreamActionsController_resetStreamKey",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/StreamCredentialsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Stream key reset successfully; new credentials are returned in the success envelope."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token in Authorization header"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks RESET_STREAM_KEY permission or user is banned"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - Mux API failure or database error while resetting stream key"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for stream key reset failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Reset stream key",
        "tags": [
          "stream-actions"
        ]
      }
    },
    "/v1/tokens/{tokenName}/role": {
      "get": {
        "description": "Get user role for a token",
        "operationId": "TokensController_getUserRole",
        "parameters": [
          {
            "description": "Token name resolved to a platform pool.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/UserRoleResponse"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Effective user role and access source for the token."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token role failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get user role for a token",
        "tags": [
          "Tokens"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/simulcasts": {
      "get": {
        "description": "List all simulcast targets for a token",
        "operationId": "SimulcastsController_getSimulcastTargets",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/SimulcastTargetResponseDto"
                          },
                          "type": "array"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Mux simulcast targets for this token, returned as an array in the success envelope."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token in Authorization header"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks MANAGE_SIMULCAST permission"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to retrieve simulcast configuration"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for simulcast lookup failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get simulcast targets",
        "tags": [
          "simulcasts"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Add a new simulcast target for multi-platform streaming",
        "operationId": "SimulcastsController_addSimulcastTarget",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateSimulcastTargetDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/SimulcastTargetResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Created Mux simulcast target in the success envelope."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - platform is invalid, URL is malformed or missing, or streamKey is missing"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token in Authorization header"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks MANAGE_SIMULCAST permission or user is banned"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to create simulcast target in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for simulcast target creation failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Add simulcast target",
        "tags": [
          "simulcasts"
        ]
      }
    },
    "/v1/tokens/{tokenName}/simulcasts/{targetId}": {
      "delete": {
        "description": "Remove a simulcast target",
        "operationId": "SimulcastsController_removeSimulcastTarget",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "Target was removed; the success envelope omits data."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token in Authorization header"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks MANAGE_SIMULCAST permission or user is banned"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found or simulcast targetId does not exist for this token"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to delete simulcast target from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for simulcast target removal failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Remove simulcast target",
        "tags": [
          "simulcasts"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        },
        {
          "in": "path",
          "name": "targetId",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/start-stream": {
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Start a stream for a token (requires START_STREAM permission)",
        "operationId": "StreamActionsController_startStream",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/StreamCredentialsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Stream started successfully; credentials are returned in the success envelope."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - stream already active, Mux connection failed, or test mode query parameter is invalid"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token in Authorization header"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks START_STREAM permission, global streaming is disabled, user is banned, or profile incomplete"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any existing pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - Mux API failure or database error while creating stream"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for stream start failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Start streaming",
        "tags": [
          "stream-actions"
        ]
      }
    },
    "/v1/tokens/{tokenName}/stats": {
      "get": {
        "description": "Get token stats",
        "operationId": "TokensController_getTokenStats",
        "parameters": [
          {
            "description": "Token name resolved to a platform pool.",
            "in": "path",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TokenStatsResponse"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Holder, chat, comment, and connected-room counts."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token statistics failures."
          }
        },
        "summary": "Get token stats",
        "tags": [
          "Tokens"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/tokens/{tokenName}/stop-stream": {
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Stop the current stream",
        "operationId": "StreamActionsController_stopStream",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "Stream stopped successfully; the success envelope omits data."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token in Authorization header"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user lacks STOP_STREAM permission or user is banned"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found or stream not currently active"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - Mux API failure or database error while stopping stream"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for stream stop failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Stop stream",
        "tags": [
          "stream-actions"
        ]
      }
    },
    "/v1/tokens/{tokenName}/stream/disable": {
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Disable streaming for token (admin/overseer)",
        "operationId": "StreamActionsController_disableStream",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/StreamControlStatusResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Streaming control status after disabling."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for stream control failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Disable streaming for token (admin/overseer)",
        "tags": [
          "stream-actions"
        ]
      }
    },
    "/v1/tokens/{tokenName}/stream/enable": {
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "description": "Enable streaming for token (admin/overseer)",
        "operationId": "StreamActionsController_enableStream",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/StreamControlStatusResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Streaming control status after enabling."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for stream control failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Enable streaming for token (admin/overseer)",
        "tags": [
          "stream-actions"
        ]
      }
    },
    "/v1/tokens/{tokenName}/trades": {
      "get": {
        "description": "Get paginated trade history for a token",
        "operationId": "TradeController_getTradeRecords",
        "parameters": [
          {
            "description": "Ignored; tokenName is resolved from the path.",
            "in": "query",
            "name": "tokenName",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor from previous response for pagination. Omit for first page.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "example": "eyJpZCI6MTIzLCJjcmVhdGVkQXQiOiIyMDI0LTAxLTAxVDAwOjAwOjAwWiJ9",
              "type": "string"
            }
          },
          {
            "description": "Number of items per page (default: 50, max: 1000)",
            "in": "query",
            "name": "pageSize",
            "required": false,
            "schema": {
              "example": 20,
              "type": "number"
            }
          },
          {
            "description": "Search query string",
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Field to sort by (must be in allowed list)",
            "in": "query",
            "name": "sortBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sort order (default: DESC)",
            "in": "query",
            "name": "sortOrder",
            "required": false,
            "schema": {
              "enum": [
                "ASC",
                "DESC"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TradeHistoryResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Cursor-paginated trade history."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - tokenName missing or invalid, or skip/limit parameters invalid"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found - tokenName does not match any pool"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token trade history failures."
          }
        },
        "summary": "Get trade history",
        "tags": [
          "trade"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "tokenName",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/trades": {
      "get": {
        "description": "Query trades with flexible filtering by token or user address",
        "operationId": "PlatformTradesController_getTrades",
        "parameters": [
          {
            "in": "query",
            "name": "maxAmount",
            "required": false,
            "schema": {
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "minAmount",
            "required": false,
            "schema": {
              "minimum": 0,
              "type": "number"
            }
          },
          {
            "in": "query",
            "name": "endDate",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "startDate",
            "required": false,
            "schema": {
              "format": "date-time",
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "txnType",
            "required": false,
            "schema": {
              "enum": [
                "BUY",
                "SELL"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "userAddress",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "tokenName",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Cursor from previous response for pagination. Omit for first page.",
            "in": "query",
            "name": "cursor",
            "required": false,
            "schema": {
              "example": "eyJpZCI6MTIzLCJjcmVhdGVkQXQiOiIyMDI0LTAxLTAxVDAwOjAwOjAwWiJ9",
              "type": "string"
            }
          },
          {
            "description": "Number of items per page (default: 50, max: 1000)",
            "in": "query",
            "name": "pageSize",
            "required": false,
            "schema": {
              "example": 20,
              "type": "number"
            }
          },
          {
            "description": "Search query string",
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Field to sort by (must be in allowed list)",
            "in": "query",
            "name": "sortBy",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Sort order (default: DESC)",
            "in": "query",
            "name": "sortOrder",
            "required": false,
            "schema": {
              "enum": [
                "ASC",
                "DESC"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TradeHistoryResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Filtered cursor-paginated trade history."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - either tokenName or userAddress must be provided, invalid txnType, invalid dates, or skip/limit invalid"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for trade query failures."
          }
        },
        "summary": "Query trades",
        "tags": [
          "trade"
        ]
      }
    },
    "/v1/trading/fee": {
      "get": {
        "description": "Returns the launchpad fee amount from GalaChain. Cached for 1 hour.",
        "operationId": "TradingQuotesController_getFee",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/FeeAmountResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Fee amount in the success envelope."
          },
          "503": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "GalaChain unavailable"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for fee lookup failures."
          }
        },
        "summary": "Get launchpad fee amount",
        "tags": [
          "trading"
        ]
      }
    },
    "/v1/trading/premint-quote": {
      "get": {
        "description": "Calculates token output for pre-mint (supply = 0). No chain call — instant response.",
        "operationId": "TradingQuotesController_getPremintQuote",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TradeAmountResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Calculated pre-mint quote in the success envelope."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid amount parameter"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for pre-mint quote failures."
          }
        },
        "summary": "Calculate pre-mint quote",
        "tags": [
          "trading"
        ]
      }
    },
    "/v1/trading/quote": {
      "get": {
        "description": "Calculates trade amounts using local bonding curve math. No chain call — instant response.",
        "operationId": "TradingQuotesController_getQuote",
        "parameters": [
          {
            "in": "query",
            "name": "method",
            "required": true,
            "schema": {
              "enum": [
                "IN",
                "OUT"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "type",
            "required": true,
            "schema": {
              "enum": [
                "MEME",
                "NATIVE"
              ],
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "amount",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/TradeAmountResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Calculated quote in the success envelope."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid parameters"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for quote calculation failures."
          }
        },
        "summary": "Calculate trade quote",
        "tags": [
          "trading"
        ]
      }
    },
    "/v1/trading/sale-details": {
      "get": {
        "description": "Returns sale details (supply, status) for a token from GalaChain. No cache — always live.",
        "operationId": "TradingQuotesController_getSaleDetails",
        "parameters": [
          {
            "in": "query",
            "name": "tokenName",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/SaleDetailsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Current sale details in the success envelope."
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Token not found or no vault address"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for sale detail lookup failures."
          }
        },
        "summary": "Get sale details for a token",
        "tags": [
          "trading"
        ]
      }
    },
    "/v1/user-bans": {
      "get": {
        "description": "List all globally banned users (admin only)",
        "operationId": "UserBanController_listGlobalBans",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/BanListResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Cursor-paginated global ban records."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid admin API key"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for global ban listing failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List global bans",
        "tags": [
          "user-ban"
        ]
      },
      "post": {
        "description": "Ban a user from all tokens globally (admin only)",
        "operationId": "UserBanController_createGlobalBan",
        "parameters": [],
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/BanResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Global ban record created."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - userAddress invalid format or reason exceeds max length"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid admin API key"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to create ban in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for global ban creation failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Ban user globally",
        "tags": [
          "user-ban"
        ]
      }
    },
    "/v1/user-bans/{userAddress}": {
      "delete": {
        "description": "Remove global ban from a user",
        "operationId": "UserBanController_removeGlobalBan",
        "parameters": [
          {
            "description": "Wallet address to unban.",
            "in": "path",
            "name": "userAddress",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    }
                  ],
                  "not": {
                    "required": [
                      "data"
                    ]
                  }
                }
              }
            },
            "description": "Global ban removed; the success envelope omits data."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid admin API key"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Ban not found - user has no global ban"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to remove ban from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for global unban failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Unban user globally",
        "tags": [
          "user-ban"
        ]
      },
      "get": {
        "description": "Get global ban status for a specific user",
        "operationId": "UserBanController_getGlobalBan",
        "parameters": [
          {
            "description": "Wallet address to check.",
            "in": "path",
            "name": "userAddress",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "oneOf": [
                            {
                              "$ref": "#/components/schemas/BanResponseDto"
                            },
                            {
                              "enum": [
                                null
                              ],
                              "nullable": true,
                              "type": "object"
                            }
                          ]
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Global ban details, or null when no ban exists."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid admin API key"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for global ban lookup failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get global ban",
        "tags": [
          "user-ban"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "userAddress",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/users": {
      "get": {
        "description": "List platform users with flag and ban counts (admin/overseer only)",
        "operationId": "UserController_listUsers",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/UsersListResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Cursor-paginated platform user metrics."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - database query failed"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for user listing failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "List users",
        "tags": [
          "users"
        ]
      }
    },
    "/v1/users/{address}": {
      "get": {
        "description": "Get public profile information with aggregated stats and badges for a user",
        "operationId": "UserController_getProfileWithStats",
        "parameters": [
          {
            "description": "Wallet address whose public profile is returned.",
            "in": "path",
            "name": "address",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/PublicUserProfileResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Public profile with statistics, badge ladders, and live-stream status."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - address parameter not a valid wallet address format"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to aggregate user stats from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for public profile lookup failures."
          }
        },
        "summary": "Get public profile with stats",
        "tags": [
          "users"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "address",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/users/{address}/gala-balance": {
      "get": {
        "description": "Get GALA token balance for a specific user address",
        "operationId": "UserController_getUserGalaBalance",
        "parameters": [
          {
            "description": "Wallet address whose GALA balance is returned.",
            "in": "path",
            "name": "address",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GalaBalanceResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "GALA balance and price information."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - address parameter invalid format"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - blockchain query failed or service unavailable"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for GALA balance lookup failures."
          }
        },
        "summary": "Get user GALA balance by address",
        "tags": [
          "users"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "address",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/users/{address}/summary": {
      "get": {
        "description": "Get detailed user information including activity and stats (admin/overseer only)",
        "operationId": "UserController_getUserSummary",
        "parameters": [
          {
            "description": "Wallet address whose administrative summary is returned.",
            "in": "path",
            "name": "address",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/UserSummaryResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "User profile and administrative activity summary."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or admin API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not a system admin or overseer"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "User not found - address parameter does not match any existing user"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to aggregate user data from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for user summary lookup failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get user summary",
        "tags": [
          "users"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "address",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/users/{address}/tokens": {
      "get": {
        "description": "List tokens held or created by a user with optional type and status filters",
        "operationId": "UserController_fetchTokens",
        "parameters": [
          {
            "in": "query",
            "name": "search",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "status",
            "required": false,
            "schema": {
              "enum": [
                "all",
                "graduated",
                "active"
              ],
              "type": "string"
            }
          },
          {
            "description": "Optional exact token name filter.",
            "in": "query",
            "name": "tokenName",
            "required": false,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Token list mode.",
            "in": "query",
            "name": "type",
            "required": false,
            "schema": {
              "enum": [
                "held",
                "created"
              ],
              "type": "string"
            }
          },
          {
            "description": "Wallet address whose tokens are listed.",
            "in": "path",
            "name": "address",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "oneOf": [
                            {
                              "$ref": "#/components/schemas/UserTokenListResponseDto"
                            },
                            {
                              "$ref": "#/components/schemas/ProfileLaunchesResponseDto"
                            }
                          ]
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Tokens retrieved successfully - returns paginated array of holdings/created with balances and metadata\n\nCursor-paginated raw token holdings or created launch records, depending on type."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - address parameter invalid format, or skip/limit parameters invalid"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to retrieve tokens from blockchain or database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for user token listing failures."
          }
        },
        "summary": "Get tokens for user",
        "tags": [
          "users"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "address",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/v1/users/me": {
      "put": {
        "description": "Update user profile information (full name, profile image)",
        "operationId": "UserController_updateUserProfile",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateProfileDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/CurrentUserProfileResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Updated current user profile returned in the success envelope."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - fullName exceeds max length (255 chars) or profileImage URL is invalid"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is banned and cannot update profile"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to update profile in database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for profile update failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Update user profile",
        "tags": [
          "users"
        ]
      }
    },
    "/v1/users/me/gala-balance": {
      "get": {
        "description": "Get GALA token balance for a user address",
        "operationId": "UserController_fetchGalaBalance",
        "parameters": [
          {
            "description": "Wallet address to query.",
            "in": "query",
            "name": "userAddress",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/GalaBalanceResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "GALA balance and price information."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - userAddress query parameter missing or invalid format"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - blockchain query failed or service unavailable"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for GALA balance lookup failures."
          }
        },
        "summary": "Get GALA token balance",
        "tags": [
          "users"
        ]
      }
    },
    "/v1/users/me/image": {
      "post": {
        "description": "Upload profile image",
        "operationId": "UserController_uploadProfileImage",
        "parameters": [],
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "properties": {
                  "image": {
                    "format": "binary",
                    "type": "string"
                  }
                },
                "required": [
                  "image"
                ],
                "type": "object"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "format": "uri",
                          "type": "string"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Uploaded profile image URL."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid file format or size"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for profile image upload failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Upload profile image",
        "tags": [
          "users"
        ]
      }
    },
    "/v1/users/me/managed-tokens": {
      "get": {
        "description": "Get all tokens a user can manage (owned, moderated, or overseer access)",
        "operationId": "UserController_getManagedTokens",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ManagedTokensResponse"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Owned tokens, moderated tokens, and overseer status."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to aggregate managed tokens from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for managed-token lookup failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get managed tokens",
        "tags": [
          "users"
        ]
      }
    },
    "/v1/users/me/profile": {
      "get": {
        "description": "Get user profile information including extended fields for authenticated users",
        "operationId": "UserController_fetchUserProfile",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/CurrentUserProfileResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Current authenticated user profile."
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT token or API key"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to retrieve profile from database"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for current profile lookup failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Get current user profile",
        "tags": [
          "users"
        ]
      }
    },
    "/v1/utils/available-permissions": {
      "get": {
        "description": "Returns all available permissions with display names and descriptions, plus role presets with their permission bundles. Used for building permission selectors.",
        "operationId": "UtilsController_getAvailablePermissions",
        "parameters": [],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/AvailablePermissionsResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "All permissions and role presets available to token moderators."
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error while reading permission metadata."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for available permissions lookup failures."
          }
        },
        "summary": "Get available permissions and presets",
        "tags": [
          "Utilities"
        ]
      }
    },
    "/v1/utils/validate-token": {
      "post": {
        "description": "Check if a token name and/or symbol are available for use. Returns availability flags and any validation errors.",
        "operationId": "UtilsController_validateToken",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValidateTokenDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/ValidateTokenResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Token name and symbol availability flags."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid input"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for token validation failures."
          }
        },
        "summary": "Validate token name and symbol availability",
        "tags": [
          "Utilities"
        ]
      }
    },
    "/v1/webhooks/mux": {
      "post": {
        "description": "Receive and process Mux video streaming webhook events",
        "operationId": "WebhooksController_handleMuxWebhook",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MuxWebhookPayloadDto"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MuxWebhookAcceptedResponseDto"
                }
              }
            },
            "description": "Webhook received and processed successfully"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Bad request - webhook payload is invalid or malformed"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - invalid or missing Mux webhook signature"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to process webhook"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope returned by the application exception filter."
          }
        },
        "security": [
          {
            "muxSignature": []
          }
        ],
        "summary": "Mux webhook handler",
        "tags": [
          "webhooks"
        ]
      }
    },
    "/v1/websocket": {
      "post": {
        "description": "Send a real-time event to WebSocket subscribers (admin/overseer only)",
        "operationId": "WebSocketAdminController_emitEvent",
        "parameters": [],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "properties": {
                  "action": {
                    "enum": [
                      "trade_executed",
                      "balance_updated",
                      "trade_update_notify",
                      "stream_status",
                      "viewer_count",
                      "stream_countdown",
                      "recording_status",
                      "recordings_count_updated",
                      "download_ready",
                      "simulcast_status",
                      "stream_language_updated",
                      "chat_message",
                      "chat_status",
                      "typing_indicator",
                      "stream_chat_sent",
                      "stream_chat_updated",
                      "stream_chat_deleted",
                      "stream_chat_pinned",
                      "stream_chat_unpinned",
                      "stream_control_status_changed",
                      "send_stream_reaction",
                      "stream_reaction",
                      "content_reaction_added",
                      "content_reaction_removed",
                      "comment_created",
                      "comment_updated",
                      "comment_deleted",
                      "token_banned",
                      "token_unbanned",
                      "moderator_added",
                      "moderator_removed",
                      "moderator_invite_created",
                      "moderator_role_updated",
                      "overseer_added",
                      "overseer_removed",
                      "user_banned",
                      "user_unbanned",
                      "ban_enforcement",
                      "user_profile_updated",
                      "api_key_created",
                      "api_key_updated",
                      "api_key_revoked",
                      "holder_count_updated",
                      "pool_badge_assigned",
                      "pool_created",
                      "pool_metadata_updated",
                      "pool_social_links_updated",
                      "token_config_updated",
                      "ai_moderation_complete",
                      "ai_moderation_failed",
                      "content_flagged",
                      "flag_resolved",
                      "site_config_changed",
                      "feature_status",
                      "chat_global_status",
                      "streaming_global_status",
                      "comments_global_status",
                      "webhooks_global_status",
                      "ai_moderation_global_status",
                      "stats_updated",
                      "event"
                    ],
                    "type": "string"
                  },
                  "broadcast": {
                    "type": "boolean"
                  },
                  "payload": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "tokenName": {
                    "type": "string"
                  },
                  "userAddress": {
                    "type": "string"
                  }
                },
                "required": [
                  "action",
                  "payload"
                ],
                "type": "object"
              }
            }
          },
          "description": "Event shape selected by action; payload fields are validated against that action’s DTO.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "enum": [
                            {}
                          ],
                          "type": "object"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Event was emitted; the success envelope contains an empty data object."
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Invalid event DTO or validation error"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Unauthorized - missing or invalid JWT/API key"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Forbidden - user is not admin or overseer"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Internal server error - failed to emit event"
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for event emission failures."
          }
        },
        "security": [
          {
            "apiKeyAuth": []
          },
          {
            "bearer": []
          }
        ],
        "summary": "Emit WebSocket event to connected clients",
        "tags": [
          "websocket-admin"
        ]
      }
    },
    "/weekly-challenge": {
      "get": {
        "description": "Get weekly challenge leaderboard",
        "operationId": "WeeklyChallengeController_getLeaderboard",
        "parameters": [
          {
            "description": "Number of tokens to return (1-50, default 10)",
            "in": "query",
            "name": "limit",
            "required": false,
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/WeeklyChallengeLeaderboardResponseDto"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Leaderboard tokens and current snapshot window in the success envelope."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for leaderboard failures."
          }
        },
        "summary": "Get weekly challenge leaderboard",
        "tags": [
          "Weekly Challenge"
        ]
      }
    },
    "/weekly-challenge/history/{vaultAddress}": {
      "get": {
        "description": "Get token weekly history",
        "operationId": "WeeklyChallengeController_getTokenHistory",
        "parameters": [
          {
            "description": "Token vault address",
            "in": "path",
            "name": "vaultAddress",
            "required": true,
            "schema": {}
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/ApiSuccessEnvelopeMetadataDto"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/WeeklyChallengeSnapshotResponseDto"
                          },
                          "type": "array"
                        }
                      },
                      "required": [
                        "data"
                      ],
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Weekly snapshot history in the success envelope."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Shared error envelope for weekly history failures."
          }
        },
        "summary": "Get token weekly history",
        "tags": [
          "Weekly Challenge"
        ]
      },
      "parameters": [
        {
          "in": "path",
          "name": "vaultAddress",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    }
  },
  "servers": [
    {
      "description": "Stage",
      "url": "https://lpad-backend.stage.defi.ovh.gala.com"
    },
    {
      "description": "Production",
      "url": "https://lpad-backend-prod1.defi.gala.com"
    }
  ],
  "tags": [
    {
      "name": "AI Moderation"
    },
    {
      "name": "Analytics"
    },
    {
      "name": "api-keys"
    },
    {
      "name": "assets"
    },
    {
      "name": "auth"
    },
    {
      "name": "bundle"
    },
    {
      "name": "cache-management"
    },
    {
      "name": "Chart"
    },
    {
      "name": "Client Config"
    },
    {
      "name": "Connect Proxy"
    },
    {
      "name": "content-flags"
    },
    {
      "name": "content-reactions"
    },
    {
      "name": "Events"
    },
    {
      "name": "health"
    },
    {
      "name": "Health"
    },
    {
      "name": "holders"
    },
    {
      "name": "moderated-tokens"
    },
    {
      "name": "moderator-invites"
    },
    {
      "name": "Notifications"
    },
    {
      "name": "oembed"
    },
    {
      "name": "overseer-invites"
    },
    {
      "name": "overseer-summary"
    },
    {
      "name": "overseers"
    },
    {
      "name": "Permissions"
    },
    {
      "name": "Platform Config"
    },
    {
      "name": "recording-assets"
    },
    {
      "name": "recordings"
    },
    {
      "name": "Restricted Token Names"
    },
    {
      "name": "simulcasts"
    },
    {
      "name": "Stats"
    },
    {
      "name": "stream-actions"
    },
    {
      "name": "stream-chat"
    },
    {
      "name": "Token Active Users"
    },
    {
      "name": "Token Bans"
    },
    {
      "name": "token-bans"
    },
    {
      "name": "Tokens"
    },
    {
      "name": "trade"
    },
    {
      "name": "trading"
    },
    {
      "name": "user-ban"
    },
    {
      "name": "users"
    },
    {
      "name": "Utilities"
    },
    {
      "name": "webhooks"
    },
    {
      "name": "websocket-admin"
    },
    {
      "name": "Weekly Challenge"
    }
  ]
}
