{
  "openapi": "3.1.0",
  "info": {
    "title": "Hood Long Trading API",
    "version": "1.0.0",
    "summary": "Market data and wallet-reviewed leveraged trading on Robinhood Chain",
    "description": "Public JSON API for building a Hood Long frontend. Live preparations require a short-lived personal wallet signature. The API prepares transactions but never signs or broadcasts for the user.",
    "license": { "name": "Proprietary", "identifier": "LicenseRef-Proprietary" }
  },
  "servers": [
    { "url": "https://hoodlong.com", "description": "Production" }
  ],
  "security": [],
  "externalDocs": {
    "description": "Frontend integration guide",
    "url": "https://hoodlong.com/docs/api/"
  },
  "tags": [
    { "name": "Trading", "description": "Action-based market, trade, position, and pool interface" }
  ],
  "paths": {
    "/functions/v1/trade-api": {
      "get": {
        "tags": ["Trading"],
        "operationId": "readTradeApi",
        "summary": "Read a public resource",
        "description": "GET is supported for simple read actions. POST is recommended for a uniform client.",
        "parameters": [
          { "name": "action", "in": "query", "required": false, "schema": { "type": "string", "enum": ["health", "markets", "market_prices", "market_liquidity", "price_history"], "default": "markets" } },
          { "name": "marketId", "in": "query", "required": false, "schema": { "$ref": "#/components/schemas/Uuid" } },
          { "name": "interval", "in": "query", "required": false, "schema": { "$ref": "#/components/schemas/ChartInterval" } },
          { "name": "before", "in": "query", "required": false, "schema": { "type": "string", "format": "date-time" } }
        ],
        "responses": {
          "200": { "description": "Successful read", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } },
          "400": { "$ref": "#/components/responses/Error" },
          "404": { "$ref": "#/components/responses/Error" },
          "500": { "$ref": "#/components/responses/Error" }
        }
      },
      "post": {
        "tags": ["Trading"],
        "operationId": "tradeApiAction",
        "summary": "Run a Hood Long API action",
        "description": "Send one action object. Amounts should be decimal strings. Live preparation returns short-lived transaction data that the connected user wallet must explicitly review and broadcast.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ActionRequest" },
              "examples": {
                "markets": { "value": { "action": "markets" } },
                "quote": { "value": { "action": "quote", "wallet": "0x1111111111111111111111111111111111111111", "marketId": "11111111-1111-4111-8111-111111111111", "direction": "long", "collateral": "0.01", "leverage": "2" } },
                "positions": { "value": { "action": "positions", "wallet": "0x1111111111111111111111111111111111111111" } }
              }
            }
          }
        },
        "responses": {
          "200": { "description": "Successful action", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } },
          "400": { "$ref": "#/components/responses/Error" },
          "403": { "$ref": "#/components/responses/Error" },
          "404": { "$ref": "#/components/responses/Error" },
          "409": { "$ref": "#/components/responses/Error" },
          "429": { "$ref": "#/components/responses/Error" },
          "500": { "$ref": "#/components/responses/Error" }
        },
        "x-hoodlong-open-flow": ["quote", "prepare_challenge", "personal_sign", "prepare", "human_review", "wallet_broadcast", "record", "transaction_status"],
        "x-hoodlong-close-flow": ["positions", "prepare_challenge", "personal_sign", "prepare_close", "human_review", "wallet_broadcast", "record_close", "transaction_status"]
      },
      "options": {
        "tags": ["Trading"],
        "operationId": "tradeApiCors",
        "summary": "CORS preflight",
        "responses": { "204": { "description": "CORS preflight accepted" }, "400": { "$ref": "#/components/responses/Error" } }
      }
    }
  },
  "components": {
    "responses": {
      "Error": {
        "description": "Action failed",
        "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } }
      }
    },
    "schemas": {
      "Uuid": { "type": "string", "format": "uuid" },
      "Address": { "type": "string", "pattern": "^0x[0-9a-fA-F]{40}$" },
      "TxHash": { "type": "string", "pattern": "^0x[0-9a-fA-F]{64}$" },
      "Signature": { "type": "string", "pattern": "^0x[0-9a-fA-F]{130}$" },
      "DecimalAmount": { "type": "string", "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$", "examples": ["0.01"] },
      "Direction": { "type": "string", "enum": ["long", "short"] },
      "ChartInterval": { "type": "string", "enum": ["continuous", "10m", "30m", "1h", "4h"], "default": "continuous" },
      "WalletCapability": { "type": "string", "const": "native-value-v2" },
      "NoInputAction": {
        "type": "object",
        "required": ["action"],
        "properties": { "action": { "type": "string", "enum": ["health", "markets", "market_prices"] } },
        "additionalProperties": false
      },
      "MarketLiquidityRequest": {
        "type": "object",
        "required": ["action", "marketId"],
        "properties": {
          "action": { "const": "market_liquidity" },
          "marketId": { "$ref": "#/components/schemas/Uuid" },
          "wallet": { "$ref": "#/components/schemas/Address" }
        },
        "additionalProperties": false
      },
      "PriceHistoryRequest": {
        "type": "object",
        "required": ["action", "marketId"],
        "properties": {
          "action": { "const": "price_history" },
          "marketId": { "$ref": "#/components/schemas/Uuid" },
          "interval": { "$ref": "#/components/schemas/ChartInterval" },
          "before": { "type": "string", "format": "date-time" }
        },
        "additionalProperties": false
      },
      "PoolRequest": {
        "type": "object",
        "required": ["action"],
        "properties": {
          "action": { "const": "pool" },
          "wallet": { "oneOf": [{ "$ref": "#/components/schemas/Address" }, { "type": "string", "maxLength": 0 }] }
        },
        "additionalProperties": false
      },
      "TradeIntent": {
        "type": "object",
        "required": ["wallet", "marketId", "direction", "collateral", "leverage"],
        "properties": {
          "wallet": { "$ref": "#/components/schemas/Address" },
          "marketId": { "$ref": "#/components/schemas/Uuid" },
          "direction": { "$ref": "#/components/schemas/Direction" },
          "collateral": { "$ref": "#/components/schemas/DecimalAmount" },
          "leverage": { "$ref": "#/components/schemas/DecimalAmount" }
        }
      },
      "QuoteRequest": {
        "type": "object",
        "required": ["action", "marketId", "direction", "collateral", "leverage"],
        "properties": {
          "action": { "const": "quote" },
          "wallet": { "$ref": "#/components/schemas/Address" },
          "marketId": { "$ref": "#/components/schemas/Uuid" },
          "direction": { "$ref": "#/components/schemas/Direction" },
          "collateral": { "$ref": "#/components/schemas/DecimalAmount" },
          "leverage": { "$ref": "#/components/schemas/DecimalAmount" }
        },
        "additionalProperties": false
      },
      "OpenChallengeRequest": {
        "allOf": [
          { "$ref": "#/components/schemas/TradeIntent" },
          {
            "type": "object",
            "required": ["action", "walletClientCapability"],
            "properties": {
              "action": { "const": "prepare_challenge" },
              "walletClientCapability": { "$ref": "#/components/schemas/WalletCapability" }
            },
            "unevaluatedProperties": false
          }
        ]
      },
      "CloseChallengeRequest": {
        "type": "object",
        "required": ["action", "wallet", "positionId", "walletClientCapability"],
        "properties": {
          "action": { "const": "prepare_challenge" },
          "wallet": { "$ref": "#/components/schemas/Address" },
          "positionId": { "$ref": "#/components/schemas/Uuid" },
          "walletClientCapability": { "$ref": "#/components/schemas/WalletCapability" }
        },
        "additionalProperties": false
      },
      "PreparationAuthorization": {
        "type": "object",
        "required": ["challengeId", "challengeExpiresAt", "signature"],
        "properties": {
          "challengeId": { "$ref": "#/components/schemas/Uuid" },
          "challengeExpiresAt": { "type": "string", "format": "date-time" },
          "signature": { "$ref": "#/components/schemas/Signature" }
        }
      },
      "PrepareOpenRequest": {
        "allOf": [
          { "$ref": "#/components/schemas/TradeIntent" },
          { "$ref": "#/components/schemas/PreparationAuthorization" },
          {
            "type": "object",
            "required": ["action", "walletClientCapability"],
            "properties": {
              "action": { "const": "prepare" },
              "walletClientCapability": { "$ref": "#/components/schemas/WalletCapability" }
            },
            "unevaluatedProperties": false
          }
        ]
      },
      "PrepareCloseRequest": {
        "allOf": [
          { "$ref": "#/components/schemas/PreparationAuthorization" },
          {
            "type": "object",
            "required": ["action", "wallet", "positionId", "walletClientCapability"],
            "properties": {
              "action": { "const": "prepare_close" },
              "wallet": { "$ref": "#/components/schemas/Address" },
              "positionId": { "$ref": "#/components/schemas/Uuid" },
              "walletClientCapability": { "$ref": "#/components/schemas/WalletCapability" },
              "topUpEth": { "$ref": "#/components/schemas/DecimalAmount" }
            },
            "unevaluatedProperties": false
          }
        ]
      },
      "WalletReadRequest": {
        "type": "object",
        "required": ["action", "wallet"],
        "properties": {
          "action": { "type": "string", "enum": ["positions", "activity"] },
          "wallet": { "$ref": "#/components/schemas/Address" }
        },
        "additionalProperties": false
      },
      "RecordOpenRequest": {
        "type": "object",
        "required": ["action", "wallet", "marketId", "preparationId", "txHash"],
        "properties": {
          "action": { "const": "record" },
          "wallet": { "$ref": "#/components/schemas/Address" },
          "marketId": { "$ref": "#/components/schemas/Uuid" },
          "preparationId": { "$ref": "#/components/schemas/Uuid" },
          "txHash": { "$ref": "#/components/schemas/TxHash" }
        },
        "additionalProperties": false
      },
      "RecordCloseRequest": {
        "type": "object",
        "required": ["action", "wallet", "positionId", "preparationId", "txHash"],
        "properties": {
          "action": { "const": "record_close" },
          "wallet": { "$ref": "#/components/schemas/Address" },
          "positionId": { "$ref": "#/components/schemas/Uuid" },
          "preparationId": { "$ref": "#/components/schemas/Uuid" },
          "txHash": { "$ref": "#/components/schemas/TxHash" }
        },
        "additionalProperties": false
      },
      "TransactionStatusRequest": {
        "type": "object",
        "required": ["action", "wallet"],
        "properties": {
          "action": { "const": "transaction_status" },
          "wallet": { "$ref": "#/components/schemas/Address" },
          "positionId": { "$ref": "#/components/schemas/Uuid" },
          "txHash": { "$ref": "#/components/schemas/TxHash" }
        },
        "anyOf": [
          { "required": ["positionId"], "properties": { "positionId": { "$ref": "#/components/schemas/Uuid" } } },
          { "required": ["txHash"], "properties": { "txHash": { "$ref": "#/components/schemas/TxHash" } } }
        ],
        "additionalProperties": false
      },
      "RecordReplacementRequest": {
        "type": "object",
        "required": ["action", "wallet", "txHash", "replacementHash"],
        "properties": {
          "action": { "const": "record_replacement" },
          "wallet": { "$ref": "#/components/schemas/Address" },
          "txHash": { "$ref": "#/components/schemas/TxHash" },
          "replacementHash": { "$ref": "#/components/schemas/TxHash" }
        },
        "additionalProperties": false
      },
      "ActionRequest": {
        "oneOf": [
          { "$ref": "#/components/schemas/NoInputAction" },
          { "$ref": "#/components/schemas/MarketLiquidityRequest" },
          { "$ref": "#/components/schemas/PriceHistoryRequest" },
          { "$ref": "#/components/schemas/PoolRequest" },
          { "$ref": "#/components/schemas/QuoteRequest" },
          { "$ref": "#/components/schemas/OpenChallengeRequest" },
          { "$ref": "#/components/schemas/CloseChallengeRequest" },
          { "$ref": "#/components/schemas/PrepareOpenRequest" },
          { "$ref": "#/components/schemas/PrepareCloseRequest" },
          { "$ref": "#/components/schemas/WalletReadRequest" },
          { "$ref": "#/components/schemas/RecordOpenRequest" },
          { "$ref": "#/components/schemas/RecordCloseRequest" },
          { "$ref": "#/components/schemas/TransactionStatusRequest" },
          { "$ref": "#/components/schemas/RecordReplacementRequest" }
        ]
      },
      "PreparedTransaction": {
        "type": "object",
        "required": ["from", "to", "data", "value"],
        "properties": {
          "from": { "$ref": "#/components/schemas/Address" },
          "to": { "$ref": "#/components/schemas/Address" },
          "data": { "type": "string", "pattern": "^0x[0-9a-fA-F]*$" },
          "value": { "type": "string", "pattern": "^0x[0-9a-fA-F]+$" },
          "gas": { "type": "string", "pattern": "^0x[0-9a-fA-F]+$" }
        },
        "additionalProperties": true
      },
      "RouteSupport": {
        "type": "object",
        "required": ["configured", "quotable", "executable"],
        "properties": {
          "configured": { "type": "boolean" },
          "quotable": { "type": "boolean" },
          "executable": { "type": "boolean" },
          "provider": { "type": ["string", "null"] },
          "reason": { "type": ["string", "null"] }
        },
        "additionalProperties": true
      },
      "Network": {
        "type": "object",
        "required": ["name", "chainId", "explorerUrl", "simulationMode"],
        "properties": {
          "name": { "type": "string" },
          "chainId": { "type": "integer", "const": 4663 },
          "rpcUrl": { "type": "string", "format": "uri" },
          "explorerUrl": { "type": "string", "format": "uri" },
          "simulationMode": { "type": "boolean" },
          "requiredConfirmations": { "type": "integer", "minimum": 1 },
          "borrowingPaused": { "type": ["boolean", "null"] },
          "lendingPool": { "$ref": "#/components/schemas/Address" },
          "weth": { "$ref": "#/components/schemas/Address" },
          "wethUsd": { "type": "number" },
          "valuationAsset": { "const": "ETH" }
        },
        "additionalProperties": true
      },
      "Market": {
        "type": "object",
        "required": ["id", "symbol", "name", "tokenAddress", "decimals", "maxLeverage", "listingStatus"],
        "properties": {
          "id": { "$ref": "#/components/schemas/Uuid" },
          "symbol": { "type": "string" },
          "name": { "type": "string" },
          "price": { "type": "number" },
          "priceEth": { "type": ["number", "null"] },
          "dayChange": { "type": "number" },
          "marketCap": { "type": ["number", "null"] },
          "marketCapEth": { "type": ["number", "null"] },
          "maxLeverage": { "type": "number" },
          "maintenanceMargin": { "type": "number" },
          "borrowApr": { "type": "number" },
          "tokenAddress": { "$ref": "#/components/schemas/Address" },
          "decimals": { "type": "integer", "minimum": 0 },
          "assetClass": { "type": "string" },
          "tags": { "type": "array", "items": { "type": "string" } },
          "listingStatus": { "type": "string" },
          "pricingMode": { "type": "string" },
          "priceSource": { "type": "string" },
          "priceUpdatedAt": { "type": ["string", "null"], "format": "date-time" },
          "borrowingPaused": { "type": "boolean" },
          "borrowingPauseReason": { "type": ["string", "null"] },
          "limits": {
            "type": "object",
            "properties": {
              "minCollateralWeth": { "type": "number" },
              "maxCollateralWeth": { "type": "number" },
              "maxOpenInterestUsd": { "type": "number" },
              "maxWalletOpenInterestUsd": { "type": "number" }
            },
            "additionalProperties": true
          }
        },
        "additionalProperties": true
      },
      "Quote": {
        "type": "object",
        "required": ["id", "market", "direction", "collateralWeth", "leverage", "borrowedWeth", "positionSizeEth", "entryPriceEth", "liquidationPriceEth", "expiresAt"],
        "properties": {
          "id": { "$ref": "#/components/schemas/Uuid" },
          "market": { "$ref": "#/components/schemas/Market" },
          "direction": { "$ref": "#/components/schemas/Direction" },
          "collateralWeth": { "type": "number" },
          "collateralEth": { "type": "number" },
          "leverage": { "type": "number" },
          "borrowedWeth": { "type": "number" },
          "notionalUsd": { "type": "number" },
          "positionSizeEth": { "type": "number" },
          "assetAmount": { "type": "number" },
          "entryPrice": { "type": "number" },
          "entryPriceEth": { "type": "number" },
          "liquidationPrice": { "type": "number" },
          "liquidationPriceEth": { "type": "number" },
          "liquidationLtvBps": { "type": "integer" },
          "estimatedFeeUsd": { "type": "number" },
          "estimatedFeeEth": { "type": "number" },
          "referenceWethUsd": { "type": "number" },
          "valuationAsset": { "const": "ETH" },
          "expiresAt": { "type": "string", "format": "date-time" },
          "indicative": { "const": true },
          "execution": { "$ref": "#/components/schemas/RouteSupport" },
          "network": { "$ref": "#/components/schemas/Network" }
        },
        "additionalProperties": true
      },
      "Preparation": {
        "type": "object",
        "required": ["mode", "ready"],
        "properties": {
          "mode": { "type": "string" },
          "provider": { "type": ["string", "null"] },
          "chainId": { "type": "integer" },
          "contract": { "$ref": "#/components/schemas/Address" },
          "method": { "type": "string" },
          "ready": { "type": "boolean" },
          "reason": { "type": ["string", "null"] },
          "expiresAt": { "type": "string", "format": "date-time" },
          "preparationId": { "oneOf": [{ "$ref": "#/components/schemas/Uuid" }, { "type": "null" }] },
          "transaction": { "$ref": "#/components/schemas/PreparedTransaction" },
          "route": { "type": "object", "additionalProperties": true },
          "oracleUpdate": { "type": ["object", "null"], "additionalProperties": true }
        },
        "additionalProperties": true
      },
      "HealthResponse": {
        "type": "object",
        "required": ["ok", "service", "docs", "openapi"],
        "properties": {
          "ok": { "const": true },
          "service": { "const": "trade-api" },
          "docs": { "const": "/docs/api/" },
          "openapi": { "const": "/openapi.json" }
        },
        "additionalProperties": false
      },
      "MarketsResponse": {
        "type": "object",
        "required": ["ok", "markets", "network", "routes"],
        "properties": {
          "ok": { "const": true },
          "markets": { "type": "array", "items": { "$ref": "#/components/schemas/Market" } },
          "network": { "$ref": "#/components/schemas/Network" },
          "routes": {
            "type": "object",
            "required": ["long", "short"],
            "properties": { "long": { "$ref": "#/components/schemas/RouteSupport" }, "short": { "$ref": "#/components/schemas/RouteSupport" } },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "MarketPricesResponse": {
        "type": "object",
        "required": ["ok", "prices"],
        "properties": {
          "ok": { "const": true },
          "prices": { "type": "array", "items": { "type": "object", "required": ["id", "price", "priceEth", "dayChange", "priceUpdatedAt"], "properties": { "id": { "$ref": "#/components/schemas/Uuid" }, "price": { "type": "number" }, "priceEth": { "type": ["number", "null"] }, "dayChange": { "type": "number" }, "priceUpdatedAt": { "type": ["string", "null"], "format": "date-time" } }, "additionalProperties": false } }
        },
        "additionalProperties": false
      },
      "MarketLiquidityResponse": {
        "type": "object",
        "required": ["ok", "liquidity"],
        "properties": {
          "ok": { "const": true },
          "liquidity": {
            "type": "object",
            "required": ["marketId", "symbol", "dex", "pool", "limits", "observedAt"],
            "properties": {
              "marketId": { "$ref": "#/components/schemas/Uuid" },
              "symbol": { "type": "string" },
              "wethUsd": { "type": ["number", "null"] },
              "dex": { "type": "object", "additionalProperties": true },
              "pool": { "type": "object", "additionalProperties": true },
              "limits": { "type": "object", "additionalProperties": true },
              "observedAt": { "type": "string", "format": "date-time" }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "PriceHistoryResponse": {
        "type": "object",
        "required": ["ok", "marketId", "symbol", "interval", "hasMore", "points"],
        "properties": {
          "ok": { "const": true },
          "marketId": { "$ref": "#/components/schemas/Uuid" },
          "symbol": { "type": "string" },
          "interval": { "$ref": "#/components/schemas/ChartInterval" },
          "before": { "type": ["string", "null"], "format": "date-time" },
          "nextBefore": { "type": ["string", "null"], "format": "date-time" },
          "hasMore": { "type": "boolean" },
          "pageSize": { "type": "integer" },
          "source": { "type": "string" },
          "quoteAsset": { "const": "ETH" },
          "granularity": { "type": "string" },
          "points": { "type": "array", "items": { "type": "object", "additionalProperties": true } }
        },
        "additionalProperties": true
      },
      "PoolResponse": {
        "type": "object",
        "required": ["ok", "pool"],
        "properties": { "ok": { "const": true }, "pool": { "type": "object", "additionalProperties": true } },
        "additionalProperties": false
      },
      "QuoteResponse": {
        "type": "object",
        "required": ["ok", "quote"],
        "properties": { "ok": { "const": true }, "quote": { "$ref": "#/components/schemas/Quote" } },
        "additionalProperties": false
      },
      "ChallengeResponse": {
        "type": "object",
        "required": ["ok", "challenge"],
        "properties": {
          "ok": { "const": true },
          "challenge": { "type": "object", "required": ["id", "message", "expiresAt"], "properties": { "id": { "$ref": "#/components/schemas/Uuid" }, "message": { "type": "string" }, "expiresAt": { "type": "string", "format": "date-time" } }, "additionalProperties": false }
        },
        "additionalProperties": false
      },
      "PrepareOpenResponse": {
        "type": "object",
        "required": ["ok", "quote", "preparation"],
        "properties": { "ok": { "const": true }, "quote": { "$ref": "#/components/schemas/Quote" }, "preparation": { "$ref": "#/components/schemas/Preparation" } },
        "additionalProperties": false
      },
      "PrepareCloseResponse": {
        "type": "object",
        "required": ["ok", "close", "preparation"],
        "properties": { "ok": { "const": true }, "close": { "type": "object", "additionalProperties": true }, "preparation": { "$ref": "#/components/schemas/Preparation" } },
        "additionalProperties": false
      },
      "PositionsResponse": {
        "type": "object",
        "required": ["ok", "positions"],
        "properties": { "ok": { "const": true }, "positions": { "type": "array", "items": { "type": "object", "additionalProperties": true } } },
        "additionalProperties": false
      },
      "ActivityResponse": {
        "type": "object",
        "required": ["ok", "activity"],
        "properties": { "ok": { "const": true }, "activity": { "type": "array", "items": { "type": "object", "additionalProperties": true } } },
        "additionalProperties": false
      },
      "TransactionStatusResponse": {
        "type": "object",
        "required": ["ok", "transactions"],
        "properties": { "ok": { "const": true }, "transactions": { "type": "array", "items": { "type": "object", "additionalProperties": true } } },
        "additionalProperties": false
      },
      "MutationResponse": {
        "type": "object",
        "required": ["ok"],
        "properties": { "ok": { "const": true } },
        "additionalProperties": true
      },
      "SuccessResponse": {
        "oneOf": [
          { "$ref": "#/components/schemas/HealthResponse" },
          { "$ref": "#/components/schemas/MarketsResponse" },
          { "$ref": "#/components/schemas/MarketPricesResponse" },
          { "$ref": "#/components/schemas/MarketLiquidityResponse" },
          { "$ref": "#/components/schemas/PriceHistoryResponse" },
          { "$ref": "#/components/schemas/PoolResponse" },
          { "$ref": "#/components/schemas/QuoteResponse" },
          { "$ref": "#/components/schemas/ChallengeResponse" },
          { "$ref": "#/components/schemas/PrepareOpenResponse" },
          { "$ref": "#/components/schemas/PrepareCloseResponse" },
          { "$ref": "#/components/schemas/PositionsResponse" },
          { "$ref": "#/components/schemas/ActivityResponse" },
          { "$ref": "#/components/schemas/TransactionStatusResponse" },
          { "$ref": "#/components/schemas/MutationResponse" }
        ]
      },
      "ErrorResponse": {
        "type": "object",
        "required": ["ok", "error"],
        "properties": {
          "ok": { "const": false },
          "error": { "type": "string" },
          "details": {}
        },
        "additionalProperties": false
      }
    }
  }
}
