{
  "openapi": "3.1.0",
  "info": {
    "title": "Linkrra — Kaspa Toccata Live API",
    "version": "1.0.0",
    "description": "A free, no-key, CORS-open public API for the Kaspa KRC-20 / KRC-721 launch wave: ranked markets, A–F fair-launch grades, discovery feeds, the on-chain op stream, and per-token / per-collection / per-wallet reports. Real on-chain Kaspa data (api.kaspa.org · Kasplex · KaspaCom); every field degrades to null when a source is momentarily down — never invented. Not financial advice. See https://kaspa.linkrra.com/docs.",
    "contact": {
      "name": "Linkrra",
      "url": "https://linkrra.com"
    },
    "license": {
      "name": "Free to use, no key required"
    }
  },
  "servers": [
    {
      "url": "https://kaspa.linkrra.com",
      "description": "Kaspa Toccata Live"
    }
  ],
  "externalDocs": {
    "description": "Human-readable API docs",
    "url": "https://kaspa.linkrra.com/docs"
  },
  "tags": [
    {
      "name": "Markets & rankings",
      "description": "Ranked snapshots of the live KRC-20 / KRC-721 market."
    },
    {
      "name": "Fairness / Launch-Quality",
      "description": "The A–F fair-launch grade — anti-rug distribution read, one transparent model everywhere."
    },
    {
      "name": "Discovery & new launches",
      "description": "Find launches by name, freshness, or how close their mint is to selling out."
    },
    {
      "name": "On-chain activity",
      "description": "The raw op stream and per-token / per-wallet ledgers, dec-scaled and USD-valued."
    },
    {
      "name": "Per-entity reports",
      "description": "Deep, structured reads for a single token, collection or wallet."
    },
    {
      "name": "Directory",
      "description": "The machine-readable map of every surface."
    }
  ],
  "paths": {
    "/tokens.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Top KRC-20 tokens by market rank — price, 24h %, market cap, holders, mint progress.",
        "description": "Top KRC-20 tokens by market rank — price, 24h %, market cap, holders, mint progress. Returns { source, url, description, generatedAt, count, tokens[] }.",
        "operationId": "tokens_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, count, tokens[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, count, tokens[] }"
                }
              }
            }
          }
        }
      }
    },
    "/nfts.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Top KRC-721 collections by 24h volume — floor, volume, holders, minted, 24h change.",
        "description": "Top KRC-721 collections by 24h volume — floor, volume, holders, minted, 24h change. Returns { source, url, description, generatedAt, totalCollections, kasPriceUsd, count, collections[] }.",
        "operationId": "nfts_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, totalCollections, kasPriceUsd, count, collections[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, totalCollections, kasPriceUsd, count, collections[] }"
                }
              }
            }
          }
        }
      }
    },
    "/map.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "KRC-20 market map — every real token with true market cap, price, 24h % (nominal-junk > $10B excluded).",
        "description": "KRC-20 market map — every real token with true market cap, price, 24h % (nominal-junk > $10B excluded). Returns { source, url, description, generatedAt, count, mappedMarketCapUsd, tokens[] }.",
        "operationId": "map_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, count, mappedMarketCapUsd, tokens[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, count, mappedMarketCapUsd, tokens[] }"
                }
              }
            }
          }
        }
      }
    },
    "/nftmap.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "KRC-721 NFT market map — every traded collection with lifetime volume, floor, 24h floor %, holders (sized by √volume).",
        "description": "KRC-721 NFT market map — every traded collection with lifetime volume, floor, 24h floor %, holders (sized by √volume). Returns { source, url, description, generatedAt, count, tradedCollections, totalCollections, kasPriceUsd, mappedVolumeKas, collections[] }.",
        "operationId": "nftmap_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, count, tradedCollections, totalCollections, kasPriceUsd, mappedVolumeKas, collections[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, count, tradedCollections, totalCollections, kasPriceUsd, mappedVolumeKas, collections[] }"
                }
              }
            }
          }
        }
      }
    },
    "/movers.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Biggest 24h KRC-20 price movers — top gainers AND losers (≥100-holder floor).",
        "description": "Biggest 24h KRC-20 price movers — top gainers AND losers (≥100-holder floor). Returns { source, url, description, generatedAt, scanned, holderFloor, gainers[], losers[] }.",
        "operationId": "movers_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, scanned, holderFloor, gainers[], losers[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, scanned, holderFloor, gainers[], losers[] }"
                }
              }
            }
          }
        }
      }
    },
    "/nftmovers.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Biggest 24h KRC-721 NFT floor movers — top gainers AND losers (traded-in-24h only, ≥20-owner floor).",
        "description": "Biggest 24h KRC-721 NFT floor movers — top gainers AND losers (traded-in-24h only, ≥20-owner floor). Returns { source, url, description, generatedAt, scanned, totalCollections, holderFloor, kasPriceUsd, gainers[], losers[] }.",
        "operationId": "nftmovers_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, scanned, totalCollections, holderFloor, kasPriceUsd, gainers[], losers[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, scanned, totalCollections, holderFloor, kasPriceUsd, gainers[], losers[] }"
                }
              }
            }
          }
        }
      }
    },
    "/communities.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Biggest KRC-20 communities ranked by on-chain holder count (adoption). Non-credible holder counts (>250k spoof) excluded.",
        "description": "Biggest KRC-20 communities ranked by on-chain holder count (adoption). Non-credible holder counts (>250k spoof) excluded. Returns { source, url, description, generatedAt, scanned, excludedNonCredible, combinedHolders, count, communities[] }.",
        "operationId": "communities_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, scanned, excludedNonCredible, combinedHolders, count, communities[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, scanned, excludedNonCredible, combinedHolders, count, communities[] }"
                }
              }
            }
          }
        }
      }
    },
    "/screener.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Filter the top-100 KRC-20 market on the fair-launch signal — same filters as query params (all optional). One call, zero per-token fetch. Non-credible holder counts (>250k spoof) excluded.",
        "description": "Filter the top-100 KRC-20 market on the fair-launch signal — same filters as query params (all optional). One call, zero per-token fetch. Non-credible holder counts (>250k spoof) excluded. Returns { source, url, description, generatedAt, universe, scanned, excludedNonCredible, filters{…}, matched, count, tokens[] }.",
        "operationId": "screener_json",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Ticker substring, e.g. NACHO.",
            "schema": {
              "type": "string"
            },
            "example": "NACHO"
          },
          {
            "name": "fair",
            "in": "query",
            "required": false,
            "description": "Set to 1 for fair launches only (pre-mint = 0).",
            "schema": {
              "type": "string"
            },
            "example": "1"
          },
          {
            "name": "maxpre",
            "in": "query",
            "required": false,
            "description": "Max pre-mint % of supply (0–99).",
            "schema": {
              "type": "string"
            },
            "example": "10"
          },
          {
            "name": "minh",
            "in": "query",
            "required": false,
            "description": "Minimum on-chain holders.",
            "schema": {
              "type": "string"
            },
            "example": "5000"
          },
          {
            "name": "maxh",
            "in": "query",
            "required": false,
            "description": "Maximum on-chain holders.",
            "schema": {
              "type": "string"
            },
            "example": "50000"
          },
          {
            "name": "mincap",
            "in": "query",
            "required": false,
            "description": "Minimum market cap in USD.",
            "schema": {
              "type": "string"
            },
            "example": "100000"
          },
          {
            "name": "maxcap",
            "in": "query",
            "required": false,
            "description": "Maximum market cap in USD.",
            "schema": {
              "type": "string"
            },
            "example": "500000"
          },
          {
            "name": "chg",
            "in": "query",
            "required": false,
            "description": "24h move filter: up or down.",
            "schema": {
              "type": "string"
            },
            "example": "up"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "rank | holders | mcap | change | premint | price (default rank).",
            "schema": {
              "type": "string"
            },
            "example": "holders"
          },
          {
            "name": "order",
            "in": "query",
            "required": false,
            "description": "asc | desc.",
            "schema": {
              "type": "string"
            },
            "example": "desc"
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, universe, scanned, excludedNonCredible, filters{…}, matched, count, tokens[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, universe, scanned, excludedNonCredible, filters{…}, matched, count, tokens[] }"
                }
              }
            }
          }
        }
      }
    },
    "/nftscreener.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Filter the ENTIRE KRC-721 NFT collection set on the fair-launch signal — the KRC-721 twin of /screener.json. Same filters as query params (all optional). Whole-set scan, zero per-collection fetch. No market cap (KRC-721 has none honest); incoherent collections (owners > minted items) excluded.",
        "description": "Filter the ENTIRE KRC-721 NFT collection set on the fair-launch signal — the KRC-721 twin of /screener.json. Same filters as query params (all optional). Whole-set scan, zero per-collection fetch. No market cap (KRC-721 has none honest); incoherent collections (owners > minted items) excluded. Returns { source, url, description, generatedAt, universe, scanned, excludedIncoherent, kasPriceUsd, filters{…}, matched, count, collections[] }.",
        "operationId": "nftscreener_json",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Ticker substring, e.g. KASPUNKS.",
            "schema": {
              "type": "string"
            },
            "example": "KASPUNKS"
          },
          {
            "name": "fair",
            "in": "query",
            "required": false,
            "description": "Set to 1 for fair launches only (pre-mint = 0).",
            "schema": {
              "type": "string"
            },
            "example": "1"
          },
          {
            "name": "maxpre",
            "in": "query",
            "required": false,
            "description": "Max pre-mint % of supply (0–99).",
            "schema": {
              "type": "string"
            },
            "example": "10"
          },
          {
            "name": "minh",
            "in": "query",
            "required": false,
            "description": "Minimum on-chain holders (owners).",
            "schema": {
              "type": "string"
            },
            "example": "200"
          },
          {
            "name": "maxh",
            "in": "query",
            "required": false,
            "description": "Maximum on-chain holders (owners).",
            "schema": {
              "type": "string"
            },
            "example": "5000"
          },
          {
            "name": "minfloor",
            "in": "query",
            "required": false,
            "description": "Minimum floor price in KAS.",
            "schema": {
              "type": "string"
            },
            "example": "50"
          },
          {
            "name": "maxfloor",
            "in": "query",
            "required": false,
            "description": "Maximum floor price in KAS.",
            "schema": {
              "type": "string"
            },
            "example": "1000"
          },
          {
            "name": "minvol",
            "in": "query",
            "required": false,
            "description": "Minimum 24h volume in KAS.",
            "schema": {
              "type": "string"
            },
            "example": "100"
          },
          {
            "name": "mint",
            "in": "query",
            "required": false,
            "description": "Mint status: open (still minting) or done (fully minted).",
            "schema": {
              "type": "string"
            },
            "example": "open"
          },
          {
            "name": "chg",
            "in": "query",
            "required": false,
            "description": "24h floor move filter: up or down.",
            "schema": {
              "type": "string"
            },
            "example": "up"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "rank | holders | floor | vol | change | minted | premint (default rank).",
            "schema": {
              "type": "string"
            },
            "example": "vol"
          },
          {
            "name": "order",
            "in": "query",
            "required": false,
            "description": "asc | desc.",
            "schema": {
              "type": "string"
            },
            "example": "desc"
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, universe, scanned, excludedIncoherent, kasPriceUsd, filters{…}, matched, count, collections[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, universe, scanned, excludedIncoherent, kasPriceUsd, filters{…}, matched, count, collections[] }"
                }
              }
            }
          }
        }
      }
    },
    "/nftcommunities.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Biggest KRC-721 NFT communities ranked by on-chain owner count (adoption). Incoherent owner counts (owners > minted items) excluded; floor in KAS+USD (no NFT market cap).",
        "description": "Biggest KRC-721 NFT communities ranked by on-chain owner count (adoption). Incoherent owner counts (owners > minted items) excluded; floor in KAS+USD (no NFT market cap). Returns { source, url, description, generatedAt, scanned, totalCollections, excludedIncoherent, combinedOwners, kasPriceUsd, count, collections[] }.",
        "operationId": "nftcommunities_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, scanned, totalCollections, excludedIncoherent, combinedOwners, kasPriceUsd, count, collections[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, scanned, totalCollections, excludedIncoherent, combinedOwners, kasPriceUsd, count, collections[] }"
                }
              }
            }
          }
        }
      }
    },
    "/traded.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Most-traded KRC-20 ranked by cumulative L1 marketplace trades (totalTrades) — the liquidity pillar. Candidate set = top 40 by mcap; each token's trade count fetched from api.kaspa.com/krc20/{TICK}; 24h volume (USD) shown separately.",
        "description": "Most-traded KRC-20 ranked by cumulative L1 marketplace trades (totalTrades) — the liquidity pillar. Candidate set = top 40 by mcap; each token's trade count fetched from api.kaspa.com/krc20/{TICK}; 24h volume (USD) shown separately. Returns { source, url, description, generatedAt, scanned, measured, combinedTrades, count, tokens[] }.",
        "operationId": "traded_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, scanned, measured, combinedTrades, count, tokens[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, scanned, measured, combinedTrades, count, tokens[] }"
                }
              }
            }
          }
        }
      }
    },
    "/fairlaunch.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Fair Launch Hall of Fame — the biggest KRC-20 that launched fair (zero pre-mine, preMintedSupply=0) ranked by market cap, plus how many of the top 100 launched with no pre-mine. ONE api.kaspa.com/krc20 call; nominal-junk mcaps (>$10B) and non-credible holder counts (>250k) excluded. A launch-integrity board, distinct from /concentration.json (today's Gini).",
        "description": "Fair Launch Hall of Fame — the biggest KRC-20 that launched fair (zero pre-mine, preMintedSupply=0) ranked by market cap, plus how many of the top 100 launched with no pre-mine. ONE api.kaspa.com/krc20 call; nominal-junk mcaps (>$10B) and non-credible holder counts (>250k) excluded. A launch-integrity board, distinct from /concentration.json (today's Gini). Returns { source, url, description, generatedAt, scanned, fairLaunchesInTop, excludedNominal, excludedNonCredibleHolders, combinedHolders, count, fairLaunches[] }.",
        "operationId": "fairlaunch_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, scanned, fairLaunchesInTop, excludedNominal, excludedNonCredibleHolders, combinedHolders, count, fairLaunches[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, scanned, fairLaunchesInTop, excludedNominal, excludedNonCredibleHolders, combinedHolders, count, fairLaunches[] }"
                }
              }
            }
          }
        }
      }
    },
    "/nfttraded.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Most-traded KRC-721 NFT collections ranked by cumulative lifetime marketplace volume (totalVolume, native KAS) — the NFT liquidity pillar, the KRC-721 twin of /traded.json. Whole-set api.kaspa.com/krc721 scan (no per-collection fetch); 24h volume & floor shown separately; no NFT market cap.",
        "description": "Most-traded KRC-721 NFT collections ranked by cumulative lifetime marketplace volume (totalVolume, native KAS) — the NFT liquidity pillar, the KRC-721 twin of /traded.json. Whole-set api.kaspa.com/krc721 scan (no per-collection fetch); 24h volume & floor shown separately; no NFT market cap. Returns { source, url, description, generatedAt, scanned, totalCollections, tradedCollections, combinedVolumeKas, combinedVolumeUsd, kasPriceUsd, count, collections[] }.",
        "operationId": "nfttraded_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, scanned, totalCollections, tradedCollections, combinedVolumeKas, combinedVolumeUsd, kasPriceUsd, count, collections[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, scanned, totalCollections, tradedCollections, combinedVolumeKas, combinedVolumeUsd, kasPriceUsd, count, collections[] }"
                }
              }
            }
          }
        }
      }
    },
    "/growth.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "KRC-20 adoption momentum — the tokens gaining AND losing the most holders in 24h (net changeTotalHolders + % growth). Spoofed holder counts (>250k) excluded.",
        "description": "KRC-20 adoption momentum — the tokens gaining AND losing the most holders in 24h (net changeTotalHolders + % growth). Spoofed holder counts (>250k) excluded. Returns { source, url, description, generatedAt, scanned, holderCap, netHoldersAdded24h, gainers[], losers[] }.",
        "operationId": "growth_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, scanned, holderCap, netHoldersAdded24h, gainers[], losers[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, scanned, holderCap, netHoldersAdded24h, gainers[], losers[] }"
                }
              }
            }
          }
        }
      }
    },
    "/nftgrowth.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "KRC-721 NFT adoption momentum — the collections gaining AND losing the most owners in 24h (net changeTotalHolders + % growth), the NFT twin of /growth.json. Incoherent owner counts (owners > minted items) excluded; floor in KAS+USD (no NFT market cap).",
        "description": "KRC-721 NFT adoption momentum — the collections gaining AND losing the most owners in 24h (net changeTotalHolders + % growth), the NFT twin of /growth.json. Incoherent owner counts (owners > minted items) excluded; floor in KAS+USD (no NFT market cap). Returns { source, url, description, generatedAt, scanned, totalCollections, netOwnersAdded24h, kasPriceUsd, gainers[], losers[] }.",
        "operationId": "nftgrowth_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, scanned, totalCollections, netOwnersAdded24h, kasPriceUsd, gainers[], losers[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, scanned, totalCollections, netOwnersAdded24h, kasPriceUsd, gainers[], losers[] }"
                }
              }
            }
          }
        }
      }
    },
    "/whales.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Largest recent KRC-20 moves ranked by live USD value (transfers/sends/listings).",
        "description": "Largest recent KRC-20 moves ranked by live USD value (transfers/sends/listings). Returns { source, url, description, generatedAt, tokensScanned, whaleFloorUsd, count, moves[] }.",
        "operationId": "whales_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, tokensScanned, whaleFloorUsd, count, moves[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, tokensScanned, whaleFloorUsd, count, moves[] }"
                }
              }
            }
          }
        }
      }
    },
    "/now.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "One-glance state-of-the-wave snapshot: token-wave aggregate + L1 chain layer.",
        "description": "One-glance state-of-the-wave snapshot: token-wave aggregate + L1 chain layer. Returns { source, url, description, generatedAt, wave{…}, chain{…} }.",
        "operationId": "now_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, wave{…}, chain{…} }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, wave{…}, chain{…} }"
                }
              }
            }
          }
        }
      }
    },
    "/emission.json": {
      "get": {
        "tags": [
          "Markets & rankings"
        ],
        "summary": "Kaspa L1 emission: live supply & block reward + the deterministic chromatic-phase reduction schedule and annual inflation.",
        "description": "Kaspa L1 emission: live supply & block reward + the deterministic chromatic-phase reduction schedule and annual inflation. Returns { source, circulatingSupplyKas, maxSupplyKas, minedPct, remainingKas, blockReward, blocksPerSecond, emissionPerYearKas, annualInflationPct, monthlyReductionFactor, nextReduction{…}, schedule[] }.",
        "operationId": "emission_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, circulatingSupplyKas, maxSupplyKas, minedPct, remainingKas, blockReward, blocksPerSecond, emissionPerYearKas, annualInflationPct, monthlyReductionFactor, nextReduction{…}, schedule[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, circulatingSupplyKas, maxSupplyKas, minedPct, remainingKas, blockReward, blocksPerSecond, emissionPerYearKas, annualInflationPct, monthlyReductionFactor, nextReduction{…}, schedule[] }"
                }
              }
            }
          }
        }
      }
    },
    "/wave.json": {
      "get": {
        "tags": [
          "Fairness / Launch-Quality"
        ],
        "summary": "KRC-20 fair-launch leaderboard ranked by A–F Launch-Quality grade.",
        "description": "KRC-20 fair-launch leaderboard ranked by A–F Launch-Quality grade. Returns { source, asset, model, generatedAt, count, topPick, avgScore, items[], ungraded[] }.",
        "operationId": "wave_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, asset, model, generatedAt, count, topPick, avgScore, items[], ungraded[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, asset, model, generatedAt, count, topPick, avgScore, items[], ungraded[] }"
                }
              }
            }
          }
        }
      }
    },
    "/nftwave.json": {
      "get": {
        "tags": [
          "Fairness / Launch-Quality"
        ],
        "summary": "KRC-721 fair-launch leaderboard ranked by A–F Launch-Quality grade.",
        "description": "KRC-721 fair-launch leaderboard ranked by A–F Launch-Quality grade. Returns { source, asset, model, generatedAt, kasPriceUsd, count, topPick, avgScore, items[] }.",
        "operationId": "nftwave_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, asset, model, generatedAt, kasPriceUsd, count, topPick, avgScore, items[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, asset, model, generatedAt, kasPriceUsd, count, topPick, avgScore, items[] }"
                }
              }
            }
          }
        }
      }
    },
    "/concentration.json": {
      "get": {
        "tags": [
          "Fairness / Launch-Quality"
        ],
        "summary": "KRC-20 concentration leaderboard — tokens ranked by Gini coefficient (whale-controlled vs fairly distributed). Lower-bound over the full holder base.",
        "description": "KRC-20 concentration leaderboard — tokens ranked by Gini coefficient (whale-controlled vs fairly distributed). Lower-bound over the full holder base. Returns { source, asset, metric, basis, generatedAt, count, mostConcentrated, mostDistributed, medianGini, items[] }.",
        "operationId": "concentration_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, asset, metric, basis, generatedAt, count, mostConcentrated, mostDistributed, medianGini, items[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, asset, metric, basis, generatedAt, count, mostConcentrated, mostDistributed, medianGini, items[] }"
                }
              }
            }
          }
        }
      }
    },
    "/nconcentration.json": {
      "get": {
        "tags": [
          "Fairness / Launch-Quality"
        ],
        "summary": "KRC-721 NFT concentration leaderboard — collections ranked by Gini coefficient (whale-owned vs fairly distributed). EXACT over the complete owner set (not a lower bound).",
        "description": "KRC-721 NFT concentration leaderboard — collections ranked by Gini coefficient (whale-owned vs fairly distributed). EXACT over the complete owner set (not a lower bound). Returns { source, asset, metric, basis, generatedAt, count, mostConcentrated, mostDistributed, medianGini, items[] }.",
        "operationId": "nconcentration_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, asset, metric, basis, generatedAt, count, mostConcentrated, mostDistributed, medianGini, items[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, asset, metric, basis, generatedAt, count, mostConcentrated, mostDistributed, medianGini, items[] }"
                }
              }
            }
          }
        }
      }
    },
    "/fairness.json": {
      "get": {
        "tags": [
          "Fairness / Launch-Quality"
        ],
        "summary": "KRC-20 fairness map (scatter) — every top token as a point on concentration (Gini) vs adoption (holders), sized by market cap and colored by its A–F fair-launch grade. The visual synthesis of the grade, Gini and holder base.",
        "description": "KRC-20 fairness map (scatter) — every top token as a point on concentration (Gini) vs adoption (holders), sized by market cap and colored by its A–F fair-launch grade. The visual synthesis of the grade, Gini and holder base. Returns { source, asset, surface, axes, scope, generatedAt, count, medianGini, healthiest, items[]{ tick, grade, score, pillars, gini, topHolderPct, holders, marketCapUsd, links } }.",
        "operationId": "fairness_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, asset, surface, axes, scope, generatedAt, count, medianGini, healthiest, items[]{ tick, grade, score, pillars, gini, topHolderPct, holders, marketCapUsd, links } }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, asset, surface, axes, scope, generatedAt, count, medianGini, healthiest, items[]{ tick, grade, score, pillars, gini, topHolderPct, holders, marketCapUsd, links } }"
                }
              }
            }
          }
        }
      }
    },
    "/nfairness.json": {
      "get": {
        "tags": [
          "Fairness / Launch-Quality"
        ],
        "summary": "KRC-721 NFT fairness map (scatter) — every top collection as a point on concentration (exact Gini) vs adoption (owners), sized by lifetime volume and colored by its A–F fair-launch grade. The NFT twin of /fairness; Gini is exact over the complete owner set.",
        "description": "KRC-721 NFT fairness map (scatter) — every top collection as a point on concentration (exact Gini) vs adoption (owners), sized by lifetime volume and colored by its A–F fair-launch grade. The NFT twin of /fairness; Gini is exact over the complete owner set. Returns { source, asset, surface, axes, scope, generatedAt, count, medianGini, healthiest, items[]{ tick, grade, score, pillars, gini, topHolderPct, owners, lifetimeVolumeKas, links } }.",
        "operationId": "nfairness_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, asset, surface, axes, scope, generatedAt, count, medianGini, healthiest, items[]{ tick, grade, score, pillars, gini, topHolderPct, owners, lifetimeVolumeKas, links } }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, asset, surface, axes, scope, generatedAt, count, medianGini, healthiest, items[]{ tick, grade, score, pillars, gini, topHolderPct, owners, lifetimeVolumeKas, links } }"
                }
              }
            }
          }
        }
      }
    },
    "/grade/{tick}.json": {
      "get": {
        "tags": [
          "Fairness / Launch-Quality"
        ],
        "summary": "Per-token Launch-Quality grade — letter grade, score, verdict, pillars, distribution.",
        "description": "Per-token Launch-Quality grade — letter grade, score, verdict, pillars, distribution. Returns { source, asset, tick, generatedAt, graded, grade, score, verdict, pillars, distribution, market, links }.",
        "operationId": "grade_tick_json",
        "parameters": [
          {
            "name": "tick",
            "in": "path",
            "required": true,
            "description": "KRC-20 ticker, e.g. NACHO",
            "schema": {
              "type": "string"
            },
            "example": "NACHO"
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { source, asset, tick, generatedAt, graded, grade, score, verdict, pillars, distribution, market, links }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, asset, tick, generatedAt, graded, grade, score, verdict, pillars, distribution, market, links }"
                }
              }
            }
          }
        }
      }
    },
    "/ngrade/{tick}.json": {
      "get": {
        "tags": [
          "Fairness / Launch-Quality"
        ],
        "summary": "Per-collection KRC-721 Launch-Quality grade (the NFT parallel to /grade).",
        "description": "Per-collection KRC-721 Launch-Quality grade (the NFT parallel to /grade). Returns { source, asset, tick, generatedAt, graded, grade, score, verdict, pillars, distribution, links }.",
        "operationId": "ngrade_tick_json",
        "parameters": [
          {
            "name": "tick",
            "in": "path",
            "required": true,
            "description": "KRC-721 collection ticker, e.g. KDC",
            "schema": {
              "type": "string"
            },
            "example": "KDC"
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { source, asset, tick, generatedAt, graded, grade, score, verdict, pillars, distribution, links }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, asset, tick, generatedAt, graded, grade, score, verdict, pillars, distribution, links }"
                }
              }
            }
          }
        }
      }
    },
    "/search.json": {
      "get": {
        "tags": [
          "Discovery & new launches"
        ],
        "summary": "Resolver: exact tick/collection/address → a resolution, else ranked token & collection matches.",
        "description": "Resolver: exact tick/collection/address → a resolution, else ranked token & collection matches. Returns { source, endpoint, query, generatedAt, type, candidate, tokens[], collections[], tryDirect }.",
        "operationId": "search_json",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Search term: a ticker, name, or kaspa: address.",
            "schema": {
              "type": "string"
            },
            "example": "NACHO"
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { source, endpoint, query, generatedAt, type, candidate, tokens[], collections[], tryDirect }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, endpoint, query, generatedAt, type, candidate, tokens[], collections[], tryDirect }"
                }
              }
            }
          }
        }
      }
    },
    "/new.json": {
      "get": {
        "tags": [
          "Discovery & new launches"
        ],
        "summary": "Newest KRC-20 deploys as they land (recently-deployed tokens, newest first).",
        "description": "Newest KRC-20 deploys as they land (recently-deployed tokens, newest first). Returns { source, url, description, generatedAt, count, tokens[] }.",
        "operationId": "new_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, count, tokens[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, count, tokens[] }"
                }
              }
            }
          }
        }
      }
    },
    "/nftnew.json": {
      "get": {
        "tags": [
          "Discovery & new launches"
        ],
        "summary": "Newest KRC-721 collections as they mint (newest first).",
        "description": "Newest KRC-721 collections as they mint (newest first). Returns { source, asset, url, description, generatedAt, count, collections[] }.",
        "operationId": "nftnew_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, asset, url, description, generatedAt, count, collections[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, asset, url, description, generatedAt, count, collections[] }"
                }
              }
            }
          }
        }
      }
    },
    "/closing.json": {
      "get": {
        "tags": [
          "Discovery & new launches"
        ],
        "summary": "Open KRC-20 mints ranked by how close they are to 100% minted (about to sell out).",
        "description": "Open KRC-20 mints ranked by how close they are to 100% minted (about to sell out). Returns { source, url, description, generatedAt, openMintsScanned, count, tokens[] }.",
        "operationId": "closing_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, openMintsScanned, count, tokens[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, openMintsScanned, count, tokens[] }"
                }
              }
            }
          }
        }
      }
    },
    "/builders.json": {
      "get": {
        "tags": [
          "Discovery & new launches"
        ],
        "summary": "The launch wave's deployers ranked by track record (Proven / Serial signals).",
        "description": "The launch wave's deployers ranked by track record (Proven / Serial signals). Returns { source, asset, model, generatedAt, count, provenBuilders, serialDeployers, mostProlific, items[] }.",
        "operationId": "builders_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, asset, model, generatedAt, count, provenBuilders, serialDeployers, mostProlific, items[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, asset, model, generatedAt, count, provenBuilders, serialDeployers, mostProlific, items[] }"
                }
              }
            }
          }
        }
      }
    },
    "/activity.json": {
      "get": {
        "tags": [
          "On-chain activity"
        ],
        "summary": "Live on-chain op firehose across the most-active KRC-20, newest first.",
        "description": "Live on-chain op firehose across the most-active KRC-20, newest first. Returns { source, url, description, generatedAt, tokensScanned, opMix, count, ops[] }.",
        "operationId": "activity_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, tokensScanned, opMix, count, ops[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, tokensScanned, opMix, count, ops[] }"
                }
              }
            }
          }
        }
      }
    },
    "/ops/{tick}.json": {
      "get": {
        "tags": [
          "On-chain activity"
        ],
        "summary": "Per-token on-chain activity ledger — newest accepted ops, dec-scaled + USD-valued.",
        "description": "Per-token on-chain activity ledger — newest accepted ops, dec-scaled + USD-valued. Returns { tick, dec, priced, priceUsd, rankByMarketCap, holderTotal, grade, window, ops[], source, generated }.",
        "operationId": "ops_tick_json",
        "parameters": [
          {
            "name": "tick",
            "in": "path",
            "required": true,
            "description": "KRC-20 ticker, e.g. NACHO",
            "schema": {
              "type": "string"
            },
            "example": "NACHO"
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { tick, dec, priced, priceUsd, rankByMarketCap, holderTotal, grade, window, ops[], source, generated }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ tick, dec, priced, priceUsd, rankByMarketCap, holderTotal, grade, window, ops[], source, generated }"
                }
              }
            }
          }
        }
      }
    },
    "/wa/{addr}.json": {
      "get": {
        "tags": [
          "On-chain activity"
        ],
        "summary": "Per-wallet on-chain activity ledger — this address's recent KRC-20 ops.",
        "description": "Per-wallet on-chain activity ledger — this address's recent KRC-20 ops. Returns { address, generated, … ops[] }.",
        "operationId": "wa_addr_json",
        "parameters": [
          {
            "name": "addr",
            "in": "path",
            "required": true,
            "description": "A kaspa: address (bech32).",
            "schema": {
              "type": "string"
            },
            "example": "kaspa:q..."
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { address, generated, … ops[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ address, generated, … ops[] }"
                }
              }
            }
          }
        }
      }
    },
    "/holders/{tick}.json": {
      "get": {
        "tags": [
          "Per-entity reports"
        ],
        "summary": "Per-token RICH LIST — every top-100 holder with % of circulating, cumulative curve, USD value.",
        "description": "Per-token RICH LIST — every top-100 holder with % of circulating, cumulative curve, USD value. Returns { tick, dec, circulatingSupply, holderTotal, priced, priceUsd, grade, distribution, cumulative, holders[], source, generated }.",
        "operationId": "holders_tick_json",
        "parameters": [
          {
            "name": "tick",
            "in": "path",
            "required": true,
            "description": "KRC-20 ticker, e.g. NACHO",
            "schema": {
              "type": "string"
            },
            "example": "NACHO"
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { tick, dec, circulatingSupply, holderTotal, priced, priceUsd, grade, distribution, cumulative, holders[], source, generated }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ tick, dec, circulatingSupply, holderTotal, priced, priceUsd, grade, distribution, cumulative, holders[], source, generated }"
                }
              }
            }
          }
        }
      }
    },
    "/nholders/{tick}.json": {
      "get": {
        "tags": [
          "Per-entity reports"
        ],
        "summary": "Per-collection NFT RICH LIST — every owner with % of minted items, cumulative curve, floor value.",
        "description": "Per-collection NFT RICH LIST — every owner with % of minted items, cumulative curve, floor value. Returns { tick, itemsMinted, holderTotal, floorKas, kasPriceUsd, grade, distribution, cumulative, holders[], source, generated }.",
        "operationId": "nholders_tick_json",
        "parameters": [
          {
            "name": "tick",
            "in": "path",
            "required": true,
            "description": "KRC-721 collection ticker, e.g. KDC",
            "schema": {
              "type": "string"
            },
            "example": "KDC"
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { tick, itemsMinted, holderTotal, floorKas, kasPriceUsd, grade, distribution, cumulative, holders[], source, generated }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ tick, itemsMinted, holderTotal, floorKas, kasPriceUsd, grade, distribution, cumulative, holders[], source, generated }"
                }
              }
            }
          }
        }
      }
    },
    "/w/{addr}.json": {
      "get": {
        "tags": [
          "Per-entity reports"
        ],
        "summary": "Per-wallet portfolio — native KAS + every KRC-20 holding, USD-valued against live prices.",
        "description": "Per-wallet portfolio — native KAS + every KRC-20 holding, USD-valued against live prices. Returns { source, address, generatedAt, portfolioUsd, kas, krc20[], links, disclaimer }.",
        "operationId": "w_addr_json",
        "parameters": [
          {
            "name": "addr",
            "in": "path",
            "required": true,
            "description": "A kaspa: address (bech32).",
            "schema": {
              "type": "string"
            },
            "example": "kaspa:q..."
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { source, address, generatedAt, portfolioUsd, kas, krc20[], links, disclaimer }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, address, generatedAt, portfolioUsd, kas, krc20[], links, disclaimer }"
                }
              }
            }
          }
        }
      }
    },
    "/overlap/{A}-vs-{B}.json": {
      "get": {
        "tags": [
          "Per-entity reports"
        ],
        "summary": "Cross-token HOLDER OVERLAP — wallets in BOTH tokens' on-chain top-100, with each side's % of circulating + combined USD value + shared-control totals.",
        "description": "Cross-token HOLDER OVERLAP — wallets in BOTH tokens' on-chain top-100, with each side's % of circulating + combined USD value + shared-control totals. Returns { pair, basis, setSize, holderTotal, sharedCount, jaccardPct, overlapCoefficientPct, sharedControlPct, priced, shared[], reports, richLists, source, generated }.",
        "operationId": "overlap_A_vs_B_json",
        "parameters": [
          {
            "name": "A",
            "in": "path",
            "required": true,
            "description": "First KRC-20 ticker.",
            "schema": {
              "type": "string"
            },
            "example": "NACHO"
          },
          {
            "name": "B",
            "in": "path",
            "required": true,
            "description": "Second KRC-20 ticker.",
            "schema": {
              "type": "string"
            },
            "example": "KASPER"
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { pair, basis, setSize, holderTotal, sharedCount, jaccardPct, overlapCoefficientPct, sharedControlPct, priced, shared[], reports, richLists, source, generated }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ pair, basis, setSize, holderTotal, sharedCount, jaccardPct, overlapCoefficientPct, sharedControlPct, priced, shared[], reports, richLists, source, generated }"
                }
              }
            }
          }
        }
      }
    },
    "/noverlap/{A}-vs-{B}.json": {
      "get": {
        "tags": [
          "Per-entity reports"
        ],
        "summary": "Cross-collection NFT OWNER OVERLAP — wallets that own items in BOTH KRC-721 collections, with each side's items + % of minted + est. floor value; measured across EVERY on-chain owner (exact, not a sample).",
        "description": "Cross-collection NFT OWNER OVERLAP — wallets that own items in BOTH KRC-721 collections, with each side's items + % of minted + est. floor value; measured across EVERY on-chain owner (exact, not a sample). Returns { pair, basis, setSize, itemsMinted, floorKas, kasPriceUsd, sharedCount, jaccardPct, overlapCoefficientPct, sharedHoldPct, priced, shared[], reports, richLists, source, generated }.",
        "operationId": "noverlap_A_vs_B_json",
        "parameters": [
          {
            "name": "A",
            "in": "path",
            "required": true,
            "description": "First KRC-721 collection ticker.",
            "schema": {
              "type": "string"
            },
            "example": "NACHO"
          },
          {
            "name": "B",
            "in": "path",
            "required": true,
            "description": "Second KRC-721 collection ticker.",
            "schema": {
              "type": "string"
            },
            "example": "KASPUNKS"
          }
        ],
        "responses": {
          "200": {
            "description": "Top-level shape: { pair, basis, setSize, itemsMinted, floorKas, kasPriceUsd, sharedCount, jaccardPct, overlapCoefficientPct, sharedHoldPct, priced, shared[], reports, richLists, source, generated }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ pair, basis, setSize, itemsMinted, floorKas, kasPriceUsd, sharedCount, jaccardPct, overlapCoefficientPct, sharedHoldPct, priced, shared[], reports, richLists, source, generated }"
                }
              }
            }
          }
        }
      }
    },
    "/explore.json": {
      "get": {
        "tags": [
          "Directory"
        ],
        "summary": "The full surface directory + top tokens & collections right now, as a structured index.",
        "description": "The full surface directory + top tokens & collections right now, as a structured index. Returns { source, url, description, generatedAt, stats, surfaces[], topTokens[], topCollections[] }.",
        "operationId": "explore_json",
        "responses": {
          "200": {
            "description": "Top-level shape: { source, url, description, generatedAt, stats, surfaces[], topTokens[], topCollections[] }",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "description": "{ source, url, description, generatedAt, stats, surfaces[], topTokens[], topCollections[] }"
                }
              }
            }
          }
        }
      }
    }
  }
}