{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/getchord-xyz/json-schema/getchord-xyz-pool-list-row-schema.json",
  "title": "PoolListRow",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/getchord-xyz-openapi.json#/components/schemas/PoolListRow",
  "type": "object",
  "properties": {
    "pool": {
      "type": "string",
      "pattern": "^0x([a-fA-F0-9]{40}|[a-fA-F0-9]{64})$",
      "description": "A pool: a 20-byte contract address (V2 / V3) or a 32-byte Uniswap V4 pool id."
    },
    "dex": {
      "type": "string",
      "description": ""
    },
    "kind": {
      "type": "string",
      "enum": [
        "v2",
        "clmm",
        "v4"
      ]
    },
    "feeBps": {
      "type": [
        "number",
        "null"
      ],
      "description": ""
    },
    "hooks": {
      "type": [
        "string",
        "null"
      ],
      "pattern": "^0x[a-fA-F0-9]{40}$",
      "description": "EVM address, hex, case-insensitive."
    },
    "lpAccess": {
      "type": "string",
      "enum": [
        "open",
        "hooked",
        "unknown"
      ],
      "description": "`hooked` = a V4 hook can refuse adds."
    },
    "tickSpacing": {
      "type": [
        "integer",
        "null"
      ],
      "description": ""
    },
    "token0": {
      "$ref": "#/$defs/TokenLite"
    },
    "token1": {
      "$ref": "#/$defs/TokenLite"
    },
    "tokenSide": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Which side is the non-anchor token (0 or 1)."
    },
    "tvlUsd": {
      "type": [
        "number",
        "null"
      ],
      "description": ""
    },
    "tvlSrc": {
      "type": [
        "string",
        "null"
      ],
      "description": "Where TVL came from (`onchain`, `dexscreener`, …)."
    },
    "tvlAt": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Unix time, seconds, UTC."
    },
    "vol": {
      "type": "object",
      "properties": {
        "h1": {
          "type": "number",
          "description": ""
        },
        "h6": {
          "type": "number",
          "description": ""
        },
        "h24": {
          "type": "number",
          "description": ""
        },
        "d7": {
          "type": "number",
          "description": ""
        }
      }
    },
    "fees": {
      "type": "object",
      "properties": {
        "h1": {
          "type": [
            "number",
            "null"
          ],
          "description": ""
        },
        "h6": {
          "type": [
            "number",
            "null"
          ],
          "description": ""
        },
        "h24": {
          "type": [
            "number",
            "null"
          ],
          "description": ""
        }
      },
      "description": "volume × the pool's fee tier."
    },
    "feeTvlPct": {
      "type": "object",
      "properties": {
        "h1": {
          "type": [
            "number",
            "null"
          ],
          "description": ""
        },
        "h6": {
          "type": [
            "number",
            "null"
          ],
          "description": ""
        },
        "h24": {
          "type": [
            "number",
            "null"
          ],
          "description": ""
        }
      },
      "description": "fees ÷ TVL, percent."
    },
    "aprPct": {
      "type": [
        "number",
        "null"
      ],
      "description": "24h fee/TVL × 365 — a full-range yardstick, not a promise."
    },
    "trades24h": {
      "type": "integer",
      "description": ""
    },
    "wallets24h": {
      "type": "integer",
      "description": ""
    },
    "priceUsd": {
      "type": [
        "number",
        "null"
      ],
      "description": ""
    },
    "lpAdd24h": {
      "type": "number",
      "description": ""
    },
    "lpRemove24h": {
      "type": "number",
      "description": ""
    },
    "providers24h": {
      "type": "integer",
      "description": ""
    },
    "firstSeenTs": {
      "type": "integer",
      "description": "Unix time, seconds, UTC."
    },
    "createdTs": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Unix time, seconds, UTC."
    },
    "lastTradeHour": {
      "type": "integer",
      "description": ""
    },
    "turnover24h": {
      "type": [
        "number",
        "null"
      ],
      "description": "24h volume ÷ TVL."
    },
    "suspect": {
      "type": "boolean",
      "description": "Wash or launch-farm printing (volume without traders, dust TVL under real volume, turnover no honest pool reaches). Hidden by default; `flagged=1` shows them."
    },
    "score": {
      "type": "integer",
      "description": "0–100 health score (traders, TVL, yield sanity, LP flow, age, penalties)."
    },
    "marketCapUsd": {
      "type": [
        "number",
        "null"
      ],
      "description": "The tracked token's price × its total supply on this chain (for a bridged token: what was bridged here). On the list only; `null` when the pool tracks neither side, the tracked side is the native coin, or the supply is not on record yet."
    }
  },
  "$defs": {
    "TokenLite": {
      "type": "object",
      "properties": {
        "address": {
          "type": "string",
          "pattern": "^0x[a-fA-F0-9]{40}$",
          "description": "EVM address, hex, case-insensitive."
        },
        "symbol": {
          "type": [
            "string",
            "null"
          ],
          "description": "Symbol from the contract, or null while unresolved."
        },
        "decimals": {
          "type": [
            "integer",
            "null"
          ],
          "description": "ERC-20 decimals."
        },
        "logo": {
          "type": [
            "string",
            "null"
          ],
          "description": "Logo URL, or null."
        },
        "impostor": {
          "type": "boolean",
          "description": "True when the symbol copies the chain's anchor (a token called USDC that is not the USDC predeploy). Flagged, never hidden."
        }
      },
      "description": "A token as it appears inside a pool row."
    }
  }
}