{
    "openapi": "3.0.0",
    "paths": {
        "/metrics": {
            "get": {
                "description": "Returns all metrics in Prometheus text format for scraping.",
                "operationId": "MetricsController_getMetrics",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Prometheus metrics in text/plain format"
                    }
                },
                "summary": "Prometheus metrics",
                "tags": [
                    "Metrics"
                ]
            }
        },
        "/auth/register": {
            "post": {
                "description": "Creates a new tenant and user account. Returns JWT tokens.",
                "operationId": "AuthController_register",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RegisterDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Tenant created, JWT tokens returned"
                    },
                    "409": {
                        "description": "Email already registered"
                    }
                },
                "summary": "Register new tenant",
                "tags": [
                    "Auth"
                ]
            }
        },
        "/auth/login": {
            "post": {
                "description": "Authenticate with email and password. Returns JWT tokens.",
                "operationId": "AuthController_login",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/LoginDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Login successful, JWT tokens returned"
                    },
                    "401": {
                        "description": "Invalid credentials"
                    }
                },
                "summary": "Login",
                "tags": [
                    "Auth"
                ]
            }
        },
        "/auth/siwe/nonce": {
            "get": {
                "description": "Returns a nonce for EIP-4361 Sign-In With Ethereum flows in the dashboard.",
                "operationId": "AuthController_getSiweNonce",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "SIWE nonce returned"
                    }
                },
                "summary": "Generate SIWE nonce",
                "tags": [
                    "Auth"
                ]
            }
        },
        "/auth/passkey/challenge": {
            "get": {
                "description": "Returns a short-lived challenge for dashboard passkey registration or authentication.",
                "operationId": "AuthController_getPasskeyChallenge",
                "parameters": [
                    {
                        "name": "intent",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "default": "authenticate",
                            "type": "string",
                            "enum": [
                                "register",
                                "authenticate"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Passkey challenge returned"
                    }
                },
                "summary": "Generate passkey challenge",
                "tags": [
                    "Auth"
                ]
            }
        },
        "/auth/unified": {
            "post": {
                "description": "Single auth entrypoint for email/password, wallet SIWE, passkeys, Google OAuth, and Apple OAuth login.",
                "operationId": "AuthController_unified",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UnifiedAuthDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Authentication successful"
                    },
                    "400": {
                        "description": "Invalid method or request payload"
                    },
                    "401": {
                        "description": "Invalid credentials or invalid SIWE signature"
                    }
                },
                "summary": "Unified dashboard authentication",
                "tags": [
                    "Auth"
                ]
            }
        },
        "/auth/refresh": {
            "post": {
                "description": "Exchange a refresh token for new access + refresh tokens.",
                "operationId": "AuthController_refresh",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RefreshDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tokens refreshed"
                    },
                    "401": {
                        "description": "Invalid or expired refresh token"
                    }
                },
                "summary": "Refresh tokens",
                "tags": [
                    "Auth"
                ]
            }
        },
        "/auth/logout": {
            "post": {
                "description": "Revoke a refresh token.",
                "operationId": "AuthController_logout",
                "parameters": [
                    {
                        "name": "authorization",
                        "required": true,
                        "in": "header",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RefreshDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Logged out"
                    }
                },
                "security": [
                    {
                        "jwt": []
                    }
                ],
                "summary": "Logout",
                "tags": [
                    "Auth"
                ]
            }
        },
        "/auth/me": {
            "get": {
                "description": "Returns the authenticated user profile.",
                "operationId": "AuthController_getMe",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "User profile returned"
                    }
                },
                "security": [
                    {
                        "jwt": []
                    }
                ],
                "summary": "Get current user",
                "tags": [
                    "Auth"
                ]
            },
            "patch": {
                "deprecated": true,
                "operationId": "AuthController_updateProfileLegacy",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateProfileDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "jwt": []
                    }
                ],
                "summary": "Update profile (PATCH legacy)",
                "tags": [
                    "Auth"
                ]
            },
            "post": {
                "description": "Update the authenticated user's profile (name, company).",
                "operationId": "AuthController_updateProfile",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateProfileDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Profile updated"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "jwt": []
                    }
                ],
                "summary": "Update profile",
                "tags": [
                    "Auth"
                ]
            }
        },
        "/v1/settings/wallet-mode": {
            "get": {
                "description": "Returns the tenant's current wallet mode (custodial or connect) and Connect account address if set.",
                "operationId": "TenantSettingsController_getWalletMode",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Wallet mode info"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get wallet mode",
                "tags": [
                    "Settings"
                ]
            }
        },
        "/v1/settings/connect": {
            "get": {
                "description": "Returns all Connect-specific settings for the authenticated tenant.",
                "operationId": "TenantSettingsController_getConnectSettings",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Connect settings"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get Connect settings",
                "tags": [
                    "Settings"
                ]
            },
            "post": {
                "operationId": "TenantSettingsController_updateConnectSettingsPost",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateConnectSettingsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "tags": [
                    "Settings"
                ]
            },
            "put": {
                "description": "Update any Connect settings (OAuth, passkeys, CORS). Partial update \u2014 only include fields to change.",
                "operationId": "TenantSettingsController_updateConnectSettings",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateConnectSettingsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated settings"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update Connect settings",
                "tags": [
                    "Settings"
                ]
            }
        },
        "/v1/settings/oauth": {
            "get": {
                "description": "Returns Google and Apple OAuth Client IDs for the tenant.",
                "operationId": "TenantSettingsController_getOAuthSettings",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "OAuth settings"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get OAuth settings",
                "tags": [
                    "Settings"
                ]
            },
            "post": {
                "operationId": "TenantSettingsController_updateOAuthSettingsPost",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateOAuthSettingsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": ""
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "tags": [
                    "Settings"
                ]
            },
            "put": {
                "description": "Configure Google and/or Apple OAuth Client IDs for the tenant. These are used to validate id_tokens from your end-users.",
                "operationId": "TenantSettingsController_updateOAuthSettings",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateOAuthSettingsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated OAuth settings"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set OAuth Client IDs",
                "tags": [
                    "Settings"
                ]
            }
        },
        "/v1/settings/passkeys": {
            "get": {
                "description": "Returns the WebAuthn Relying Party configuration for the tenant.",
                "operationId": "TenantSettingsController_getPasskeySettings",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Passkey settings"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get Passkey settings",
                "tags": [
                    "Settings"
                ]
            },
            "post": {
                "operationId": "TenantSettingsController_updatePasskeySettingsPost",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdatePasskeySettingsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": ""
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "tags": [
                    "Settings"
                ]
            },
            "put": {
                "description": "Configure the WebAuthn Relying Party ID and name for your domain. The rp_id should match your DApp's domain (e.g., 'myapp.com').",
                "operationId": "TenantSettingsController_updatePasskeySettings",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdatePasskeySettingsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated passkey settings"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set Passkey RP configuration",
                "tags": [
                    "Settings"
                ]
            }
        },
        "/v1/settings/cors": {
            "get": {
                "description": "Returns the list of allowed CORS origins for the tenant's DApp domains.",
                "operationId": "TenantSettingsController_getCorsSettings",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "CORS settings"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get CORS settings",
                "tags": [
                    "Settings"
                ]
            },
            "post": {
                "operationId": "TenantSettingsController_updateCorsSettingsPost",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateCorsSettingsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": ""
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "tags": [
                    "Settings"
                ]
            },
            "put": {
                "description": "Configure which domains can make cross-origin requests to the urblock API for your tenant. Required for browser-based DApps.",
                "operationId": "TenantSettingsController_updateCorsSettings",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateCorsSettingsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Updated CORS settings"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set CORS allowed origins",
                "tags": [
                    "Settings"
                ]
            }
        },
        "/v1/networks": {
            "get": {
                "description": "List all supported blockchain networks with RPC health status.",
                "operationId": "NetworksController_list",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Networks listed"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List networks",
                "tags": [
                    "Networks"
                ]
            }
        },
        "/v1/networks/{id}": {
            "get": {
                "description": "Get details of a specific blockchain network.",
                "operationId": "NetworksController_getById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Network details returned"
                    },
                    "404": {
                        "description": "Network not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get network",
                "tags": [
                    "Networks"
                ]
            }
        },
        "/health": {
            "get": {
                "description": "Returns API health status. No authentication required.",
                "operationId": "HealthController_getHealth",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "API is healthy"
                    }
                },
                "summary": "Health check",
                "tags": [
                    "Health"
                ]
            }
        },
        "/v1/status": {
            "get": {
                "description": "Returns health status of all dependencies (database, Redis, RPC). Requires authentication.",
                "operationId": "HealthController_getStatus",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Dependency statuses returned"
                    },
                    "401": {
                        "description": "Authentication required"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Dependency status",
                "tags": [
                    "Health"
                ]
            }
        },
        "/v1/api_keys": {
            "post": {
                "description": "Create a new API key. The secret key is returned ONLY in this response.",
                "operationId": "ApiKeysController_create",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateApiKeyDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "API key created. Secret returned once."
                    }
                },
                "security": [
                    {
                        "jwt": []
                    }
                ],
                "summary": "Create API key",
                "tags": [
                    "API Keys"
                ]
            },
            "get": {
                "description": "List all API keys for the current tenant. Secret keys are never returned after creation.",
                "operationId": "ApiKeysController_list",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "API keys listed"
                    }
                },
                "security": [
                    {
                        "jwt": []
                    }
                ],
                "summary": "List API keys",
                "tags": [
                    "API Keys"
                ]
            }
        },
        "/v1/api_keys/{id}": {
            "delete": {
                "description": "Permanently revoke an API key. Cannot be undone.",
                "operationId": "ApiKeysController_revoke",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "API key revoked"
                    },
                    "404": {
                        "description": "API key not found"
                    }
                },
                "security": [
                    {
                        "jwt": []
                    }
                ],
                "summary": "Revoke API key",
                "tags": [
                    "API Keys"
                ]
            }
        },
        "/v1/api_keys/{id}/rotate": {
            "post": {
                "description": "Generate a new secret for an existing API key. Old secret immediately invalidated.",
                "operationId": "ApiKeysController_rotate",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "API key rotated. New secret returned once."
                    },
                    "404": {
                        "description": "API key not found"
                    }
                },
                "security": [
                    {
                        "jwt": []
                    }
                ],
                "summary": "Rotate API key",
                "tags": [
                    "API Keys"
                ]
            }
        },
        "/v1/tokens": {
            "post": {
                "description": "Deploy a new ERC-20, ERC-721, ERC-1155, or ERC-3643 token contract",
                "operationId": "TokensController_create",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateTokenDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Token deployed"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Deploy token",
                "tags": [
                    "Tokens"
                ]
            },
            "get": {
                "description": "List all deployed token contracts",
                "operationId": "TokensController_list",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Tokens retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List tokens",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}": {
            "get": {
                "description": "Get token details including on-chain state",
                "operationId": "TokensController_getById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Token retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Token not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get token",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/allowance": {
            "get": {
                "description": "Query ERC-20 allowance for spender",
                "operationId": "TokensController_getAllowance",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Allowance returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get allowance",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/supply": {
            "get": {
                "description": "Query total and max supply",
                "operationId": "TokensController_getSupply",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Supply returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get supply",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/nfts/{nftTokenId}": {
            "get": {
                "description": "Get individual NFT details (ERC-721/1155)",
                "operationId": "TokensController_getNft",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "nftTokenId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "NFT retrieved"
                    },
                    "400": {
                        "description": "Invalid nftTokenId"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "NFT not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get NFT",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/locked/{nftTokenId}": {
            "get": {
                "description": "Check if an SBT (Soulbound Token / EIP-5192) is locked. Always returns true for existing tokens.",
                "operationId": "TokensController_getLocked",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "nftTokenId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lock status retrieved"
                    },
                    "400": {
                        "description": "Invalid nftTokenId or not an SBT"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Token not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get SBT lock status",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/nfts": {
            "get": {
                "description": "List NFTs in a token contract",
                "operationId": "TokensController_listNfts",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "NFTs retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List NFTs",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/pause": {
            "post": {
                "description": "Pause all transfers on the token contract",
                "operationId": "TokensController_pause",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Token paused"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Pause token",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/unpause": {
            "post": {
                "description": "Resume transfers on the token contract",
                "operationId": "TokensController_unpause",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Token unpaused"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Unpause token",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/mint_batch": {
            "post": {
                "description": "Batch mint ERC-1155 tokens",
                "operationId": "TokensController_mintBatch",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MintBatchDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Batch minted"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Mint batch",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/transfer_batch": {
            "post": {
                "description": "Batch transfer ERC-1155 tokens",
                "operationId": "TokensController_transferBatch",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TransferBatchDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Batch transferred"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Transfer batch",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/burn_batch": {
            "post": {
                "description": "Batch burn ERC-1155 tokens",
                "operationId": "TokensController_burnBatch",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/BurnBatchDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Batch burned"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Burn batch",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/balance": {
            "get": {
                "description": "Query token balance for address",
                "operationId": "TokensController_getBalance",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Balance returned"
                    },
                    "400": {
                        "description": "Invalid nft_token_id"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get balance",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/approved": {
            "get": {
                "description": "Query approved address for NFT",
                "operationId": "TokensController_getApproved",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Approved address returned"
                    },
                    "400": {
                        "description": "Invalid nft_token_id"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get approved",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/token_by_index": {
            "get": {
                "description": "Query the NFT token ID at a given index (ERC-721 Enumerable)",
                "operationId": "TokensController_getTokenByIndex",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Token ID returned"
                    },
                    "400": {
                        "description": "Invalid index"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get token by index",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/token_of_owner_by_index": {
            "get": {
                "description": "Query the NFT token ID owned by an address at a given index (ERC-721 Enumerable)",
                "operationId": "TokensController_getTokenOfOwnerByIndex",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Token ID returned"
                    },
                    "400": {
                        "description": "Invalid index"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get token of owner by index",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/royalty_info": {
            "get": {
                "description": "Query ERC-2981 royaltyInfo for a given token and sale price",
                "operationId": "TokensController_getRoyaltyInfo",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Royalty info returned"
                    },
                    "400": {
                        "description": "Invalid parameters"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get royalty info",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/approval_for_all": {
            "get": {
                "description": "Check if operator is approved for all tokens",
                "operationId": "TokensController_isApprovedForAll",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Approval status returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check approval for all",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/balance_batch": {
            "get": {
                "description": "Query batch balances (ERC-1155)",
                "operationId": "TokensController_balanceOfBatch",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Batch balances returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get balance batch",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/token_uri": {
            "get": {
                "description": "Query NFT metadata URI",
                "operationId": "TokensController_getTokenUri",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Token URI returned"
                    },
                    "400": {
                        "description": "Invalid nft_token_id"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get token URI",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/token_exists": {
            "get": {
                "description": "Check if ERC-1155 token ID exists",
                "operationId": "TokensController_tokenExists",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Token existence result returned"
                    },
                    "400": {
                        "description": "Invalid nft_token_id"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check token exists",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/transfer_ownership": {
            "post": {
                "description": "Transfer contract admin/ownership to a new address via the Factory",
                "operationId": "TokensController_transferOwnership",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TransferOwnershipDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Ownership transfer queued"
                    },
                    "400": {
                        "description": "Invalid request or token not deployed"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Token not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Transfer ownership",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/grant_roles": {
            "post": {
                "description": "Solady OwnableRoles: grant role bitmask to an address (admin only)",
                "operationId": "TokensController_grantRoles",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/GrantRolesDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Grant roles queued"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Grant roles",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/revoke_roles": {
            "post": {
                "description": "Solady OwnableRoles: revoke role bitmask from an address (admin only)",
                "operationId": "TokensController_revokeRoles",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RevokeRolesDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Revoke roles queued"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Revoke roles",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/request_ownership_handover": {
            "post": {
                "description": "Solady Ownable 2-step: requester (new owner candidate) requests handover. Owner then accepts via complete_ownership_handover.",
                "operationId": "TokensController_requestOwnershipHandover",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/OwnershipHandoverDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Request ownership handover",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/cancel_ownership_handover": {
            "post": {
                "description": "Solady Ownable 2-step: requester cancels their handover request.",
                "operationId": "TokensController_cancelOwnershipHandover",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/OwnershipHandoverDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Cancel ownership handover",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/complete_ownership_handover": {
            "post": {
                "description": "Solady Ownable 2-step: current owner accepts the handover request from `pending_owner`.",
                "operationId": "TokensController_completeOwnershipHandover",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CompleteHandoverDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Complete ownership handover",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/supports_interface": {
            "get": {
                "description": "Check if a deployed contract supports a specific interface (ERC-165)",
                "operationId": "TokensController_supportsInterface",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Interface support result returned"
                    },
                    "400": {
                        "description": "Invalid interface_id"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check interface support",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/{id}/ownership_handover": {
            "get": {
                "description": "Check if a pending ownership handover exists and when it expires (Solady OwnableRoles only)",
                "operationId": "TokensController_getOwnershipHandover",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Handover status returned"
                    },
                    "400": {
                        "description": "Not a Solady token or not deployed"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Token not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check ownership handover",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/tokens/factory/total_deployed": {
            "get": {
                "description": "Get the total number of contracts deployed by the factory on a network",
                "operationId": "TokensController_getFactoryTotalDeployed",
                "parameters": [
                    {
                        "name": "network_id",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Total deployed count returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get factory total deployed",
                "tags": [
                    "Tokens"
                ]
            }
        },
        "/v1/webhook_endpoints": {
            "post": {
                "description": "Create a new webhook endpoint to receive event notifications",
                "operationId": "WebhooksController_create",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateWebhookEndpointDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Webhook endpoint created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Create endpoint",
                "tags": [
                    "Webhooks"
                ]
            },
            "get": {
                "description": "List all webhook endpoints",
                "operationId": "WebhooksController_list",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Webhook endpoints retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List endpoints",
                "tags": [
                    "Webhooks"
                ]
            }
        },
        "/v1/webhook_endpoints/{id}": {
            "get": {
                "description": "Retrieve a webhook endpoint by ID",
                "operationId": "WebhooksController_retrieve",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Webhook endpoint retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Endpoint not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Retrieve endpoint",
                "tags": [
                    "Webhooks"
                ]
            },
            "put": {
                "deprecated": true,
                "description": "DEPRECATED. Use POST /v1/webhook_endpoints/:id (Stripe convention).",
                "operationId": "WebhooksController_updateLegacy",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateWebhookEndpointDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Webhook endpoint updated"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Endpoint not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update endpoint (PUT \u2014 legacy)",
                "tags": [
                    "Webhooks"
                ]
            },
            "post": {
                "description": "Update a webhook endpoint (url, events, description, metadata) \u2014 Stripe-style POST.",
                "operationId": "WebhooksController_update",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateWebhookEndpointDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Webhook endpoint updated"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Endpoint not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update endpoint",
                "tags": [
                    "Webhooks"
                ]
            },
            "delete": {
                "description": "Delete a webhook endpoint",
                "operationId": "WebhooksController_delete",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Webhook endpoint deleted"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Endpoint not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Delete endpoint",
                "tags": [
                    "Webhooks"
                ]
            }
        },
        "/v1/webhook_endpoints/{id}/deliveries": {
            "get": {
                "description": "List webhook deliveries for an endpoint with filtering and pagination",
                "operationId": "WebhooksController_listDeliveries",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "status",
                        "required": false,
                        "in": "query",
                        "description": "Filter by status (pending, delivered, failed)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "required": false,
                        "in": "query",
                        "description": "Max results (1-100, default 25)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "starting_after",
                        "required": false,
                        "in": "query",
                        "description": "Cursor for pagination (delivery ID)",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Deliveries retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Endpoint not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List deliveries",
                "tags": [
                    "Webhooks"
                ]
            }
        },
        "/v1/webhook_deliveries/{id}/retry": {
            "post": {
                "description": "Re-enqueue a failed webhook delivery for retry",
                "operationId": "WebhookDeliveriesController_retry",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Delivery retry enqueued"
                    },
                    "400": {
                        "description": "Delivery not retryable"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Delivery not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Retry delivery",
                "tags": [
                    "Webhook Deliveries"
                ]
            }
        },
        "/v1/webhook_events": {
            "get": {
                "description": "List webhook events dispatched for your tenant",
                "operationId": "WebhookEventsController_list",
                "parameters": [
                    {
                        "name": "type",
                        "required": false,
                        "in": "query",
                        "description": "Filter by event type (e.g. token.deployed)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "required": false,
                        "in": "query",
                        "description": "Max results (1-100, default 25)",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "starting_after",
                        "required": false,
                        "in": "query",
                        "description": "Cursor for pagination (event ID)",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Events retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List events",
                "tags": [
                    "Webhook Events"
                ]
            }
        },
        "/v1/tenant-features": {
            "get": {
                "description": "List self-service feature flags configured for the authenticated tenant.",
                "operationId": "TenantFeaturesController_list",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Tenant features listed"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List tenant features",
                "tags": [
                    "TenantFeatures"
                ]
            }
        },
        "/v1/tenant-features/{feature}": {
            "put": {
                "deprecated": true,
                "operationId": "TenantFeaturesController_updateLegacy",
                "parameters": [
                    {
                        "name": "feature",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateTenantFeatureDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update feature (PUT legacy)",
                "tags": [
                    "TenantFeatures"
                ]
            },
            "post": {
                "description": "Enable or disable a supported feature flag for the authenticated tenant.",
                "operationId": "TenantFeaturesController_update",
                "parameters": [
                    {
                        "name": "feature",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateTenantFeatureDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tenant feature updated"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid feature"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update tenant feature",
                "tags": [
                    "TenantFeatures"
                ]
            }
        },
        "/v1/tokens/{id}/mint": {
            "post": {
                "description": "Mint new tokens to an address",
                "operationId": "TransactionsController_mint",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MintDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Mint transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Mint tokens",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/transfer": {
            "post": {
                "description": "Transfer tokens to an address",
                "operationId": "TransactionsController_transfer",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TransferDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Transfer transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Transfer tokens",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/burn": {
            "post": {
                "description": "Burn tokens from holder",
                "operationId": "TransactionsController_burn",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/BurnDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Burn transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Burn tokens",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/approve": {
            "post": {
                "description": "Approve an address to spend tokens",
                "operationId": "TransactionsController_approve",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ApproveDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Approve transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Approve spender",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/transfer_from": {
            "post": {
                "description": "Transfer tokens using allowance",
                "operationId": "TransactionsController_transferFrom",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TransferFromDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "TransferFrom transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Transfer from",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/nfts/{nftTokenId}/metadata": {
            "post": {
                "description": "Update NFT metadata URI",
                "operationId": "TransactionsController_setTokenUri",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "nftTokenId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateMetadataDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Metadata update transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set NFT metadata",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/transfer_and_call": {
            "post": {
                "description": "ERC-1363 transferAndCall \u2014 transfer tokens and notify receiver contract",
                "operationId": "TransactionsController_transferAndCall",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TransferAndCallDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Transfer and call transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Transfer and call",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/transfer_from_and_call": {
            "post": {
                "description": "ERC-1363 transferFromAndCall \u2014 transfer tokens on behalf and notify receiver contract",
                "operationId": "TransactionsController_transferFromAndCall",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TransferFromAndCallDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Transfer from and call transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Transfer from and call",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/approve_and_call": {
            "post": {
                "description": "ERC-1363 approveAndCall \u2014 approve tokens and notify spender contract",
                "operationId": "TransactionsController_approveAndCall",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ApproveAndCallDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Approve and call transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Approve and call",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/permit2_transfer": {
            "post": {
                "description": "Gasless ERC-20 transfer via Uniswap Permit2 \u2014 server signs off-chain, platform wallet relays on-chain (ERC20_SOLADY only)",
                "operationId": "TransactionsController_permit2Transfer",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/Permit2TransferDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Permit2 transfer transaction created"
                    },
                    "400": {
                        "description": "Invalid request or unsupported token standard"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Permit2 transfer",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/royalty": {
            "post": {
                "description": "Set default royalty for token contract",
                "operationId": "TransactionsController_setRoyalty",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetRoyaltyDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Royalty set transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set royalty",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/set_approval_for_all": {
            "post": {
                "description": "Approve/revoke operator for all tokens",
                "operationId": "TransactionsController_setApprovalForAll",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetApprovalForAllDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Approval transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set approval for all",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/burn_from": {
            "post": {
                "description": "Burn tokens using allowance",
                "operationId": "TransactionsController_burnFrom",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/BurnFromDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "BurnFrom transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Burn from",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/nfts/{nftTokenId}/royalty": {
            "post": {
                "description": "Set royalty for specific NFT",
                "operationId": "TransactionsController_setTokenRoyalty",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "nftTokenId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetTokenRoyaltyDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Token royalty set"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set token royalty",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/set_uri": {
            "post": {
                "description": "Set base URI for ERC-1155",
                "operationId": "TransactionsController_setUri",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetUriDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "URI set"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set URI",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/set_base_uri": {
            "post": {
                "description": "Set base URI for ERC-721",
                "operationId": "TransactionsController_setBaseUri",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetBaseUriDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Base URI set"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set base URI",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/permit": {
            "post": {
                "description": "Submit a signed EIP-2612 permit for gasless approval",
                "operationId": "TransactionsController_permit",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SubmitPermitDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Permit transaction created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Permit (EIP-2612)",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/tokens/{id}/permit_info": {
            "get": {
                "description": "Get nonce and domain separator for building EIP-2612 permit signatures",
                "operationId": "TransactionsController_permitInfo",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "owner",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Permit info returned"
                    },
                    "400": {
                        "description": "Invalid request (not ERC20_SOLADY)"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Permit info (EIP-2612)",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/transactions": {
            "get": {
                "description": "List all transactions with pagination and filters",
                "operationId": "TransactionsController_list",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Transactions retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List transactions",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/transactions/{id}": {
            "get": {
                "description": "Get transaction details and on-chain status",
                "operationId": "TransactionsController_getById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Transaction retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Transaction not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get transaction",
                "tags": [
                    "Transactions"
                ]
            }
        },
        "/v1/billing/plans": {
            "get": {
                "description": "List available billing plans with fiat and crypto pricing",
                "operationId": "BillingController_listPlans",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Plans retrieved"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "List plans",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/checkout": {
            "post": {
                "description": "Create a Stripe Checkout session for plan upgrade",
                "operationId": "BillingController_createCheckout",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateCheckoutDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Checkout session created"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "503": {
                        "description": "Stripe not configured"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Create Stripe checkout",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/crypto_checkout": {
            "post": {
                "description": "Create a crypto payment request (USDT/USDC)",
                "operationId": "BillingController_createCryptoCheckout",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateCryptoCheckoutDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Crypto checkout created"
                    },
                    "503": {
                        "description": "Crypto billing not configured"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Create crypto checkout",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/crypto_checkout/{id}": {
            "get": {
                "description": "Check the status of a crypto payment",
                "operationId": "BillingController_getCryptoPaymentStatus",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Payment status retrieved"
                    },
                    "404": {
                        "description": "Payment not found"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Get crypto payment status",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/activate": {
            "post": {
                "description": "Activate a plan manually (requires admin secret)",
                "operationId": "BillingController_activatePlan",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ActivatePlanDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Plan activated"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "Invalid admin secret"
                    }
                },
                "summary": "Manual plan activation",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/payments/{id}/confirm": {
            "post": {
                "description": "Confirm a crypto payment and activate the plan (requires admin secret)",
                "operationId": "BillingController_confirmPayment",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ConfirmPaymentDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Payment confirmed"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "Invalid admin secret"
                    },
                    "404": {
                        "description": "Payment not found"
                    }
                },
                "summary": "Confirm payment",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/admin/payments": {
            "get": {
                "description": "List all pending payments across tenants (requires admin secret)",
                "operationId": "BillingController_adminListPendingPayments",
                "parameters": [
                    {
                        "name": "limit",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Pending payments retrieved"
                    },
                    "403": {
                        "description": "Invalid admin secret"
                    }
                },
                "summary": "List all pending payments (admin)",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/payments": {
            "get": {
                "description": "List billing payment history",
                "operationId": "BillingController_listPayments",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Payments retrieved"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "List payments",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/subscription": {
            "get": {
                "description": "Get current tenant subscription",
                "operationId": "BillingController_getSubscription",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Subscription retrieved"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Get subscription",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/portal": {
            "post": {
                "description": "Create Stripe Customer Portal session",
                "operationId": "BillingController_createPortal",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Portal session created"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Create portal session",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/invoices": {
            "get": {
                "description": "List Stripe invoices for tenant",
                "operationId": "BillingController_listInvoices",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Invoices retrieved"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "List invoices",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/usage": {
            "get": {
                "description": "Get current billing usage for tenant",
                "operationId": "BillingController_getUsage",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Usage retrieved"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Get usage",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/billing/webhook": {
            "post": {
                "description": "Handle Stripe webhook events",
                "operationId": "BillingController_handleWebhook",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Webhook processed"
                    },
                    "201": {
                        "description": ""
                    }
                },
                "summary": "Stripe webhook",
                "tags": [
                    "Billing"
                ]
            }
        },
        "/v1/price_feeds": {
            "get": {
                "description": "List Chainlink price feeds available per network",
                "operationId": "ChainlinkController_listPriceFeeds",
                "parameters": [
                    {
                        "name": "network",
                        "required": false,
                        "in": "query",
                        "description": "Filter by network",
                        "schema": {
                            "example": "polygon_amoy",
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Price feeds listed"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List price feeds",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/price_feeds/{pair}": {
            "get": {
                "description": "Get current price from Chainlink AggregatorV3",
                "operationId": "ChainlinkController_getPriceFeed",
                "parameters": [
                    {
                        "name": "pair",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "network",
                        "required": false,
                        "in": "query",
                        "description": "Network to query",
                        "schema": {
                            "example": "polygon",
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Price data returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Price feed not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get current price",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/price_feeds/{pair}/rounds": {
            "get": {
                "description": "Get historical round data from Chainlink price feed",
                "operationId": "ChainlinkController_getPriceFeedRounds",
                "parameters": [
                    {
                        "name": "pair",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "network",
                        "required": false,
                        "in": "query",
                        "description": "Network to query",
                        "schema": {
                            "example": "polygon",
                            "type": "string"
                        }
                    },
                    {
                        "name": "count",
                        "required": false,
                        "in": "query",
                        "description": "Number of past rounds to return",
                        "schema": {
                            "example": 10,
                            "type": "number"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Round data returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Price feed not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get price rounds",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/price_feeds/{pair}/config": {
            "get": {
                "description": "Get price feed consumer contract configuration",
                "operationId": "ChainlinkController_getPriceFeedConfig",
                "parameters": [
                    {
                        "name": "pair",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "network",
                        "required": false,
                        "in": "query",
                        "description": "Network to query",
                        "schema": {
                            "example": "polygon",
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Price feed config returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Price feed not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get price feed config",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/price_feeds/{pair}/max_age": {
            "put": {
                "deprecated": true,
                "operationId": "ChainlinkController_updatePriceFeedMaxAgeLegacy",
                "parameters": [
                    {
                        "name": "pair",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "network",
                        "required": false,
                        "in": "query",
                        "description": "Network to query",
                        "schema": {
                            "example": "polygon",
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateMaxAgeDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update price feed max age (PUT legacy)",
                "tags": [
                    "Chainlink"
                ]
            },
            "post": {
                "description": "Update max age on price feed consumer contract",
                "operationId": "ChainlinkController_updatePriceFeedMaxAge",
                "parameters": [
                    {
                        "name": "pair",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "network",
                        "required": false,
                        "in": "query",
                        "description": "Network to query",
                        "schema": {
                            "example": "polygon",
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateMaxAgeDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Max age update transaction created"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Price feed not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update price feed max age",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/vrf/requests": {
            "post": {
                "description": "Request verifiable random words via Chainlink VRF v2.5",
                "operationId": "ChainlinkController_createVrfRequest",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateVrfRequestDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "VRF request created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Consumer not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Request VRF random words",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/vrf/requests/{id}": {
            "get": {
                "description": "Get VRF request status and random words",
                "operationId": "ChainlinkController_getVrfRequest",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "VRF request retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "VRF request not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get VRF request",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/vrf/requests/{id}/result": {
            "get": {
                "description": "Get random words result from on-chain VRF consumer",
                "operationId": "ChainlinkController_getVrfResult",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "VRF result returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "VRF request not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get VRF result",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/vrf/consumers/{id}/config": {
            "get": {
                "description": "Get VRF consumer contract configuration from chain",
                "operationId": "ChainlinkController_getVrfConsumerConfig",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "VRF consumer config returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Consumer not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get VRF consumer config",
                "tags": [
                    "Chainlink"
                ]
            },
            "put": {
                "deprecated": true,
                "operationId": "ChainlinkController_updateVrfConsumerConfigLegacy",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateVrfConfigDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update VRF config (PUT legacy)",
                "tags": [
                    "Chainlink"
                ]
            },
            "post": {
                "description": "Update VRF consumer contract configuration on-chain",
                "operationId": "ChainlinkController_updateVrfConsumerConfig",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateVrfConfigDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Config update transaction created"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Consumer not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update VRF consumer config",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/vrf/consumers": {
            "post": {
                "description": "Deploy a new Chainlink VRF v2.5 consumer contract via Factory",
                "operationId": "ChainlinkController_deployVrfConsumer",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DeployVrfConsumerDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "VRF consumer deploy queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Deploy VRF consumer",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/price_feeds/consumers": {
            "post": {
                "description": "Deploy a new Chainlink PriceFeed consumer contract via Factory",
                "operationId": "ChainlinkController_deployPriceFeedConsumer",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DeployPriceFeedConsumerDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "PriceFeed consumer deploy queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Deploy price feed consumer",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/vrf/consumers/{id}/request_id": {
            "get": {
                "description": "Get the on-chain request ID at a given index from the VRF consumer",
                "operationId": "ChainlinkController_getVrfRequestIdByIndex",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "index",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "number"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Request ID returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get VRF request ID by index",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/vrf/consumers/{id}/requester": {
            "get": {
                "description": "Get the address that submitted a VRF request by request ID",
                "operationId": "ChainlinkController_getVrfRequester",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "request_id",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Requester address returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get VRF requester",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/vrf/fulfillment": {
            "post": {
                "description": "Push-based notification for VRF fulfillment. Immediately verifies on-chain and processes the result, bypassing the 30s polling delay.",
                "operationId": "ChainlinkController_notifyVrfFulfillment",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/VrfFulfillmentWebhookDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Fulfillment processed"
                    },
                    "201": {
                        "description": ""
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "VRF request not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Notify VRF fulfillment",
                "tags": [
                    "Chainlink"
                ]
            }
        },
        "/v1/governance": {
            "post": {
                "description": "Deploy a new Governor + Timelock governance system",
                "operationId": "GovernanceController_createGovernance",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateGovernanceDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Governance deployed"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Deploy governance",
                "tags": [
                    "Governance"
                ]
            },
            "get": {
                "description": "List all governance instances",
                "operationId": "GovernanceController_listGovernance",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Governance instances retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List governance",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}": {
            "get": {
                "description": "Get governance instance details",
                "operationId": "GovernanceController_getGovernanceById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Governance retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Governance not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get governance",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/config": {
            "get": {
                "description": "Get governance configuration parameters",
                "operationId": "GovernanceController_getGovernanceConfig",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Config retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Governance not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get governance config",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/votes": {
            "get": {
                "description": "Get voting power for an address at a block number",
                "operationId": "GovernanceController_getVotingPower",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Voting power returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get voting power",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/quorum": {
            "get": {
                "description": "Get quorum requirement at a block number",
                "operationId": "GovernanceController_getQuorum",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Quorum returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get quorum",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/hash_proposal": {
            "post": {
                "description": "Compute the hash of a proposal",
                "operationId": "GovernanceController_hashProposal",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/HashProposalDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Proposal hash returned"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Hash proposal",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals": {
            "post": {
                "description": "Create a new governance proposal",
                "operationId": "GovernanceController_createProposal",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateProposalDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Proposal created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Create proposal",
                "tags": [
                    "Governance"
                ]
            },
            "get": {
                "description": "List all proposals for a governance instance",
                "operationId": "GovernanceController_listProposals",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Proposals retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List proposals",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}": {
            "get": {
                "description": "Get proposal details by ID",
                "operationId": "GovernanceController_getProposalById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Proposal retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Proposal not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get proposal",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/state": {
            "get": {
                "description": "Get the current state of a proposal",
                "operationId": "GovernanceController_getProposalState",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Proposal state returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Proposal not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get proposal state",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/eta": {
            "get": {
                "description": "Get the estimated time of availability for a proposal",
                "operationId": "GovernanceController_getProposalEta",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Proposal ETA returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Proposal not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get proposal ETA",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/votes": {
            "get": {
                "description": "Get vote tallies (for/against/abstain) for a proposal",
                "operationId": "GovernanceController_getProposalVotes",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Proposal votes returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Proposal not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get proposal votes",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/has_voted": {
            "get": {
                "description": "Check if an address has voted on a proposal",
                "operationId": "GovernanceController_hasVoted",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Has voted check returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Proposal not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Has voted",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/deadline": {
            "get": {
                "description": "Get the block number deadline for a proposal vote",
                "operationId": "GovernanceController_getProposalDeadline",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Proposal deadline returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Proposal not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get proposal deadline",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/snapshot": {
            "get": {
                "description": "Get the block number at which a proposal's voting snapshot was taken",
                "operationId": "GovernanceController_getProposalSnapshot",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Proposal snapshot returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Proposal not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get proposal snapshot",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/vote": {
            "post": {
                "description": "Cast a vote on a governance proposal",
                "operationId": "GovernanceController_castVote",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CastVoteDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Vote cast"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Cast vote",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/queue": {
            "post": {
                "description": "Queue a successful proposal for execution",
                "operationId": "GovernanceController_queueProposal",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ProposalActionDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Proposal queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Queue proposal",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/execute": {
            "post": {
                "description": "Execute a queued proposal",
                "operationId": "GovernanceController_executeProposal",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ProposalActionDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Proposal executed"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Execute proposal",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/cancel": {
            "post": {
                "description": "Cancel a pending proposal",
                "operationId": "GovernanceController_cancelProposal",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ProposalActionDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Proposal cancelled"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Cancel proposal",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/delegate": {
            "post": {
                "description": "Delegate voting power to another address",
                "operationId": "GovernanceController_delegate",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DelegateDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Voting power delegated"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Delegate voting power",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/update_quorum": {
            "post": {
                "description": "Update the quorum numerator on the Governor contract",
                "operationId": "GovernanceController_updateQuorumNumerator",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateQuorumNumeratorDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Quorum update queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update quorum",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposal_threshold": {
            "post": {
                "description": "Update minimum voting power to create a proposal",
                "operationId": "GovernanceController_setProposalThreshold",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetProposalThresholdDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Threshold update queued"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set proposal threshold",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/voting_delay": {
            "post": {
                "description": "Update blocks delay between proposal and voting start",
                "operationId": "GovernanceController_setVotingDelay",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetVotingDelayDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Voting delay update queued"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set voting delay",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/voting_period": {
            "post": {
                "description": "Update duration (in blocks) of voting period",
                "operationId": "GovernanceController_setVotingPeriod",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetVotingPeriodDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Voting period update queued"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set voting period",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/timelock": {
            "post": {
                "description": "Update the TimelockController address used for execution delays",
                "operationId": "GovernanceController_updateTimelock",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateTimelockDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Timelock update queued"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update timelock",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/proposer": {
            "get": {
                "description": "Get the address of the account that created a proposal",
                "operationId": "GovernanceController_getProposalProposer",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Proposal proposer returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Proposal not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get proposal proposer",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/vote_by_sig": {
            "post": {
                "description": "Cast a vote using an EIP-712 signature",
                "operationId": "GovernanceController_castVoteBySig",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CastVoteBySigDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Vote by sig queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Cast vote by signature",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/vote_with_params": {
            "post": {
                "description": "Cast a vote with reason and additional parameters",
                "operationId": "GovernanceController_castVoteWithReasonAndParams",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CastVoteWithReasonAndParamsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Vote with params queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Cast vote with params",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/relay": {
            "post": {
                "description": "Relay a call through the Governor (governance-controlled execution)",
                "operationId": "GovernanceController_relay",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RelayDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Relay queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Relay call",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/delegate_by_sig": {
            "post": {
                "description": "Delegate voting power using an EIP-712 signature",
                "operationId": "GovernanceController_delegateBySig",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DelegateBySigDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Delegate by sig queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Delegate by signature",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposals/{proposalId}/vote_with_params_by_sig": {
            "post": {
                "description": "Cast a vote with reason, params, and EIP-712 signature",
                "operationId": "GovernanceController_castVoteWithReasonAndParamsBySig",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "proposalId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CastVoteWithReasonAndParamsBySigDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Vote with params by sig queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Cast vote with params by sig",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/delegates": {
            "get": {
                "description": "Get who an account has delegated voting power to",
                "operationId": "GovernanceController_getDelegates",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Delegate address returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get delegate",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/past_total_supply": {
            "get": {
                "description": "Get historical total voting supply at a specific block",
                "operationId": "GovernanceController_getPastTotalSupply",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Past total supply returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get past total supply",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/timelock/min_delay": {
            "get": {
                "description": "Get the minimum delay of the timelock controller",
                "operationId": "GovernanceController_getTimelockMinDelay",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Min delay returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get timelock min delay",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/timelock/operation_state": {
            "get": {
                "description": "Get the state of a timelock operation",
                "operationId": "GovernanceController_getTimelockOperationState",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Operation state returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get timelock operation state",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/version": {
            "get": {
                "description": "Get the version string of the governor contract",
                "operationId": "GovernanceController_getGovernorVersion",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Version returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get governor version",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/proposal_needs_queuing": {
            "get": {
                "description": "Check whether a proposal requires timelock queuing",
                "operationId": "GovernanceController_getProposalNeedsQueuing",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Queuing status returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check if proposal needs queuing",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/votes_with_params": {
            "get": {
                "description": "Get voting power with custom parameters",
                "operationId": "GovernanceController_getVotesWithParams",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Votes returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get votes with params",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/counting_mode": {
            "get": {
                "description": "Get the COUNTING_MODE string of the governor",
                "operationId": "GovernanceController_getCountingMode",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Counting mode returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get counting mode",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/clock": {
            "get": {
                "description": "Get the current clock value and mode of the governor",
                "operationId": "GovernanceController_getGovernorClock",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Clock value returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get governor clock",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/num_checkpoints": {
            "get": {
                "description": "Get the number of voting checkpoints for an address",
                "operationId": "GovernanceController_getNumCheckpoints",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Checkpoint count returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get number of checkpoints",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/checkpoints": {
            "get": {
                "description": "Get checkpoint data at a specific position for an address",
                "operationId": "GovernanceController_getCheckpoint",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Checkpoint data returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get checkpoint",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/timelock/hash_operation": {
            "post": {
                "description": "Compute the hash of a timelock operation",
                "operationId": "GovernanceController_hashTimelockOperation",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/HashOperationDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Operation hash computed"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Hash timelock operation",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/governance/{id}/timelock/hash_operation_batch": {
            "post": {
                "description": "Compute the hash of a batch timelock operation",
                "operationId": "GovernanceController_hashTimelockOperationBatch",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/HashOperationBatchDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Batch operation hash computed"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Hash timelock batch operation",
                "tags": [
                    "Governance"
                ]
            }
        },
        "/v1/identities": {
            "post": {
                "description": "Register a new identity for T-REX compliance",
                "operationId": "IdentitiesController_create",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateIdentityDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Identity created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "409": {
                        "description": "An identity is already registered for this address on this network"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Create identity",
                "tags": [
                    "Identities"
                ]
            },
            "get": {
                "description": "List all registered identities",
                "operationId": "IdentitiesController_list",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Identities retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List identities",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/on_chain/verify": {
            "get": {
                "description": "Check if an address is verified in the identity registry",
                "operationId": "IdentitiesController_isVerified",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Verification result returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Verify identity on-chain",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/on_chain/identity": {
            "get": {
                "description": "Get the on-chain identity contract address for a wallet",
                "operationId": "IdentitiesController_getIdentityAddress",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Identity address returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get identity address on-chain",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/on_chain/country": {
            "get": {
                "description": "Get the country code for an investor from the identity registry",
                "operationId": "IdentitiesController_getInvestorCountry",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Country code returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get investor country on-chain",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/on_chain/contains": {
            "get": {
                "description": "Check if an address is registered in the identity registry",
                "operationId": "IdentitiesController_contains",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Contains check result returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check identity registry contains",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/storage/bind": {
            "post": {
                "description": "Bind an IdentityRegistry to the IdentityRegistryStorage contract",
                "operationId": "IdentitiesController_bindIdentityRegistry",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/BindIdentityRegistryDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Bind transaction enqueued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Bind identity registry",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/storage/unbind": {
            "post": {
                "description": "Unbind an IdentityRegistry from the IdentityRegistryStorage contract",
                "operationId": "IdentitiesController_unbindIdentityRegistry",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UnbindIdentityRegistryDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Unbind transaction enqueued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Unbind identity registry",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/storage/linked_registries": {
            "get": {
                "description": "List all IdentityRegistries bound to an IdentityRegistryStorage",
                "operationId": "IdentitiesController_linkedRegistries",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Linked registries returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List linked registries",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/on_chain/registry_addresses": {
            "get": {
                "description": "Get the identity storage, issuers registry, and topics registry addresses from an identity registry",
                "operationId": "IdentitiesController_getRegistryLinkedAddresses",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Registry addresses returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get registry linked addresses",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/storage/identity": {
            "get": {
                "description": "Get the stored identity address from the IdentityRegistryStorage contract",
                "operationId": "IdentitiesController_getStoredIdentity",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Stored identity returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get stored identity",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/storage/country": {
            "get": {
                "description": "Get the stored investor country code from the IdentityRegistryStorage contract",
                "operationId": "IdentitiesController_getStoredInvestorCountry",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Stored country returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get stored investor country",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/{id}": {
            "get": {
                "description": "Get identity details by ID",
                "operationId": "IdentitiesController_getById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Identity retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Identity not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get identity",
                "tags": [
                    "Identities"
                ]
            },
            "delete": {
                "description": "Remove an identity from the registry",
                "operationId": "IdentitiesController_remove",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Identity deleted"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Identity not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Delete identity",
                "tags": [
                    "Identities"
                ]
            },
            "put": {
                "deprecated": true,
                "operationId": "IdentitiesController_updateIdentityLegacy",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateIdentityDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update identity (PUT legacy)",
                "tags": [
                    "Identities"
                ]
            },
            "post": {
                "description": "Update an identity's on-chain address",
                "operationId": "IdentitiesController_updateIdentity",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateIdentityDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Identity updated"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Identity not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update identity",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/{id}/country": {
            "patch": {
                "deprecated": true,
                "operationId": "IdentitiesController_updateCountryLegacy",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateCountryDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update identity country (PATCH legacy)",
                "tags": [
                    "Identities"
                ]
            },
            "post": {
                "description": "Update the country code for an identity",
                "operationId": "IdentitiesController_updateCountry",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateCountryDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Country updated"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Identity not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update identity country",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/{id}/claims": {
            "post": {
                "description": "Add a claim to an identity",
                "operationId": "IdentitiesController_addClaim",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AddClaimDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Claim added"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Identity not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Add claim",
                "tags": [
                    "Identities"
                ]
            },
            "get": {
                "description": "List all claims for an identity",
                "operationId": "IdentitiesController_listClaims",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Claims retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Identity not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List claims",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/identities/{id}/claims/{claimId}": {
            "delete": {
                "description": "Remove a claim from an identity",
                "operationId": "IdentitiesController_removeClaim",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "claimId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Claim removed"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Claim not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Remove claim",
                "tags": [
                    "Identities"
                ]
            }
        },
        "/v1/compliance/modules": {
            "post": {
                "description": "Create a new T-REX compliance module",
                "operationId": "ComplianceController_createModule",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateComplianceModuleDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Compliance module created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Create compliance module",
                "tags": [
                    "Compliance"
                ]
            },
            "get": {
                "description": "List all compliance modules",
                "operationId": "ComplianceController_listModules",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Compliance modules retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List compliance modules",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/on_chain": {
            "get": {
                "description": "Query compliance modules registered on-chain",
                "operationId": "ComplianceController_getModulesOnChain",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "On-chain modules retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get modules on-chain",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/is_module_bound": {
            "get": {
                "description": "Check if a compliance module is bound to a contract",
                "operationId": "ComplianceController_isModuleBound",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Bound check result returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check module bound",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/is_token_bound": {
            "get": {
                "description": "Check if a token is bound to a compliance contract",
                "operationId": "ComplianceController_isTokenBound",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Bound check result returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check token bound",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}": {
            "get": {
                "description": "Get compliance module details by ID",
                "operationId": "ComplianceController_getModuleById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Compliance module retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Module not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get compliance module",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/rules": {
            "post": {
                "description": "Add a rule to a compliance module",
                "operationId": "ComplianceController_addRule",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AddComplianceRuleDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Rule added"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Add compliance rule",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/module": {
            "delete": {
                "description": "Remove a compliance module on-chain",
                "operationId": "ComplianceController_removeModule",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RemoveComplianceModuleDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Module removed"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Module not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Remove compliance module",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/bind_token": {
            "post": {
                "description": "Bind a token to a compliance module",
                "operationId": "ComplianceController_bindToken",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/BindTokenDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Token bound to module"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Bind token",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/unbind_token": {
            "post": {
                "description": "Unbind a token from a compliance module",
                "operationId": "ComplianceController_unbindToken",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UnbindTokenDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Token unbound from module"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Unbind token",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/set_max_balance": {
            "post": {
                "description": "Update the max balance parameter on a MaxBalanceModule",
                "operationId": "ComplianceController_setMaxBalance",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetMaxBalanceDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Max balance update queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set max balance",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/set_supply_limit": {
            "post": {
                "description": "Update the supply limit parameter on a SupplyLimitModule",
                "operationId": "ComplianceController_setSupplyLimit",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetSupplyLimitDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Supply limit update queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set supply limit",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/add_country_restriction": {
            "post": {
                "description": "Add a single country restriction on a CountryRestrictModule",
                "operationId": "ComplianceController_addCountryRestriction",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AddCountryRestrictionDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Country restriction queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Add country restriction",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/remove_country_restriction": {
            "post": {
                "description": "Remove a country restriction from a CountryRestrictModule",
                "operationId": "ComplianceController_removeCountryRestriction",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RemoveCountryRestrictionDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Country unrestriction queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Remove country restriction",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/batch_add_country_restrictions": {
            "post": {
                "description": "Add multiple country restrictions at once on a CountryRestrictModule",
                "operationId": "ComplianceController_batchAddCountryRestrictions",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/BatchAddCountryRestrictionsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Batch country restrictions queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Batch add country restrictions",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/module_params": {
            "get": {
                "description": "Read on-chain parameters of a compliance module (max_balance, supply_limit, restricted_countries)",
                "operationId": "ComplianceController_getModuleParams",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Module parameters returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Module not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get module params on-chain",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/compliance_contract": {
            "get": {
                "description": "Get the ModularCompliance contract address this module is bound to",
                "operationId": "ComplianceController_getComplianceContract",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Compliance contract address returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Module not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get bound compliance contract",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/set_transfer_fees": {
            "post": {
                "description": "Update fee rate (bps) and collector wallet on a TransferFeesModule",
                "operationId": "ComplianceController_setTransferFees",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetTransferFeesDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Transfer fee update queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set transfer fees",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/set_time_transfer_limits": {
            "post": {
                "description": "Set up to 4 {period_sec,max_amount} windows on a TimeTransfersLimitsModule (batch)",
                "operationId": "ComplianceController_setTimeTransferLimits",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetTimeTransferLimitsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Time transfer limits update queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set time transfer limits",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/set_exchange_monthly_limit": {
            "post": {
                "description": "Set monthly transfer cap toward an exchange ONCHAINID on an ExchangeMonthlyLimitsModule",
                "operationId": "ComplianceController_setExchangeMonthlyLimit",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetExchangeMonthlyLimitDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Exchange monthly limit update queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set exchange monthly limit",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/set_exchange_id": {
            "post": {
                "description": "Add or remove an ONCHAINID as an exchange on an ExchangeMonthlyLimitsModule (owner-only)",
                "operationId": "ComplianceController_setExchangeId",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetExchangeIdDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Exchange ID change queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Tag/untag exchange ID",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/add_allowed_country": {
            "post": {
                "description": "Whitelist an ISO 3166-1 country on a CountryAllowModule",
                "operationId": "ComplianceController_addAllowedCountry",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AddAllowedCountryDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Allowed country queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Add allowed country",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/remove_allowed_country": {
            "post": {
                "description": "Remove a country from whitelist on a CountryAllowModule",
                "operationId": "ComplianceController_removeAllowedCountry",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RemoveAllowedCountryDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Allowed country removal queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Remove allowed country",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/transfer_fees": {
            "get": {
                "description": "Read TransferFeesModule.getFee(compliance) on-chain",
                "operationId": "ComplianceController_getTransferFees",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Transfer fees returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get transfer fees",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/time_transfer_limits": {
            "get": {
                "description": "Read TimeTransfersLimitsModule.getTimeTransferLimits(compliance) on-chain",
                "operationId": "ComplianceController_getTimeTransferLimits",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Time transfer limits returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get time transfer limits",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/is_exchange_id": {
            "get": {
                "description": "Read ExchangeMonthlyLimitsModule.isExchangeID(id) on-chain",
                "operationId": "ComplianceController_isExchangeId",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Exchange ID check returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check exchange ID",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/compliance/modules/{id}/is_allowed_country": {
            "get": {
                "description": "Read CountryAllowModule.isCountryAllowed(compliance,country) on-chain",
                "operationId": "ComplianceController_isAllowedCountry",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Allowed country check returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check allowed country",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/tokens/{id}/compliance/check": {
            "post": {
                "description": "Check if a transfer is compliant with the token's compliance rules",
                "operationId": "ComplianceController_checkCompliance",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ComplianceCheckDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Compliance check result returned"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check compliance",
                "tags": [
                    "Compliance"
                ]
            }
        },
        "/v1/trusted_issuers": {
            "post": {
                "description": "Register a new trusted issuer for T-REX compliance",
                "operationId": "TrustedIssuersController_create",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateTrustedIssuerDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Trusted issuer created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Create trusted issuer",
                "tags": [
                    "Trusted Issuers"
                ]
            },
            "get": {
                "description": "List all registered trusted issuers",
                "operationId": "TrustedIssuersController_list",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Trusted issuers retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List trusted issuers",
                "tags": [
                    "Trusted Issuers"
                ]
            }
        },
        "/v1/trusted_issuers/on_chain": {
            "get": {
                "description": "Query trusted issuers registered on-chain",
                "operationId": "TrustedIssuersController_getTrustedIssuersOnChain",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "On-chain trusted issuers retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get trusted issuers on-chain",
                "tags": [
                    "Trusted Issuers"
                ]
            }
        },
        "/v1/trusted_issuers/on_chain/check": {
            "get": {
                "description": "Check if an address is a trusted issuer on-chain",
                "operationId": "TrustedIssuersController_isTrustedIssuer",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Check result returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check trusted issuer",
                "tags": [
                    "Trusted Issuers"
                ]
            }
        },
        "/v1/trusted_issuers/on_chain/claim_topics": {
            "get": {
                "description": "Get claim topics for a trusted issuer on-chain",
                "operationId": "TrustedIssuersController_getTrustedIssuerClaimTopics",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Issuer claim topics retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get issuer claim topics",
                "tags": [
                    "Trusted Issuers"
                ]
            }
        },
        "/v1/trusted_issuers/on_chain/has_claim_topic": {
            "get": {
                "description": "Check if a trusted issuer has a specific claim topic",
                "operationId": "TrustedIssuersController_hasClaimTopic",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Check result returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check issuer has claim topic",
                "tags": [
                    "Trusted Issuers"
                ]
            }
        },
        "/v1/trusted_issuers/{id}/claim_topics": {
            "put": {
                "deprecated": true,
                "operationId": "TrustedIssuersController_updateIssuerClaimTopicsLegacy",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateIssuerClaimTopicsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update issuer claim topics (PUT legacy)",
                "tags": [
                    "Trusted Issuers"
                ]
            },
            "post": {
                "description": "Update claim topics for a trusted issuer",
                "operationId": "TrustedIssuersController_updateIssuerClaimTopics",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateIssuerClaimTopicsDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Claim topics updated"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Trusted issuer not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Update issuer claim topics",
                "tags": [
                    "Trusted Issuers"
                ]
            }
        },
        "/v1/trusted_issuers/{id}": {
            "delete": {
                "description": "Remove a trusted issuer",
                "operationId": "TrustedIssuersController_remove",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Trusted issuer deleted"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Trusted issuer not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Delete trusted issuer",
                "tags": [
                    "Trusted Issuers"
                ]
            }
        },
        "/v1/claim_topics": {
            "post": {
                "description": "Create a new claim topic for T-REX compliance",
                "operationId": "ClaimTopicsController_create",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateClaimTopicDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Claim topic created"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Create claim topic",
                "tags": [
                    "Claim Topics"
                ]
            },
            "get": {
                "description": "List all claim topics",
                "operationId": "ClaimTopicsController_list",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Claim topics retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List claim topics",
                "tags": [
                    "Claim Topics"
                ]
            }
        },
        "/v1/claim_topics/on_chain": {
            "get": {
                "description": "Query claim topics registered on-chain",
                "operationId": "ClaimTopicsController_getClaimTopicsOnChain",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "On-chain claim topics retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get claim topics on-chain",
                "tags": [
                    "Claim Topics"
                ]
            }
        },
        "/v1/claim_topics/{topicId}": {
            "delete": {
                "description": "Delete a claim topic",
                "operationId": "ClaimTopicsController_remove",
                "parameters": [
                    {
                        "name": "topicId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Claim topic deleted"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Claim topic not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Delete claim topic",
                "tags": [
                    "Claim Topics"
                ]
            }
        },
        "/v1/tokens/{id}/freeze": {
            "post": {
                "description": "Freeze an investor address (T-REX)",
                "operationId": "TrexController_freezeAddress",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/FreezeAddressDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Address frozen"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Freeze address",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/unfreeze": {
            "post": {
                "description": "Unfreeze an investor address",
                "operationId": "TrexController_unfreezeAddress",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UnfreezeAddressDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Address unfrozen"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Unfreeze address",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/force_transfer": {
            "post": {
                "description": "Force transfer tokens between addresses (agent action)",
                "operationId": "TrexController_forceTransfer",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ForceTransferDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Force transfer executed"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Force transfer",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/recover": {
            "post": {
                "description": "Recover tokens from lost wallet to new wallet",
                "operationId": "TrexController_recover",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RecoverDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Tokens recovered"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Recover tokens",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/frozen": {
            "get": {
                "description": "Check if an address is frozen",
                "operationId": "TrexController_listFrozen",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Frozen status returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check frozen",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/freeze_partial": {
            "post": {
                "description": "Freeze a specific amount of tokens",
                "operationId": "TrexController_freezePartial",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/FreezePartialDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Partial freeze executed"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Freeze partial",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/unfreeze_partial": {
            "post": {
                "description": "Unfreeze a specific amount of tokens",
                "operationId": "TrexController_unfreezePartial",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UnfreezePartialDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Partial unfreeze executed"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Unfreeze partial",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/set_identity_registry": {
            "post": {
                "description": "Set the identity registry contract",
                "operationId": "TrexController_setIdentityRegistry",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetIdentityRegistryDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Identity registry set"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set identity registry",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/set_compliance": {
            "post": {
                "description": "Set the compliance contract",
                "operationId": "TrexController_setCompliance",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SetComplianceDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Compliance contract set"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Set compliance",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/frozen_tokens": {
            "get": {
                "description": "Get amount of frozen tokens for an address",
                "operationId": "TrexController_getFrozenTokens",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Frozen tokens amount returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get frozen tokens",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/identity_registry": {
            "get": {
                "description": "Get the identity registry address",
                "operationId": "TrexController_getIdentityRegistry",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Identity registry address returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get identity registry",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/compliance_info": {
            "get": {
                "description": "Get the compliance contract address",
                "operationId": "TrexController_getComplianceInfo",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Compliance info returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get compliance info",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/is_frozen": {
            "get": {
                "description": "Check if an address is frozen on-chain (real-time)",
                "operationId": "TrexController_isFrozen",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Frozen status returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check if frozen on-chain",
                "tags": [
                    "T-REX"
                ]
            }
        },
        "/v1/tokens/{id}/roles": {
            "post": {
                "description": "Grant a role to an address on the token contract",
                "operationId": "RolesController_grantRole",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/GrantRoleDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Role granted"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Grant role",
                "tags": [
                    "Roles"
                ]
            },
            "delete": {
                "description": "Revoke a role from an address on the token contract",
                "operationId": "RolesController_revokeRole",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RevokeRoleDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Role revoked"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Revoke role",
                "tags": [
                    "Roles"
                ]
            },
            "get": {
                "description": "List all roles on the token contract",
                "operationId": "RolesController_listRoles",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Roles retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List roles",
                "tags": [
                    "Roles"
                ]
            }
        },
        "/v1/tokens/{id}/roles/admin": {
            "get": {
                "description": "Get the admin role for a specific role",
                "operationId": "RolesController_getRoleAdmin",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Role admin retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get role admin",
                "tags": [
                    "Roles"
                ]
            }
        },
        "/v1/tokens/{id}/roles/check": {
            "get": {
                "description": "Check if an address has a specific role on the token contract",
                "operationId": "RolesController_hasRole",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Role check result"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Token not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check role",
                "tags": [
                    "Roles"
                ]
            }
        },
        "/v1/tokens/{id}/roles/renounce": {
            "post": {
                "description": "Renounce a role from your own address",
                "operationId": "RolesController_renounceRole",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RenounceRoleDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Role renounced"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Renounce role",
                "tags": [
                    "Roles"
                ]
            }
        },
        "/v1/tokens/{id}/roles/check_any": {
            "get": {
                "description": "Check if an address has ANY of the specified roles (bitmap OR check, Solady only)",
                "operationId": "RolesController_hasAnyRole",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Role check result"
                    },
                    "400": {
                        "description": "Not a Solady token"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check any role (Solady)",
                "tags": [
                    "Roles"
                ]
            }
        },
        "/v1/tokens/{id}/roles/solady/{address}": {
            "get": {
                "description": "Get the full roles bitmap and decoded role names for a Solady token address",
                "operationId": "RolesController_getRolesOf",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Solady roles retrieved"
                    },
                    "400": {
                        "description": "Not a Solady token"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get Solady roles bitmap",
                "tags": [
                    "Roles"
                ]
            }
        },
        "/v1/tokens/{id}/roles/{address}": {
            "get": {
                "description": "Get all roles assigned to a specific address",
                "operationId": "RolesController_getAddressRoles",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Address roles retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Token not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get address roles",
                "tags": [
                    "Roles"
                ]
            }
        },
        "/v1/vesting": {
            "post": {
                "description": "Deploy a new vesting schedule contract",
                "operationId": "VestingController_createVesting",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateVestingDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Vesting schedule deployed"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Deploy vesting",
                "tags": [
                    "Vesting"
                ]
            },
            "get": {
                "description": "List all vesting schedules",
                "operationId": "VestingController_listVesting",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Vesting schedules retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List vesting",
                "tags": [
                    "Vesting"
                ]
            }
        },
        "/v1/vesting/{id}": {
            "get": {
                "description": "Get vesting schedule details",
                "operationId": "VestingController_getVestingById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Vesting schedule retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Vesting schedule not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get vesting",
                "tags": [
                    "Vesting"
                ]
            }
        },
        "/v1/vesting/{id}/vested": {
            "get": {
                "description": "Get vested amount at a specific timestamp",
                "operationId": "VestingController_getVestedAmount",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Vested amount retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Vesting schedule not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get vested amount",
                "tags": [
                    "Vesting"
                ]
            }
        },
        "/v1/vesting/{id}/release": {
            "post": {
                "description": "Release vested tokens to the beneficiary",
                "operationId": "VestingController_releaseVesting",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ReleaseVestingDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Tokens released successfully"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Vesting schedule not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Release vested tokens",
                "tags": [
                    "Vesting"
                ]
            }
        },
        "/v1/vesting/{id}/on_chain": {
            "get": {
                "description": "Get all on-chain vesting parameters including cliff and token",
                "operationId": "VestingController_getVestingOnChain",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Vesting on-chain state retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Vesting schedule not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get vesting on-chain state",
                "tags": [
                    "Vesting"
                ]
            }
        },
        "/v1/vesting/{id}/transfer_ownership": {
            "post": {
                "description": "Transfer ownership of the vesting contract to a new address",
                "operationId": "VestingController_transferOwnership",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/TransferVestingOwnershipDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Transfer ownership transaction submitted"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Vesting schedule not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Transfer vesting ownership",
                "tags": [
                    "Vesting"
                ]
            }
        },
        "/v1/vaults": {
            "post": {
                "description": "Deploy a new ERC-4626 tokenized vault contract",
                "operationId": "VaultsController_createVault",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateVaultDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Vault deployed"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Deploy vault",
                "tags": [
                    "Vaults"
                ]
            },
            "get": {
                "description": "List all deployed vaults",
                "operationId": "VaultsController_listVaults",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Vaults retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List vaults",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}/limits": {
            "get": {
                "description": "Get max deposit, withdraw, mint, and redeem limits for an address",
                "operationId": "VaultsController_getVaultLimits",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Vault limits retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Vault not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get vault limits",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}/preview": {
            "get": {
                "description": "Preview the result of a deposit or withdrawal conversion",
                "operationId": "VaultsController_previewVault",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Preview result returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Vault not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Preview vault conversion",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}/convert": {
            "get": {
                "description": "Convert between shares and assets",
                "operationId": "VaultsController_convertVault",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Conversion result returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Vault not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Convert vault shares/assets",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}": {
            "get": {
                "description": "Get vault details by ID",
                "operationId": "VaultsController_getVaultById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Vault retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Vault not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get vault",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}/deposit": {
            "post": {
                "description": "Deposit assets into the vault",
                "operationId": "VaultsController_depositVault",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DepositVaultDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Deposit transaction submitted"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Deposit to vault",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}/withdraw": {
            "post": {
                "description": "Withdraw assets from the vault",
                "operationId": "VaultsController_withdrawVault",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/WithdrawVaultDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Withdrawal transaction submitted"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Withdraw from vault",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}/redeem": {
            "post": {
                "description": "Redeem vault shares for underlying assets",
                "operationId": "VaultsController_redeemVault",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RedeemVaultDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Redeem transaction submitted"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Redeem vault shares",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}/mint": {
            "post": {
                "description": "Mint vault shares by depositing assets",
                "operationId": "VaultsController_mintVault",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MintVaultDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Mint transaction submitted"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Mint vault shares",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}/shares/balance": {
            "get": {
                "description": "Query ERC-20 balanceOf for vault share token",
                "operationId": "VaultsController_getShareBalance",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Share balance returned"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get share balance",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}/shares/allowance": {
            "get": {
                "description": "Query ERC-20 allowance for vault share token",
                "operationId": "VaultsController_getShareAllowance",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Share allowance returned"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get share allowance",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}/shares/transfer": {
            "post": {
                "description": "Transfer vault share tokens to another address",
                "operationId": "VaultsController_transferShares",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/VaultShareTransferDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Transfer transaction submitted"
                    },
                    "400": {
                        "description": "Invalid request"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Transfer vault shares",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/vaults/{id}/shares/approve": {
            "post": {
                "description": "Approve a spender to transfer vault shares on behalf of the owner",
                "operationId": "VaultsController_approveShares",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/VaultShareApproveDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Approve transaction submitted"
                    },
                    "400": {
                        "description": "Invalid request"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Approve share spending",
                "tags": [
                    "Vaults"
                ]
            }
        },
        "/v1/tba": {
            "post": {
                "description": "Create a Token Bound Account for an ERC-721 NFT",
                "operationId": "TbaController_createTba",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateTbaDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "TBA creation submitted"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Create TBA",
                "tags": [
                    "Token Bound Accounts"
                ]
            },
            "get": {
                "description": "List all Token Bound Accounts for the tenant",
                "operationId": "TbaController_listTbas",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "TBAs retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List TBAs",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tba/{id}/account": {
            "get": {
                "description": "Predict the Token Bound Account address from the registry",
                "operationId": "TbaController_predictAccount",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "TBA address predicted"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "TBA not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Predict TBA address",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tba/{id}/token": {
            "get": {
                "description": "Get the NFT bound to this Token Bound Account",
                "operationId": "TbaController_getTbaToken",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Bound NFT info retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "TBA not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get bound NFT info",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tba/{id}/state": {
            "get": {
                "description": "Get the on-chain state of this Token Bound Account",
                "operationId": "TbaController_getTbaState",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "TBA state retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "TBA not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get account state",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tba/{id}/balance": {
            "get": {
                "description": "Get ETH and token balances for a TBA",
                "operationId": "TbaController_getTbaBalance",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "TBA balance retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "TBA not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get TBA balance",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tba/{id}": {
            "get": {
                "description": "Get Token Bound Account details by ID",
                "operationId": "TbaController_getTbaById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "TBA retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "TBA not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get TBA",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tba/{id}/execute": {
            "post": {
                "description": "Execute a call from a Token Bound Account",
                "operationId": "TbaController_executeTba",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ExecuteTbaDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "TBA execute transaction submitted"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Execute TBA",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tba/{id}/execute_batch": {
            "post": {
                "description": "Execute a batch of calls from a Token Bound Account",
                "operationId": "TbaController_executeBatchTba",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ExecuteBatchTbaDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "TBA execute-batch transaction submitted"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Execute batch TBA",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tba/{id}/is_valid_signature": {
            "get": {
                "description": "Check if a signature is valid for this Token Bound Account using EIP-1271",
                "operationId": "TbaController_isValidSignature",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Signature validation result returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "TBA not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Validate signature (EIP-1271)",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tba/{id}/is_valid_signer": {
            "get": {
                "description": "Check if an address is a valid signer for this Token Bound Account",
                "operationId": "TbaController_isValidSigner",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Signer validation result returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "TBA not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check valid signer",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tba/{id}/account_implementation": {
            "get": {
                "description": "Get the account implementation address from the ERC-6551 registry",
                "operationId": "TbaController_getAccountImplementation",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Implementation address returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get account implementation",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tba/{id}/total_accounts": {
            "get": {
                "description": "Get the total number of accounts created by the ERC-6551 registry",
                "operationId": "TbaController_getTotalAccounts",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Total accounts count returned"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get total accounts",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/tokens/{id}/nfts/{tokenId}/tba": {
            "get": {
                "description": "Get the Token Bound Account associated with a specific NFT",
                "operationId": "TbaController_getTbaByNft",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "tokenId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "TBA retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "TBA not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get TBA for NFT",
                "tags": [
                    "Token Bound Accounts"
                ]
            }
        },
        "/v1/multisigs": {
            "post": {
                "description": "Deploy a Safe{Wallet} multisig via UrblockMultisig factory",
                "operationId": "MultisigController_deployMultisig",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DeployMultisigDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Multisig deployment queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Deploy multisig",
                "tags": [
                    "Multisig"
                ]
            },
            "get": {
                "description": "List tenant multisig wallets",
                "operationId": "MultisigController_listMultisigs",
                "parameters": [
                    {
                        "name": "network",
                        "required": false,
                        "in": "query",
                        "description": "Filter by network",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "status",
                        "required": false,
                        "in": "query",
                        "description": "Filter by status",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Multisigs listed"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List multisigs",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/multisigs/{id}": {
            "get": {
                "description": "Get multisig details with on-chain data",
                "operationId": "MultisigController_getMultisig",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Multisig retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Multisig not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get multisig",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/multisigs/{id}/transactions": {
            "post": {
                "description": "Submit transaction for multisig approval",
                "operationId": "MultisigController_submitTransaction",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SubmitMultisigTxDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Transaction submitted"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Multisig not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Submit multisig tx",
                "tags": [
                    "Multisig"
                ]
            },
            "get": {
                "description": "List multisig transactions",
                "operationId": "MultisigController_listTransactions",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Transactions listed"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Multisig not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List multisig txs",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/multisigs/{id}/transactions/{txIndex}/confirm": {
            "post": {
                "description": "Approve a Safe tx hash (approveHash)",
                "operationId": "MultisigController_confirmTransaction",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "txIndex",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "number"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ConfirmMultisigTxDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Confirmation queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Confirm multisig tx",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/multisigs/{id}/transactions/{txIndex}/execute": {
            "post": {
                "description": "Execute via execTransaction with collected signatures",
                "operationId": "MultisigController_executeTransaction",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "txIndex",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "number"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ExecuteMultisigTxDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Execution queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Execute multisig tx",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/multisigs/{id}/owners": {
            "post": {
                "description": "Add owner via addOwnerWithThreshold + execTransaction",
                "operationId": "MultisigController_addOwner",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AddOwnerDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Add owner queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Add multisig owner",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/multisigs/{id}/transactions/{txIndex}": {
            "get": {
                "description": "Read transaction details from local DB",
                "operationId": "MultisigController_getTransactionOnChain",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "txIndex",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "number"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Transaction retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Multisig not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get transaction",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/multisigs/{id}/transactions/{txIndex}/confirmations/{address}": {
            "get": {
                "description": "Check if an address has approved a Safe tx hash on-chain",
                "operationId": "MultisigController_isConfirmedOnChain",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "txIndex",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "number"
                        }
                    },
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Confirmation status retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Multisig not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check confirmation",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/multisigs/{id}/owners/{address}": {
            "get": {
                "description": "Check if an address is a Safe owner on-chain",
                "operationId": "MultisigController_isOwnerOnChain",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Owner status retrieved"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Multisig not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check owner",
                "tags": [
                    "Multisig"
                ]
            },
            "delete": {
                "description": "Remove owner via removeOwner + execTransaction",
                "operationId": "MultisigController_removeOwner",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RemoveOwnerDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Remove owner queued"
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Remove multisig owner",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/multisigs/{id}/threshold": {
            "put": {
                "deprecated": true,
                "description": "Use POST. Change Safe threshold.",
                "operationId": "MultisigController_changeThresholdLegacy",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ChangeThresholdDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Threshold change queued"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Change threshold (PUT legacy)",
                "tags": [
                    "Multisig"
                ]
            },
            "post": {
                "description": "Change Safe threshold via changeThreshold + execTransaction",
                "operationId": "MultisigController_changeThreshold",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ChangeThresholdDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Threshold change queued"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Change threshold",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/multisigs/{id}/predict_address": {
            "get": {
                "description": "Predict the counterfactual address for a Safe deployment with given owners/threshold/salt",
                "operationId": "MultisigController_predictSafeAddress",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "owners",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "threshold",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "number"
                        }
                    },
                    {
                        "name": "salt_nonce",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "number"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Predicted address returned"
                    },
                    "400": {
                        "description": "Invalid request"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Predict Safe address",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/multisigs/{id}/owners/swap": {
            "put": {
                "deprecated": true,
                "description": "Use POST.",
                "operationId": "MultisigController_swapOwnerLegacy",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SwapOwnerDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Swap owner (PUT legacy)",
                "tags": [
                    "Multisig"
                ]
            },
            "post": {
                "description": "Atomically replace an existing owner with a new one via swapOwner + execTransaction",
                "operationId": "MultisigController_swapOwner",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SwapOwnerDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Swap owner queued"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid request"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Swap multisig owner",
                "tags": [
                    "Multisig"
                ]
            }
        },
        "/v1/events": {
            "get": {
                "description": "List all events with pagination and filters",
                "operationId": "EventsController_list",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Events retrieved successfully"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List events",
                "tags": [
                    "Events"
                ]
            }
        },
        "/v1/events/{id}": {
            "get": {
                "description": "Get event details by ID",
                "operationId": "EventsController_getById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Event retrieved successfully"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Event not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get event",
                "tags": [
                    "Events"
                ]
            }
        },
        "/v1/gas_estimates": {
            "get": {
                "description": "Estimate gas cost for a blockchain operation",
                "operationId": "GasEstimatesController_estimate",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Gas estimate returned"
                    },
                    "400": {
                        "description": "Invalid request parameters"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get gas estimate",
                "tags": [
                    "Gas Estimates"
                ]
            }
        },
        "/v1/batch": {
            "post": {
                "description": "Execute multiple operations in a single batch request",
                "operationId": "BatchController_create",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateBatchDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Batch executed successfully"
                    },
                    "400": {
                        "description": "Invalid batch request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Batch operations",
                "tags": [
                    "Batch"
                ]
            }
        },
        "/v1/faucet/status": {
            "get": {
                "description": "Public endpoint \u2014 returns faucet availability and supported networks",
                "operationId": "FaucetController_getStatus",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Faucet status returned"
                    }
                },
                "summary": "Get faucet status",
                "tags": [
                    "Faucet"
                ]
            }
        },
        "/v1/faucet/balance": {
            "get": {
                "description": "Returns faucet wallet balances across supported testnets",
                "operationId": "FaucetController_getBalance",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Faucet balances returned"
                    },
                    "401": {
                        "description": "JWT required"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Get faucet balance",
                "tags": [
                    "Faucet"
                ]
            }
        },
        "/v1/faucet/drip": {
            "post": {
                "description": "Drip testnet ETH to the specified wallet address on the given network",
                "operationId": "FaucetController_drip",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DripFaucetDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Testnet tokens sent"
                    },
                    "401": {
                        "description": "JWT required"
                    },
                    "429": {
                        "description": "Rate limited \u2014 too many drip requests"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Request testnet tokens",
                "tags": [
                    "Faucet"
                ]
            }
        },
        "/v1/analytics/overview": {
            "get": {
                "description": "Get analytics overview for tenant",
                "operationId": "AnalyticsController_getOverview",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Overview retrieved"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Get overview",
                "tags": [
                    "Analytics"
                ]
            }
        },
        "/v1/analytics/transactions": {
            "get": {
                "description": "Get transaction analytics for tenant",
                "operationId": "AnalyticsController_getTransactions",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Transaction analytics retrieved"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Transaction analytics",
                "tags": [
                    "Analytics"
                ]
            }
        },
        "/v1/analytics/tokens": {
            "get": {
                "description": "Get token analytics for tenant",
                "operationId": "AnalyticsController_getTokens",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Token analytics retrieved"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Token analytics",
                "tags": [
                    "Analytics"
                ]
            }
        },
        "/v1/analytics/webhooks": {
            "get": {
                "description": "Get webhook analytics for tenant",
                "operationId": "AnalyticsController_getWebhooks",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Webhook analytics retrieved"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Webhook analytics",
                "tags": [
                    "Analytics"
                ]
            }
        },
        "/v1/admin/overview": {
            "get": {
                "description": "Global platform metrics for admin dashboard",
                "operationId": "AdminController_getOverview",
                "parameters": [
                    {
                        "name": "x-admin-secret",
                        "in": "header",
                        "description": "Platform admin secret",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Overview retrieved"
                    },
                    "403": {
                        "description": "Admin role required"
                    }
                },
                "summary": "Admin overview",
                "tags": [
                    "Admin"
                ]
            }
        },
        "/v1/admin/tenants": {
            "get": {
                "description": "List all tenants with usage overview",
                "operationId": "AdminController_listTenants",
                "parameters": [
                    {
                        "name": "x-admin-secret",
                        "in": "header",
                        "description": "Platform admin secret",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "required": false,
                        "in": "query",
                        "description": "Number of items to return",
                        "schema": {
                            "minimum": 1,
                            "maximum": 100,
                            "default": 20,
                            "type": "number"
                        }
                    },
                    {
                        "name": "offset",
                        "required": false,
                        "in": "query",
                        "description": "Number of items to skip",
                        "schema": {
                            "minimum": 0,
                            "default": 0,
                            "type": "number"
                        }
                    },
                    {
                        "name": "sort",
                        "required": false,
                        "in": "query",
                        "description": "Sort field",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "order",
                        "required": false,
                        "in": "query",
                        "description": "Sort order",
                        "schema": {
                            "default": "desc",
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ]
                        }
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "Search tenants by company name or email",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "plan",
                        "required": false,
                        "in": "query",
                        "description": "Filter by plan (free, starter, pro, enterprise)",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Tenants retrieved"
                    },
                    "403": {
                        "description": "Admin role required"
                    }
                },
                "summary": "List all tenants",
                "tags": [
                    "Admin"
                ]
            }
        },
        "/v1/admin/tenants/{id}": {
            "get": {
                "description": "Full tenant detail with usage stats",
                "operationId": "AdminController_getTenantDetail",
                "parameters": [
                    {
                        "name": "x-admin-secret",
                        "in": "header",
                        "description": "Platform admin secret",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Tenant detail retrieved"
                    },
                    "403": {
                        "description": "Admin role required"
                    },
                    "404": {
                        "description": "Tenant not found"
                    }
                },
                "summary": "Get tenant detail",
                "tags": [
                    "Admin"
                ]
            }
        },
        "/v1/admin/payments": {
            "get": {
                "description": "Cross-tenant payment list with filters",
                "operationId": "AdminController_listPayments",
                "parameters": [
                    {
                        "name": "x-admin-secret",
                        "in": "header",
                        "description": "Platform admin secret",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "required": false,
                        "in": "query",
                        "description": "Number of items to return",
                        "schema": {
                            "minimum": 1,
                            "maximum": 100,
                            "default": 20,
                            "type": "number"
                        }
                    },
                    {
                        "name": "offset",
                        "required": false,
                        "in": "query",
                        "description": "Number of items to skip",
                        "schema": {
                            "minimum": 0,
                            "default": 0,
                            "type": "number"
                        }
                    },
                    {
                        "name": "sort",
                        "required": false,
                        "in": "query",
                        "description": "Sort field",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "order",
                        "required": false,
                        "in": "query",
                        "description": "Sort order",
                        "schema": {
                            "default": "desc",
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ]
                        }
                    },
                    {
                        "name": "status",
                        "required": false,
                        "in": "query",
                        "description": "Filter by payment status",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "method",
                        "required": false,
                        "in": "query",
                        "description": "Filter by payment method",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Payments retrieved"
                    },
                    "403": {
                        "description": "Admin role required"
                    }
                },
                "summary": "List all payments",
                "tags": [
                    "Admin"
                ]
            }
        },
        "/v1/admin/users": {
            "get": {
                "description": "Cross-tenant user list with search",
                "operationId": "AdminController_listUsers",
                "parameters": [
                    {
                        "name": "x-admin-secret",
                        "in": "header",
                        "description": "Platform admin secret",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "required": false,
                        "in": "query",
                        "description": "Number of items to return",
                        "schema": {
                            "minimum": 1,
                            "maximum": 100,
                            "default": 20,
                            "type": "number"
                        }
                    },
                    {
                        "name": "offset",
                        "required": false,
                        "in": "query",
                        "description": "Number of items to skip",
                        "schema": {
                            "minimum": 0,
                            "default": 0,
                            "type": "number"
                        }
                    },
                    {
                        "name": "sort",
                        "required": false,
                        "in": "query",
                        "description": "Sort field",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "order",
                        "required": false,
                        "in": "query",
                        "description": "Sort order",
                        "schema": {
                            "default": "desc",
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ]
                        }
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "Search users by name or email",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "role",
                        "required": false,
                        "in": "query",
                        "description": "Filter by role (owner, admin, member)",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Users retrieved"
                    },
                    "403": {
                        "description": "Admin role required"
                    }
                },
                "summary": "List all users",
                "tags": [
                    "Admin"
                ]
            }
        },
        "/v1/admin/tenants/{id}/activity": {
            "get": {
                "description": "Recent tenant activity (transactions, deploys)",
                "operationId": "AdminController_getTenantActivity",
                "parameters": [
                    {
                        "name": "x-admin-secret",
                        "in": "header",
                        "description": "Platform admin secret",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Activity retrieved"
                    },
                    "403": {
                        "description": "Admin role required"
                    },
                    "404": {
                        "description": "Tenant not found"
                    }
                },
                "summary": "Get tenant activity",
                "tags": [
                    "Admin"
                ]
            }
        },
        "/v1/leads": {
            "post": {
                "description": "Public endpoint \u2014 captures a lead from the studio quiz. Requires explicit `consent: true` (LGPD).",
                "operationId": "LeadsController_createLead",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateStudioLeadDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Lead created"
                    },
                    "400": {
                        "description": "Missing or invalid consent"
                    }
                },
                "summary": "Create studio lead",
                "tags": [
                    "Leads"
                ]
            },
            "get": {
                "description": "Admin: list all studio leads (requires x-admin-secret)",
                "operationId": "LeadsController_listLeads",
                "parameters": [
                    {
                        "name": "limit",
                        "required": false,
                        "in": "query",
                        "description": "Number of items to return",
                        "schema": {
                            "minimum": 1,
                            "maximum": 100,
                            "default": 20,
                            "type": "number"
                        }
                    },
                    {
                        "name": "offset",
                        "required": false,
                        "in": "query",
                        "description": "Number of items to skip",
                        "schema": {
                            "minimum": 0,
                            "default": 0,
                            "type": "number"
                        }
                    },
                    {
                        "name": "sort",
                        "required": false,
                        "in": "query",
                        "description": "Sort field",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "order",
                        "required": false,
                        "in": "query",
                        "description": "Sort order",
                        "schema": {
                            "default": "desc",
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ]
                        }
                    },
                    {
                        "name": "status",
                        "required": false,
                        "in": "query",
                        "description": "Filter by lead status",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "search",
                        "required": false,
                        "in": "query",
                        "description": "Search leads by name or email",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Leads retrieved"
                    },
                    "403": {
                        "description": "Invalid or missing admin secret"
                    }
                },
                "summary": "List leads",
                "tags": [
                    "Leads"
                ]
            }
        },
        "/v1/leads/stats": {
            "get": {
                "description": "Admin: lead count by status (requires x-admin-secret)",
                "operationId": "LeadsController_getStats",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Stats retrieved"
                    }
                },
                "summary": "Lead stats",
                "tags": [
                    "Leads"
                ]
            }
        },
        "/v1/leads/{id}": {
            "get": {
                "description": "Admin: get a single lead detail (requires x-admin-secret)",
                "operationId": "LeadsController_getLead",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Lead retrieved"
                    },
                    "404": {
                        "description": "Lead not found"
                    }
                },
                "summary": "Get lead",
                "tags": [
                    "Leads"
                ]
            },
            "patch": {
                "deprecated": true,
                "operationId": "LeadsController_updateLeadLegacy",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateStudioLeadDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "summary": "Update lead (PATCH legacy)",
                "tags": [
                    "Leads"
                ]
            },
            "post": {
                "description": "Admin: update lead status or notes (requires x-admin-secret)",
                "operationId": "LeadsController_updateLead",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateStudioLeadDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Lead updated"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Lead not found"
                    }
                },
                "summary": "Update lead",
                "tags": [
                    "Leads"
                ]
            },
            "delete": {
                "description": "Admin: permanently delete a lead (requires x-admin-secret)",
                "operationId": "LeadsController_deleteLead",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Lead deleted"
                    },
                    "404": {
                        "description": "Lead not found"
                    }
                },
                "summary": "Delete lead",
                "tags": [
                    "Leads"
                ]
            }
        },
        "/v1/connect/accounts": {
            "post": {
                "description": "Register a self-custody smart account. Returns the existing account if one already exists for the given signer and chain. The actual on-chain deployment happens on the first UserOperation.",
                "operationId": "ConnectController_createAccount",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateConnectAccountDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Account created or returned"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Create or get connect account",
                "tags": [
                    "Connect"
                ]
            },
            "get": {
                "description": "List all connect smart accounts for this tenant.",
                "operationId": "ConnectController_listAccounts",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "List of connect accounts"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List connect accounts",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/accounts/{address}": {
            "get": {
                "description": "Get connect account details by address.",
                "operationId": "ConnectController_getAccount",
                "parameters": [
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Account details"
                    },
                    "404": {
                        "description": "Account not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get connect account",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/verify": {
            "post": {
                "description": "Verify a Sign In With Ethereum (EIP-4361) message and signature. Returns a session token on success.",
                "operationId": "ConnectController_verifySiwe",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/VerifySiweDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "SIWE verified, session token returned"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid SIWE message or signature"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Verify SIWE signature",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/sessions": {
            "post": {
                "description": "Register a session key for a connect account. Session keys allow time-limited, scoped transaction signing without the primary key.",
                "operationId": "ConnectController_createSessionKey",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateSessionKeyDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Session key created"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Create session key",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/relay": {
            "post": {
                "description": "Submit a signed ERC-4337 UserOperation for relay through the urblock bundler.",
                "operationId": "ConnectController_relayUserOp",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RelayUserOpDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "202": {
                        "description": "UserOp accepted for relay"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Relay UserOperation",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/relay/{userOpHash}": {
            "get": {
                "description": "Check the status of a relayed UserOperation.",
                "operationId": "ConnectController_getRelayStatus",
                "parameters": [
                    {
                        "name": "userOpHash",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Relay status"
                    },
                    "404": {
                        "description": "Relay operation not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get relay status",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/relay/estimate-gas": {
            "post": {
                "description": "Estimate gas limits for a UserOperation via the bundler's eth_estimateUserOperationGas. Returns preVerificationGas, verificationGasLimit, and callGasLimit.",
                "operationId": "ConnectController_estimateUserOpGas",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/EstimateUserOpGasDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Gas estimates"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Bundler not configured for chain"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Estimate UserOperation gas",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/relay/{userOpHash}/receipt": {
            "get": {
                "description": "Fetch the on-chain receipt of a UserOperation from the bundler. Returns null if the operation is still pending (not yet mined).",
                "operationId": "ConnectController_getUserOpReceipt",
                "parameters": [
                    {
                        "name": "userOpHash",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "chain_id",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Receipt or null"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get UserOperation receipt",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/passkeys": {
            "post": {
                "description": "Store passkey (WebAuthn credential) metadata for a connect account. Used for recovery and device enumeration.",
                "operationId": "ConnectController_registerPasskey",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RegisterPasskeyDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Passkey registered"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Register passkey metadata",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/accounts/{address}/passkeys": {
            "get": {
                "operationId": "ConnectController_listPasskeys",
                "parameters": [
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "type": "object"
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List passkeys for account",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/accounts/{address}/sessions": {
            "get": {
                "operationId": "ConnectController_listSessionKeys",
                "parameters": [
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "type": "object"
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List session keys for account",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/accounts/{address}/sessions/{sessionKeyId}": {
            "delete": {
                "operationId": "ConnectController_revokeSessionKey",
                "parameters": [
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sessionKeyId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": ""
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Revoke session key for account",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/accounts/{address}/passkeys/{credentialId}": {
            "delete": {
                "operationId": "ConnectController_deletePasskey",
                "parameters": [
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "credentialId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": ""
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Delete passkey for account",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/accounts/{address}/relay": {
            "get": {
                "operationId": "ConnectController_listRelayOps",
                "parameters": [
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "type": "object"
                                    }
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List relay operations for account",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/ops/pending": {
            "get": {
                "description": "List all operations awaiting client-side signature for connect-mode tenants. Each pending op includes the encoded callData needed to build and sign the UserOp.",
                "operationId": "ConnectController_listPendingOps",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "List of pending operations"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List pending operations",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/ops/{userOpHash}/sign": {
            "post": {
                "description": "Submit a client-signed UserOp for a pending operation. The relay op transitions from awaiting_sign \u2192 pending (submitted to bundler).",
                "operationId": "ConnectController_submitSignedOp",
                "parameters": [
                    {
                        "name": "userOpHash",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SubmitSignedOpDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Signed UserOp accepted"
                    },
                    "201": {
                        "description": ""
                    },
                    "404": {
                        "description": "Pending operation not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Submit signed UserOp",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/ops/{userOpHash}/sign-and-relay": {
            "post": {
                "description": "Accepts only the signature; backend builds the full PackedUserOperation v0.7 (sender/nonce/initCode/gas/fees), forwards to bundler, and persists state transitions. Equivalent to /sign + client-side UserOp build, but without requiring the dev to learn ERC-4337 v0.7 ABI / Kernel v3.1 init-code encoding / bundler RPC semantics.",
                "operationId": "ConnectController_signAndRelay",
                "parameters": [
                    {
                        "name": "userOpHash",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SignAndRelayDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Signed UserOp accepted by bundler"
                    },
                    "201": {
                        "description": ""
                    },
                    "400": {
                        "description": "Validation or gas estimate failed"
                    },
                    "404": {
                        "description": "Pending operation not found"
                    },
                    "502": {
                        "description": "Bundler error"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Sign + relay UserOp in one call (no SDK needed)",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/ops/{userOpHash}/cancel": {
            "post": {
                "description": "Cancel a pending operation that hasn't been signed yet.",
                "operationId": "ConnectController_cancelPendingOp",
                "parameters": [
                    {
                        "name": "userOpHash",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Operation cancelled"
                    },
                    "201": {
                        "description": ""
                    },
                    "404": {
                        "description": "Pending operation not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Cancel pending operation",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/accounts/{address}/recovery": {
            "get": {
                "description": "Get recovery guardians, threshold, and active requests for a connect account.",
                "operationId": "ConnectController_getRecoveryConfig",
                "parameters": [
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "chain_id",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Recovery config returned"
                    },
                    "404": {
                        "description": "Account not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get recovery configuration",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/recovery/configure": {
            "post": {
                "description": "Set up social recovery guardians for a connect account. Off-chain guardian registry.",
                "operationId": "ConnectController_configureRecovery",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ConfigureRecoveryDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Recovery configured"
                    },
                    "201": {
                        "description": ""
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Configure recovery guardians",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/recovery/initiate": {
            "post": {
                "description": "A guardian initiates recovery by proposing new validator key data. Off-chain operation.",
                "operationId": "ConnectController_initiateRecovery",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/InitiateRecoveryDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Recovery initiated"
                    },
                    "201": {
                        "description": ""
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Initiate recovery",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/recovery/{requestId}/confirm": {
            "post": {
                "description": "Additional guardian confirms a recovery request. Off-chain operation.",
                "operationId": "ConnectController_confirmRecovery",
                "parameters": [
                    {
                        "name": "requestId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ConfirmRecoveryDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Recovery confirmed"
                    },
                    "201": {
                        "description": ""
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Confirm recovery",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/recovery/{requestId}/execute": {
            "post": {
                "description": "Execute recovery after timelock expires. Returns doRecovery callData to submit as UserOp. Pass `executed_tx_hash` once the doRecovery UserOp is confirmed on-chain to finalize the request to terminal 'executed'.",
                "operationId": "ConnectController_executeRecovery",
                "parameters": [
                    {
                        "name": "requestId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ExecuteRecoveryDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Recovery executed, doRecovery callData returned"
                    },
                    "201": {
                        "description": ""
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Execute recovery",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/recovery/{requestId}/cancel": {
            "post": {
                "description": "Owner cancels a pending recovery. Off-chain operation \u2014 no on-chain callData needed.",
                "operationId": "ConnectController_cancelRecovery",
                "parameters": [
                    {
                        "name": "requestId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Recovery cancelled"
                    },
                    "201": {
                        "description": ""
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Cancel recovery",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/modules/install": {
            "post": {
                "description": "Returns ABI-encoded callData for Kernel.installModule(). Wrap in a UserOp, sign, and relay via POST /relay.",
                "operationId": "ConnectController_encodeInstallModule",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/InstallModuleDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "CallData returned"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Encode installModule callData",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/modules/uninstall": {
            "post": {
                "description": "Returns ABI-encoded callData for Kernel.uninstallModule(). Wrap in a UserOp, sign, and relay via POST /relay.",
                "operationId": "ConnectController_encodeUninstallModule",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UninstallModuleDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "CallData returned"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Encode uninstallModule callData",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/validators/uninstall": {
            "post": {
                "description": "Returns ABI-encoded callData for Kernel.uninstallValidation(). Wrap in a UserOp, sign, and relay via POST /relay.",
                "operationId": "ConnectController_encodeUninstallValidation",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UninstallValidationDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "CallData returned"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Encode uninstallValidation callData",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/validators/change-root": {
            "post": {
                "description": "Returns ABI-encoded callData for Kernel.changeRootValidator(). Changes the default validation plugin. Wrap in a UserOp, sign, and relay via POST /relay.",
                "operationId": "ConnectController_encodeChangeRootValidator",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ChangeRootValidatorDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "CallData returned"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Encode changeRootValidator callData",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/accounts/{address}/modules/installed": {
            "get": {
                "description": "Queries Kernel.isModuleInstalled() on-chain. Returns whether the specified module is currently installed on the smart account.",
                "operationId": "ConnectController_isModuleInstalled",
                "parameters": [
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Module installation status"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check if a module is installed",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/oauth/verify": {
            "post": {
                "description": "Validate a Google or Apple id_token. For returning users, returns account + session. For new users, returns an oauth_token to link after passkey + account creation.",
                "operationId": "ConnectController_verifyOAuth",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/OAuthVerifyDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OAuth verified"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid id_token"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Verify OAuth id_token",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/oauth/link": {
            "post": {
                "description": "Link an OAuth provider identity to an existing connect account. Requires a valid oauth_token from POST /oauth/verify.",
                "operationId": "ConnectController_linkOAuth",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/OAuthLinkDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "OAuth linked"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Invalid oauth_token"
                    },
                    "409": {
                        "description": "Already linked"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Link OAuth to account",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/accounts/{address}/oauth": {
            "get": {
                "description": "Returns all OAuth providers (Google, Apple) linked to this account.",
                "operationId": "ConnectController_listOAuthLinks",
                "parameters": [
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "chain_id",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OAuth links listed"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List OAuth providers linked to account",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/accounts/{address}/oauth/{provider}": {
            "delete": {
                "description": "Remove an OAuth provider link from an account.",
                "operationId": "ConnectController_unlinkOAuth",
                "parameters": [
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "provider",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "chain_id",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OAuth unlinked"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Unlink OAuth provider",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/accounts/{address}/safety-net": {
            "get": {
                "description": "Check if the account has a safety net (2+ passkeys or recovery configured). Use this to gate value operations in the frontend.",
                "operationId": "ConnectController_checkSafetyNet",
                "parameters": [
                    {
                        "name": "address",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "chain_id",
                        "required": true,
                        "in": "query",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Safety net status"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Check account safety net status",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/analytics/overview": {
            "get": {
                "description": "Aggregated metrics for connect smart accounts: accounts, relay ops, session keys, recovery, passkeys.",
                "operationId": "ConnectController_getConnectAnalytics",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Connect analytics overview"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Connect analytics overview",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/analytics/timeseries": {
            "get": {
                "description": "Daily account creation and relay ops for the selected period.",
                "operationId": "ConnectController_getConnectTimeseries",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Connect analytics timeseries"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Connect analytics timeseries",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/networks/{chainId}": {
            "get": {
                "description": "Get the factory address, RPC URL, and bundler URL for a specific chain.",
                "operationId": "ConnectController_getNetworkConfig",
                "parameters": [
                    {
                        "name": "chainId",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Network config returned"
                    },
                    "404": {
                        "description": "Network not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get network config for connect",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/paymasters": {
            "post": {
                "description": "Register a deployed UrblockPaymaster contract so the relay auto-signs paymasterAndData for sponsored ops. Accepts either a raw signer_private_key (DEPRECATED \u2014 will be removed 2026-09-01) or keystore_json + keystore_password.",
                "operationId": "ConnectController_registerPaymaster",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RegisterPaymasterDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Paymaster registered"
                    },
                    "409": {
                        "description": "Active paymaster already exists for this chain"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Register a paymaster",
                "tags": [
                    "Connect"
                ]
            },
            "get": {
                "description": "List all paymasters registered by this tenant.",
                "operationId": "ConnectController_listPaymasters",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Paymaster list"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "List paymasters",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/paymasters/import-keystore": {
            "post": {
                "description": "Register a UrblockPaymaster signer from an Ethereum keystore V3 JSON + password. The plaintext key is never persisted; the keystore is decrypted in memory, the resulting key is immediately re-sealed with CONNECT_PAYMASTER_ENCRYPTION_KEY + per-row AAD, and the plaintext is discarded.",
                "operationId": "ConnectController_registerPaymasterFromKeystore",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ImportPaymasterKeystoreDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Paymaster registered"
                    },
                    "400": {
                        "description": "Invalid keystore or password"
                    },
                    "409": {
                        "description": "Active paymaster already exists for this chain"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Register a paymaster from an Ethereum keystore (preferred)",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/connect/paymasters/{id}": {
            "get": {
                "description": "Get a specific paymaster by ID.",
                "operationId": "ConnectController_getPaymaster",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Paymaster found"
                    },
                    "404": {
                        "description": "Paymaster not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get paymaster",
                "tags": [
                    "Connect"
                ]
            },
            "delete": {
                "description": "Deactivate a paymaster (does not affect on-chain deposit).",
                "operationId": "ConnectController_deactivatePaymaster",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Paymaster deactivated"
                    },
                    "404": {
                        "description": "Paymaster not found"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Deactivate paymaster",
                "tags": [
                    "Connect"
                ]
            }
        },
        "/v1/contracts/abis": {
            "get": {
                "description": "Returns all available Urblock contract ABIs in human-readable format. Optionally filter by standard.",
                "operationId": "ContractsController_listAbis",
                "parameters": [
                    {
                        "name": "standard",
                        "required": false,
                        "in": "query",
                        "description": "Filter by standard (e.g. ERC20, ERC3643, GOVERNANCE)",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of contract ABIs"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "List contract ABIs",
                "tags": [
                    "Contracts"
                ]
            }
        },
        "/v1/contracts/abis/{name}": {
            "get": {
                "description": "Returns a specific contract ABI by name (e.g. erc20, erc721, trex, governor).",
                "operationId": "ContractsController_getAbi",
                "parameters": [
                    {
                        "name": "name",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Contract ABI"
                    },
                    "404": {
                        "description": "ABI not found"
                    }
                },
                "security": [
                    {
                        "bearer": []
                    }
                ],
                "summary": "Get contract ABI",
                "tags": [
                    "Contracts"
                ]
            }
        },
        "/v1/confidential/decrypt_requests": {
            "post": {
                "operationId": "ConfidentialController_create",
                "parameters": [],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateDecryptRequestDto"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "Decrypt request queued"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Create confidential decrypt request",
                "tags": [
                    "Confidential"
                ]
            }
        },
        "/v1/confidential/decrypt_requests/{id}": {
            "get": {
                "operationId": "ConfidentialController_getById",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Decrypt request"
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Get confidential decrypt request",
                "tags": [
                    "Confidential"
                ]
            }
        },
        "/v1/confidential/decrypt_requests/{id}/fulfill": {
            "post": {
                "operationId": "ConfidentialController_fulfill",
                "parameters": [
                    {
                        "name": "id",
                        "required": true,
                        "in": "path",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/FulfillDecryptRequestDto"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Decrypt request fulfilled"
                    },
                    "201": {
                        "description": "",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "api-key": []
                    }
                ],
                "summary": "Fulfill confidential decrypt request",
                "tags": [
                    "Confidential"
                ]
            }
        }
    },
    "info": {
        "title": "urblock API",
        "description": "Stripe for tokenization \u2014 deploy and manage ERC-20, ERC-721, ERC-1155, and ERC-3643 (T-REX) tokens via REST API. Includes governance (Governor/Timelock), vesting, ERC-4626 vaults, webhooks, and on-chain compliance.",
        "version": "1.0.0",
        "contact": {
            "name": "urblock",
            "url": "https://urblock.io",
            "email": "api@urblock.io"
        }
    },
    "tags": [
        {
            "name": "Health",
            "description": "API health checks and status"
        },
        {
            "name": "Auth",
            "description": "Dashboard authentication (JWT)"
        },
        {
            "name": "API Keys",
            "description": "Manage API keys for programmatic access"
        },
        {
            "name": "Wallets",
            "description": "HD wallet derivation and management"
        },
        {
            "name": "Networks",
            "description": "Supported blockchain networks"
        },
        {
            "name": "Tokens",
            "description": "Deploy and manage token contracts (ERC-20/721/1155/3643)"
        },
        {
            "name": "Transactions",
            "description": "Submit on-chain operations (mint, transfer, burn, approve)"
        },
        {
            "name": "T-REX",
            "description": "ERC-3643 security token operations (freeze, force transfer, recover)"
        },
        {
            "name": "Identities",
            "description": "T-REX on-chain identity registry (ONCHAINID)"
        },
        {
            "name": "Compliance",
            "description": "T-REX modular compliance (country, max balance, supply limit)"
        },
        {
            "name": "Claim Topics",
            "description": "T-REX claim topics registry"
        },
        {
            "name": "Trusted Issuers",
            "description": "T-REX trusted issuers registry"
        },
        {
            "name": "Governance",
            "description": "On-chain governance (Governor + Timelock)"
        },
        {
            "name": "Roles",
            "description": "On-chain access control (grant/revoke/check roles)"
        },
        {
            "name": "Vesting",
            "description": "Token vesting schedules (VestingWallet)"
        },
        {
            "name": "Vaults",
            "description": "ERC-4626 tokenized vaults"
        },
        {
            "name": "Webhooks",
            "description": "Webhook endpoint management"
        },
        {
            "name": "Events",
            "description": "Audit log of all events"
        },
        {
            "name": "Gas Estimates",
            "description": "Gas cost estimation for operations"
        },
        {
            "name": "Batch",
            "description": "Batch multiple operations"
        },
        {
            "name": "Metrics",
            "description": "Prometheus metrics endpoint"
        }
    ],
    "servers": [],
    "components": {
        "securitySchemes": {
            "api-key": {
                "scheme": "bearer",
                "bearerFormat": "JWT",
                "type": "http",
                "description": "API Key (sk_live_... or sk_test_...)"
            },
            "jwt": {
                "scheme": "bearer",
                "bearerFormat": "JWT",
                "type": "http",
                "description": "JWT (dashboard only)"
            }
        },
        "schemas": {
            "RegisterDto": {
                "type": "object",
                "properties": {
                    "email": {
                        "type": "string",
                        "format": "email"
                    },
                    "password": {
                        "type": "string",
                        "minLength": 8,
                        "maxLength": 72,
                        "pattern": "/[A-Z]/"
                    },
                    "company_name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 255
                    },
                    "full_name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 255
                    }
                },
                "required": [
                    "email",
                    "password",
                    "company_name",
                    "full_name"
                ]
            },
            "LoginDto": {
                "type": "object",
                "properties": {
                    "email": {
                        "type": "string",
                        "format": "email"
                    },
                    "password": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 72
                    }
                },
                "required": [
                    "email",
                    "password"
                ]
            },
            "PasskeyPublicKeyDto": {
                "type": "object",
                "properties": {
                    "x": {
                        "type": "string",
                        "pattern": "/^0x[a-fA-F0-9]{64}$/"
                    },
                    "y": {
                        "type": "string",
                        "pattern": "/^0x[a-fA-F0-9]{64}$/"
                    }
                },
                "required": [
                    "x",
                    "y"
                ]
            },
            "UnifiedAuthDto": {
                "type": "object",
                "properties": {
                    "method": {
                        "type": "string",
                        "enum": [
                            "email",
                            "siwe",
                            "oauth",
                            "passkey"
                        ]
                    },
                    "email": {
                        "type": "string",
                        "format": "email"
                    },
                    "password": {
                        "type": "string",
                        "minLength": 8,
                        "maxLength": 72
                    },
                    "message": {
                        "type": "string",
                        "minLength": 20
                    },
                    "signature": {
                        "type": "string",
                        "pattern": "/^0x[a-fA-F0-9]{130,}$/"
                    },
                    "address": {
                        "type": "string",
                        "pattern": "/^0x[a-fA-F0-9]{40}$/"
                    },
                    "provider": {
                        "type": "string",
                        "enum": [
                            "google",
                            "apple"
                        ]
                    },
                    "id_token": {
                        "type": "string",
                        "minLength": 20,
                        "maxLength": 8000
                    },
                    "flow": {
                        "type": "string",
                        "enum": [
                            "register",
                            "authenticate"
                        ]
                    },
                    "challenge": {
                        "type": "string",
                        "minLength": 20,
                        "maxLength": 2000
                    },
                    "credential_id": {
                        "type": "string",
                        "minLength": 8,
                        "maxLength": 1024
                    },
                    "client_data_json": {
                        "type": "string",
                        "minLength": 20,
                        "maxLength": 8000
                    },
                    "public_key": {
                        "$ref": "#/components/schemas/PasskeyPublicKeyDto"
                    },
                    "authenticator_data": {
                        "type": "string",
                        "pattern": "/^0x[a-fA-F0-9]{74,}$/"
                    },
                    "passkey_signature": {
                        "type": "string",
                        "pattern": "/^0x[a-fA-F0-9]{16,}$/"
                    }
                },
                "required": [
                    "method"
                ]
            },
            "RefreshDto": {
                "type": "object",
                "properties": {
                    "refresh_token": {
                        "type": "string",
                        "maxLength": 2048
                    }
                },
                "required": [
                    "refresh_token"
                ]
            },
            "UpdateProfileDto": {
                "type": "object",
                "properties": {
                    "full_name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 255
                    },
                    "company_name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 255
                    }
                }
            },
            "UpdateConnectSettingsDto": {
                "type": "object",
                "properties": {}
            },
            "UpdateOAuthSettingsDto": {
                "type": "object",
                "properties": {}
            },
            "UpdatePasskeySettingsDto": {
                "type": "object",
                "properties": {}
            },
            "UpdateCorsSettingsDto": {
                "type": "object",
                "properties": {}
            },
            "CreateApiKeyDto": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "minLength": 1,
                        "maxLength": 255
                    },
                    "environment": {
                        "type": "string",
                        "enum": [
                            "live",
                            "test"
                        ]
                    },
                    "scopes": {
                        "type": "string",
                        "description": "Optional scopes to restrict this key's access.\nEmpty array or omitted = full access (default).\nValid scopes: tokens:read, tokens:write, wallets:read, wallets:write, etc.",
                        "enum": [
                            "tokens:read",
                            "tokens:write",
                            "wallets:read",
                            "wallets:write",
                            "transactions:read",
                            "transactions:write",
                            "nfts:read",
                            "nfts:write",
                            "identities:read",
                            "identities:write",
                            "compliance:read",
                            "compliance:write",
                            "governance:read",
                            "governance:write",
                            "roles:read",
                            "roles:write",
                            "vesting:read",
                            "vesting:write",
                            "vaults:read",
                            "vaults:write",
                            "webhooks:read",
                            "webhooks:write",
                            "events:read",
                            "gas_estimates:read",
                            "batch:write",
                            "networks:read",
                            "connect:read",
                            "connect:write",
                            "multisigs:read",
                            "multisigs:write",
                            "tba:read",
                            "tba:write",
                            "chainlink:read",
                            "chainlink:write",
                            "confidential:read",
                            "confidential:write",
                            "contracts:read",
                            "analytics:read",
                            "billing:read",
                            "billing:write",
                            "faucet:read",
                            "faucet:write",
                            "status:read",
                            "tenant_features:read",
                            "tenant_features:write"
                        ],
                        "maxItems": 50
                    },
                    "expires_at": {
                        "type": "string",
                        "description": "Optional expiration date (ISO 8601 format).\nAfter this date the key will be rejected."
                    },
                    "allowed_ips": {
                        "description": "Optional IP allowlist. If set, only these IPs can use this key.\nEmpty array or omitted = all IPs allowed.",
                        "maxItems": 20,
                        "type": "array",
                        "items": {
                            "type": "string",
                            "pattern": "/^[\\d.:a-fA-F]+$/"
                        }
                    }
                },
                "required": [
                    "name",
                    "environment"
                ]
            },
            "CreateTokenDto": {
                "type": "object",
                "properties": {}
            },
            "MintBatchDto": {
                "type": "object",
                "properties": {}
            },
            "TransferBatchDto": {
                "type": "object",
                "properties": {}
            },
            "BurnBatchDto": {
                "type": "object",
                "properties": {}
            },
            "TransferOwnershipDto": {
                "type": "object",
                "properties": {
                    "new_owner": {
                        "type": "string",
                        "description": "New admin/owner address",
                        "example": "0xabc..."
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key"
                    }
                },
                "required": [
                    "new_owner"
                ]
            },
            "GrantRolesDto": {
                "type": "object",
                "properties": {}
            },
            "RevokeRolesDto": {
                "type": "object",
                "properties": {}
            },
            "OwnershipHandoverDto": {
                "type": "object",
                "properties": {}
            },
            "CompleteHandoverDto": {
                "type": "object",
                "properties": {}
            },
            "CreateWebhookEndpointDto": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string",
                        "maxLength": 500,
                        "format": "uri"
                    },
                    "events": {
                        "type": "string",
                        "enum": [
                            "token.deployed",
                            "token.paused",
                            "token.unpaused",
                            "token.minted",
                            "token.burned",
                            "token.transferred",
                            "token.approved",
                            "transaction.confirmed",
                            "transaction.failed",
                            "wallet.created",
                            "token.frozen",
                            "token.unfrozen",
                            "token.force_transferred",
                            "token.recovered",
                            "nft.minted",
                            "nft.transferred",
                            "nft.burned",
                            "nft.metadata_updated",
                            "identity.registered",
                            "identity.removed",
                            "identity.updated",
                            "identity.country.updated",
                            "identity.claim.added",
                            "identity.claim.removed",
                            "compliance.module.deployed",
                            "compliance.module.removed",
                            "compliance.rule.added",
                            "compliance.token.bound",
                            "compliance.token.unbound",
                            "trusted_issuer.registered",
                            "trusted_issuer.removed",
                            "trusted_issuer.claim_topics.updated",
                            "claim_topic.registered",
                            "claim_topic.removed",
                            "governance.deployed",
                            "governance.proposal.created",
                            "governance.vote.cast",
                            "governance.proposal.queued",
                            "governance.proposal.executed",
                            "governance.proposal.canceled",
                            "governance.delegated",
                            "role.granted",
                            "role.revoked",
                            "vesting.deployed",
                            "vesting.released",
                            "vault.deployed",
                            "vault.deposit",
                            "vault.withdraw",
                            "vault.redeem",
                            "vault.mint",
                            "api_key.created",
                            "api_key.revoked",
                            "api_key.rotated",
                            "auth.registered",
                            "auth.login"
                        ],
                        "minItems": 1,
                        "maxItems": 20
                    },
                    "description": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "metadata": {
                        "type": "object",
                        "description": "Stripe-style metadata: arbitrary key-value store (max 50 keys, values up to 500 chars).\nUsed by dev to attach external IDs, environment tags, integration context."
                    }
                },
                "required": [
                    "url",
                    "events"
                ]
            },
            "UpdateWebhookEndpointDto": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string",
                        "maxLength": 500,
                        "format": "uri"
                    },
                    "events": {
                        "type": "string",
                        "enum": [
                            "token.deployed",
                            "token.paused",
                            "token.unpaused",
                            "token.minted",
                            "token.burned",
                            "token.transferred",
                            "token.approved",
                            "transaction.confirmed",
                            "transaction.failed",
                            "wallet.created",
                            "token.frozen",
                            "token.unfrozen",
                            "token.force_transferred",
                            "token.recovered",
                            "nft.minted",
                            "nft.transferred",
                            "nft.burned",
                            "nft.metadata_updated",
                            "identity.registered",
                            "identity.removed",
                            "identity.updated",
                            "identity.country.updated",
                            "identity.claim.added",
                            "identity.claim.removed",
                            "compliance.module.deployed",
                            "compliance.module.removed",
                            "compliance.rule.added",
                            "compliance.token.bound",
                            "compliance.token.unbound",
                            "trusted_issuer.registered",
                            "trusted_issuer.removed",
                            "trusted_issuer.claim_topics.updated",
                            "claim_topic.registered",
                            "claim_topic.removed",
                            "governance.deployed",
                            "governance.proposal.created",
                            "governance.vote.cast",
                            "governance.proposal.queued",
                            "governance.proposal.executed",
                            "governance.proposal.canceled",
                            "governance.delegated",
                            "role.granted",
                            "role.revoked",
                            "vesting.deployed",
                            "vesting.released",
                            "vault.deployed",
                            "vault.deposit",
                            "vault.withdraw",
                            "vault.redeem",
                            "vault.mint",
                            "api_key.created",
                            "api_key.revoked",
                            "api_key.rotated",
                            "auth.registered",
                            "auth.login"
                        ],
                        "maxItems": 20
                    },
                    "description": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "metadata": {
                        "type": "object"
                    }
                }
            },
            "UpdateTenantFeatureDto": {
                "type": "object",
                "properties": {
                    "enabled": {
                        "type": "boolean",
                        "description": "Enable or disable the feature for the authenticated tenant.",
                        "example": true
                    },
                    "config": {
                        "type": "object",
                        "description": "Optional feature-specific configuration bag.",
                        "example": {
                            "preferred_network": "zama_devnet"
                        }
                    }
                },
                "required": [
                    "enabled"
                ]
            },
            "MintDto": {
                "type": "object",
                "properties": {}
            },
            "TransferDto": {
                "type": "object",
                "properties": {}
            },
            "BurnDto": {
                "type": "object",
                "properties": {}
            },
            "ApproveDto": {
                "type": "object",
                "properties": {}
            },
            "TransferFromDto": {
                "type": "object",
                "properties": {}
            },
            "UpdateMetadataDto": {
                "type": "object",
                "properties": {}
            },
            "TransferAndCallDto": {
                "type": "object",
                "properties": {}
            },
            "TransferFromAndCallDto": {
                "type": "object",
                "properties": {}
            },
            "ApproveAndCallDto": {
                "type": "object",
                "properties": {}
            },
            "Permit2TransferDto": {
                "type": "object",
                "properties": {}
            },
            "SetRoyaltyDto": {
                "type": "object",
                "properties": {}
            },
            "SetApprovalForAllDto": {
                "type": "object",
                "properties": {}
            },
            "BurnFromDto": {
                "type": "object",
                "properties": {}
            },
            "SetTokenRoyaltyDto": {
                "type": "object",
                "properties": {}
            },
            "SetUriDto": {
                "type": "object",
                "properties": {}
            },
            "SetBaseUriDto": {
                "type": "object",
                "properties": {}
            },
            "SubmitPermitDto": {
                "type": "object",
                "properties": {}
            },
            "CreateCheckoutDto": {
                "type": "object",
                "properties": {}
            },
            "CreateCryptoCheckoutDto": {
                "type": "object",
                "properties": {}
            },
            "ActivatePlanDto": {
                "type": "object",
                "properties": {}
            },
            "ConfirmPaymentDto": {
                "type": "object",
                "properties": {}
            },
            "UpdateMaxAgeDto": {
                "type": "object",
                "properties": {
                    "max_age_seconds": {
                        "type": "number",
                        "description": "Max age in seconds for stale price detection",
                        "example": 3600
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key",
                        "example": "idem_age_001"
                    }
                },
                "required": [
                    "max_age_seconds"
                ]
            },
            "CreateVrfRequestDto": {
                "type": "object",
                "properties": {
                    "consumer_id": {
                        "type": "string",
                        "description": "VRF Consumer deployment ID",
                        "example": "tok_vrf123"
                    },
                    "num_words": {
                        "type": "number",
                        "description": "Number of random words to request (1-500)",
                        "example": 3
                    },
                    "network": {
                        "type": "string",
                        "description": "Network for VRF request",
                        "example": "polygon_amoy"
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key",
                        "example": "idem_vrf_001"
                    }
                },
                "required": [
                    "consumer_id",
                    "num_words",
                    "network"
                ]
            },
            "UpdateVrfConfigDto": {
                "type": "object",
                "properties": {
                    "key_hash": {
                        "type": "string",
                        "description": "Key hash for VRF",
                        "example": "0xabc..."
                    },
                    "subscription_id": {
                        "type": "string",
                        "description": "VRF subscription ID",
                        "example": "12345"
                    },
                    "request_confirmations": {
                        "type": "number",
                        "description": "Number of request confirmations",
                        "example": 3
                    },
                    "callback_gas_limit": {
                        "type": "number",
                        "description": "Callback gas limit",
                        "example": 200000
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key",
                        "example": "idem_cfg_001"
                    }
                }
            },
            "DeployVrfConsumerDto": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "Consumer name for tracking",
                        "example": "My VRF Consumer"
                    },
                    "network": {
                        "type": "string",
                        "description": "Network for deployment",
                        "example": "polygon_amoy"
                    },
                    "vrf_coordinator": {
                        "type": "string",
                        "description": "VRF Coordinator address",
                        "example": "0xabc..."
                    },
                    "key_hash": {
                        "type": "string",
                        "description": "Key hash for VRF",
                        "example": "0x..."
                    },
                    "subscription_id": {
                        "type": "string",
                        "description": "VRF subscription ID",
                        "example": "12345"
                    },
                    "request_confirmations": {
                        "type": "number",
                        "description": "Number of request confirmations (1-200)",
                        "example": 3
                    },
                    "callback_gas_limit": {
                        "type": "number",
                        "description": "Callback gas limit (100k-2.5M)",
                        "example": 200000
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key",
                        "example": "idem_vrf_deploy_001"
                    }
                },
                "required": [
                    "name",
                    "network",
                    "vrf_coordinator",
                    "key_hash",
                    "subscription_id"
                ]
            },
            "DeployPriceFeedConsumerDto": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "Consumer name for tracking",
                        "example": "ETH/USD Price Feed"
                    },
                    "network": {
                        "type": "string",
                        "description": "Network for deployment",
                        "example": "polygon_amoy"
                    },
                    "price_feed_address": {
                        "type": "string",
                        "description": "Chainlink price feed aggregator address",
                        "example": "0xabc..."
                    },
                    "pair": {
                        "type": "string",
                        "description": "Price pair identifier",
                        "example": "ETH/USD"
                    },
                    "max_age_seconds": {
                        "type": "number",
                        "description": "Max age in seconds for stale price detection",
                        "example": 3600
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key",
                        "example": "idem_pf_deploy_001"
                    }
                },
                "required": [
                    "name",
                    "network",
                    "price_feed_address",
                    "pair"
                ]
            },
            "VrfFulfillmentWebhookDto": {
                "type": "object",
                "properties": {
                    "request_id": {
                        "type": "string",
                        "description": "VRF request ID",
                        "example": "vrf_abc123"
                    }
                },
                "required": [
                    "request_id"
                ]
            },
            "CreateGovernanceDto": {
                "type": "object",
                "properties": {}
            },
            "HashProposalDto": {
                "type": "object",
                "properties": {}
            },
            "CreateProposalDto": {
                "type": "object",
                "properties": {}
            },
            "CastVoteDto": {
                "type": "object",
                "properties": {}
            },
            "ProposalActionDto": {
                "type": "object",
                "properties": {}
            },
            "DelegateDto": {
                "type": "object",
                "properties": {}
            },
            "UpdateQuorumNumeratorDto": {
                "type": "object",
                "properties": {}
            },
            "SetProposalThresholdDto": {
                "type": "object",
                "properties": {}
            },
            "SetVotingDelayDto": {
                "type": "object",
                "properties": {}
            },
            "SetVotingPeriodDto": {
                "type": "object",
                "properties": {}
            },
            "UpdateTimelockDto": {
                "type": "object",
                "properties": {}
            },
            "CastVoteBySigDto": {
                "type": "object",
                "properties": {}
            },
            "CastVoteWithReasonAndParamsDto": {
                "type": "object",
                "properties": {}
            },
            "RelayDto": {
                "type": "object",
                "properties": {}
            },
            "DelegateBySigDto": {
                "type": "object",
                "properties": {}
            },
            "CastVoteWithReasonAndParamsBySigDto": {
                "type": "object",
                "properties": {}
            },
            "HashOperationDto": {
                "type": "object",
                "properties": {}
            },
            "HashOperationBatchDto": {
                "type": "object",
                "properties": {}
            },
            "CreateIdentityDto": {
                "type": "object",
                "properties": {}
            },
            "BindIdentityRegistryDto": {
                "type": "object",
                "properties": {}
            },
            "UnbindIdentityRegistryDto": {
                "type": "object",
                "properties": {}
            },
            "UpdateIdentityDto": {
                "type": "object",
                "properties": {}
            },
            "UpdateCountryDto": {
                "type": "object",
                "properties": {}
            },
            "AddClaimDto": {
                "type": "object",
                "properties": {}
            },
            "CreateComplianceModuleDto": {
                "type": "object",
                "properties": {}
            },
            "AddComplianceRuleDto": {
                "type": "object",
                "properties": {}
            },
            "RemoveComplianceModuleDto": {
                "type": "object",
                "properties": {}
            },
            "BindTokenDto": {
                "type": "object",
                "properties": {}
            },
            "UnbindTokenDto": {
                "type": "object",
                "properties": {}
            },
            "SetMaxBalanceDto": {
                "type": "object",
                "properties": {}
            },
            "SetSupplyLimitDto": {
                "type": "object",
                "properties": {}
            },
            "AddCountryRestrictionDto": {
                "type": "object",
                "properties": {}
            },
            "RemoveCountryRestrictionDto": {
                "type": "object",
                "properties": {}
            },
            "BatchAddCountryRestrictionsDto": {
                "type": "object",
                "properties": {}
            },
            "SetTransferFeesDto": {
                "type": "object",
                "properties": {}
            },
            "SetTimeTransferLimitsDto": {
                "type": "object",
                "properties": {}
            },
            "SetExchangeMonthlyLimitDto": {
                "type": "object",
                "properties": {}
            },
            "SetExchangeIdDto": {
                "type": "object",
                "properties": {}
            },
            "AddAllowedCountryDto": {
                "type": "object",
                "properties": {}
            },
            "RemoveAllowedCountryDto": {
                "type": "object",
                "properties": {}
            },
            "ComplianceCheckDto": {
                "type": "object",
                "properties": {}
            },
            "CreateTrustedIssuerDto": {
                "type": "object",
                "properties": {}
            },
            "UpdateIssuerClaimTopicsDto": {
                "type": "object",
                "properties": {}
            },
            "CreateClaimTopicDto": {
                "type": "object",
                "properties": {}
            },
            "FreezeAddressDto": {
                "type": "object",
                "properties": {}
            },
            "UnfreezeAddressDto": {
                "type": "object",
                "properties": {}
            },
            "ForceTransferDto": {
                "type": "object",
                "properties": {}
            },
            "RecoverDto": {
                "type": "object",
                "properties": {}
            },
            "FreezePartialDto": {
                "type": "object",
                "properties": {}
            },
            "UnfreezePartialDto": {
                "type": "object",
                "properties": {}
            },
            "SetIdentityRegistryDto": {
                "type": "object",
                "properties": {}
            },
            "SetComplianceDto": {
                "type": "object",
                "properties": {}
            },
            "GrantRoleDto": {
                "type": "object",
                "properties": {}
            },
            "RevokeRoleDto": {
                "type": "object",
                "properties": {}
            },
            "RenounceRoleDto": {
                "type": "object",
                "properties": {}
            },
            "CreateVestingDto": {
                "type": "object",
                "properties": {}
            },
            "ReleaseVestingDto": {
                "type": "object",
                "properties": {}
            },
            "TransferVestingOwnershipDto": {
                "type": "object",
                "properties": {}
            },
            "CreateVaultDto": {
                "type": "object",
                "properties": {}
            },
            "DepositVaultDto": {
                "type": "object",
                "properties": {}
            },
            "WithdrawVaultDto": {
                "type": "object",
                "properties": {}
            },
            "RedeemVaultDto": {
                "type": "object",
                "properties": {}
            },
            "MintVaultDto": {
                "type": "object",
                "properties": {}
            },
            "VaultShareTransferDto": {
                "type": "object",
                "properties": {}
            },
            "VaultShareApproveDto": {
                "type": "object",
                "properties": {}
            },
            "CreateTbaDto": {
                "type": "object",
                "properties": {}
            },
            "ExecuteTbaDto": {
                "type": "object",
                "properties": {}
            },
            "ExecuteBatchTbaDto": {
                "type": "object",
                "properties": {}
            },
            "DeployMultisigDto": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "description": "Multisig wallet name",
                        "example": "Treasury"
                    },
                    "owners": {
                        "description": "Owner addresses",
                        "example": [
                            "0xabc...",
                            "0xdef..."
                        ],
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "threshold": {
                        "type": "number",
                        "description": "Number of confirmations required",
                        "example": 2
                    },
                    "network": {
                        "type": "string",
                        "description": "Target network",
                        "example": "polygon_amoy"
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key"
                    },
                    "safe_singleton_address": {
                        "type": "string",
                        "description": "Safe singleton (Safe.sol) address. Falls back to SAFE_SINGLETON_ADDRESS env var.",
                        "example": "0x..."
                    },
                    "safe_proxy_factory_address": {
                        "type": "string",
                        "description": "SafeProxyFactory address. Falls back to SAFE_PROXY_FACTORY_ADDRESS env var.",
                        "example": "0x..."
                    }
                },
                "required": [
                    "name",
                    "owners",
                    "threshold",
                    "network"
                ]
            },
            "SubmitMultisigTxDto": {
                "type": "object",
                "properties": {
                    "to": {
                        "type": "string",
                        "description": "Destination address",
                        "example": "0xabc..."
                    },
                    "value": {
                        "type": "string",
                        "description": "ETH value in wei",
                        "example": "1000000000000000000"
                    },
                    "data": {
                        "type": "string",
                        "description": "Calldata hex",
                        "example": "0x"
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key"
                    }
                },
                "required": [
                    "to"
                ]
            },
            "ConfirmMultisigTxDto": {
                "type": "object",
                "properties": {
                    "signer_address": {
                        "type": "string",
                        "description": "Signer address",
                        "example": "0xabc..."
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key"
                    }
                },
                "required": [
                    "signer_address"
                ]
            },
            "ExecuteMultisigTxDto": {
                "type": "object",
                "properties": {
                    "signatures": {
                        "type": "string",
                        "description": "Concatenated signatures bytes (hex)",
                        "example": "0x..."
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key"
                    }
                },
                "required": [
                    "signatures"
                ]
            },
            "AddOwnerDto": {
                "type": "object",
                "properties": {
                    "owner": {
                        "type": "string",
                        "description": "New owner address",
                        "example": "0xabc..."
                    },
                    "threshold": {
                        "type": "number",
                        "description": "New threshold (defaults to current)",
                        "example": 2
                    },
                    "signatures": {
                        "type": "string",
                        "description": "Concatenated owner signatures (hex)",
                        "example": "0x..."
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key"
                    }
                },
                "required": [
                    "owner",
                    "signatures"
                ]
            },
            "RemoveOwnerDto": {
                "type": "object",
                "properties": {
                    "prev_owner": {
                        "type": "string",
                        "description": "Previous owner in linked list (for Safe removeOwner)",
                        "example": "0xabc..."
                    },
                    "threshold": {
                        "type": "number",
                        "description": "New threshold (defaults to current)",
                        "example": 1
                    },
                    "signatures": {
                        "type": "string",
                        "description": "Concatenated owner signatures (hex)",
                        "example": "0x..."
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key"
                    }
                },
                "required": [
                    "prev_owner",
                    "signatures"
                ]
            },
            "ChangeThresholdDto": {
                "type": "object",
                "properties": {
                    "threshold": {
                        "type": "number",
                        "description": "New threshold value",
                        "example": 3
                    },
                    "signatures": {
                        "type": "string",
                        "description": "Concatenated owner signatures (hex)",
                        "example": "0x..."
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key"
                    }
                },
                "required": [
                    "threshold",
                    "signatures"
                ]
            },
            "SwapOwnerDto": {
                "type": "object",
                "properties": {
                    "prev_owner": {
                        "type": "string",
                        "description": "Previous owner in linked list (for Safe swapOwner)",
                        "example": "0xabc..."
                    },
                    "old_owner": {
                        "type": "string",
                        "description": "Old owner to be replaced",
                        "example": "0xdef..."
                    },
                    "new_owner": {
                        "type": "string",
                        "description": "New owner to replace old_owner",
                        "example": "0x123..."
                    },
                    "signatures": {
                        "type": "string",
                        "description": "Concatenated owner signatures (hex)",
                        "example": "0x..."
                    },
                    "idempotency_key": {
                        "type": "string",
                        "description": "Idempotency key"
                    }
                },
                "required": [
                    "prev_owner",
                    "old_owner",
                    "new_owner",
                    "signatures"
                ]
            },
            "CreateBatchDto": {
                "type": "object",
                "properties": {}
            },
            "DripFaucetDto": {
                "type": "object",
                "properties": {
                    "network": {
                        "type": "string"
                    },
                    "wallet_address": {
                        "type": "string"
                    }
                },
                "required": [
                    "network",
                    "wallet_address"
                ]
            },
            "CreateStudioLeadDto": {
                "type": "object",
                "properties": {
                    "consent": {
                        "type": "boolean"
                    },
                    "name": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "email": {
                        "type": "string",
                        "format": "email"
                    },
                    "phone": {
                        "type": "string",
                        "maxLength": 30
                    },
                    "company": {
                        "type": "string",
                        "maxLength": 255
                    },
                    "preferred_contact": {
                        "type": "string",
                        "enum": [
                            "email",
                            "whatsapp",
                            "phone"
                        ]
                    },
                    "quiz_answers": {
                        "type": "object"
                    },
                    "diagnosis": {
                        "type": "object"
                    },
                    "source": {
                        "type": "string",
                        "maxLength": 50
                    }
                },
                "required": [
                    "consent",
                    "name",
                    "email"
                ]
            },
            "UpdateStudioLeadDto": {
                "type": "object",
                "properties": {
                    "status": {
                        "type": "string",
                        "enum": [
                            "new",
                            "contacted",
                            "qualified",
                            "converted",
                            "lost"
                        ]
                    },
                    "notes": {
                        "type": "string",
                        "maxLength": 5000
                    }
                }
            },
            "CreateConnectAccountDto": {
                "type": "object",
                "properties": {}
            },
            "VerifySiweDto": {
                "type": "object",
                "properties": {}
            },
            "CreateSessionKeyDto": {
                "type": "object",
                "properties": {}
            },
            "RelayUserOpDto": {
                "type": "object",
                "properties": {}
            },
            "EstimateUserOpGasDto": {
                "type": "object",
                "properties": {}
            },
            "RegisterPasskeyDto": {
                "type": "object",
                "properties": {}
            },
            "SubmitSignedOpDto": {
                "type": "object",
                "properties": {}
            },
            "SignAndRelayDto": {
                "type": "object",
                "properties": {}
            },
            "ConfigureRecoveryDto": {
                "type": "object",
                "properties": {}
            },
            "InitiateRecoveryDto": {
                "type": "object",
                "properties": {}
            },
            "ConfirmRecoveryDto": {
                "type": "object",
                "properties": {}
            },
            "ExecuteRecoveryDto": {
                "type": "object",
                "properties": {}
            },
            "InstallModuleDto": {
                "type": "object",
                "properties": {}
            },
            "UninstallModuleDto": {
                "type": "object",
                "properties": {}
            },
            "UninstallValidationDto": {
                "type": "object",
                "properties": {}
            },
            "ChangeRootValidatorDto": {
                "type": "object",
                "properties": {}
            },
            "OAuthVerifyDto": {
                "type": "object",
                "properties": {}
            },
            "OAuthLinkDto": {
                "type": "object",
                "properties": {}
            },
            "RegisterPaymasterDto": {
                "type": "object",
                "properties": {}
            },
            "ImportPaymasterKeystoreDto": {
                "type": "object",
                "properties": {}
            },
            "CreateDecryptRequestDto": {
                "type": "object",
                "properties": {}
            },
            "FulfillDecryptRequestDto": {
                "type": "object",
                "properties": {}
            }
        }
    },
    "externalDocs": {
        "description": "Developer Docs",
        "url": "https://docs.urblock.io"
    }
}
