Skip to content

The record API ​

The creator record is what a coin's creator did before this coin, read from the chains: how many coins they launched, here and on other platforms, how many still trade and how many stopped within a week, how old their wallet is and who first funded it, counted across the wallets linked to them by funding. It also follows this coin: what the creator holds against what they launched with, and every sell. A coin launched on Chain Daddy adds its first buyers, Bundled at open and its Backed vault. Every label comes with its one-line definition. It is the record every Chain Daddy coin page shows, and a scanner, a terminal, a bot, an explorer or an AI agent can read it with no key.

The reads ​

ReadWhat you get
GET /api/v2/public/coins/{chain}/{symbol}/creator-recordA coin's creator record
GET /api/v2/public/coins/{chain}/{symbol}/first-buyersWho bought a coin launched on Chain Daddy in its opening blocks, each labelled
GET /api/v2/public/holder-share/{chain}/{token}/epochs/{epoch}One round of a coin's holder share: every holder's share and proof
GET /api/v2/public/signed/coins/{chain}/{symbol}/creator-recordThe creator record, signed by Chain Daddy
GET /api/v2/public/record/extractions and /record/exitsEvery coin labelled Confirmed extraction or Creator exited, with its rule and evidence
GET /api/v2/public/record/correctionsEvery correction to the record, and every dispute decided

They are at https://api.chaindaddy.io. {chain} is the chain's key in lowercase, as in a coin page's address: eth, base, bnb, arbitrum, polygon, avax, robinhood, solana. They need no key, no sign-in and no registered site; any server or browser calls them, from any origin. Every field is in the API Explorer under Public reads, and these operations are part of the public API contract, kept stable.

The creator record ​

bash
curl https://api.chaindaddy.io/api/v2/public/coins/base/MOON/creator-record
json
{
  "state": "on_record",
  "launchesTotal": 3, "launchesAlive": 2, "launchesUnknown": 0, "launchesDead7d": 1,
  "firstLaunchAt": "2025-11-02T18:40:00Z",
  "walletAgeDays": 412,
  "funderLabel": "Coinbase",
  "offPlatformPending": false,
  "identity": { "x": { "handle": "maker", "since": "2019-04" }, "coinbaseVerified": true },
  "holdings": { "pctSupply": 6.1, "launchPctSupply": 10.0, "asOf": "2026-10-28T17:55:00Z" },
  "events": [ { "kind": "sell", "pctOfHoldings": 39, "at": "2026-10-28T08:00:00Z" } ],
  "openBlock": { "buyers": 7, "bundledPct": 12.0, "bundledWallets": 7, "creatorLinkedPct": 7.1, "linkedWallets": 4, "linkedPending": false },
  "labels": [ { "key": "creator_sold", "definition": "Creator sold: the creator sold or moved 25% or more of their coins in 24 hours." } ],
  "definitions": { "state": "…", "creator_sold": "…" }
}
  • The counts. launchesTotal counts the creator's coins, here and on other platforms. launchesAlive had a trade in the last 7 days; launchesUnknown have no trade on record and no word on whether they left their launch curve; the rest stopped. launchesDead7d stopped within 7 days of launch. Show them as counts, with their words: "3 launches · 2 still trading · 1 stopped within 7 days".
  • state is pending (not read yet), first_launch (no earlier launch found in what was read), on_record, serial (many launches, most stopped within a week) or blocked (refused new launches on Chain Daddy). Branch on it; show the counts.
  • offPlatformPending is true while launches on other platforms are still being read, and the counts can grow until it is false.
  • Labels come with their one-line definitions in labels and definitions. Show each label with its definition.
  • The creator's wallets. walletAgeDays is how long the creator's wallet has been active, and funderLabel names its first funder when that is a known operator, such as an exchange. identity is what the creator proved they control: a verified X account and the month it was made, or Coinbase's verification of the wallet.
  • This coin. holdings is the share of supply the creator's own wallets hold now, against what they held at the first reading; wallets they named for a team or fees are in holdings.team. events lists every sell, moved_out and creator_exited (they hold 10% or less of what they launched with), newest first. Both are there once the coin is watched: it traded in the last 7 days.
  • A coin launched on Chain Daddy adds openBlock (Bundled at open: the share of supply bought in the opening blocks by bundled wallets and by wallets linked to the creator) and backed, the coin's Backed vault. backedForfeited counts the creator's other launches whose vault forfeited. promoters names the wallets the coin pays a share of its creator fees to, each with its own record.
  • A blocked record carries ruleHit, its line in definitions.rule, and supportEmail, where the creator contests it. The rules are on Creator record.
  • Freshness. The record is kept from Chain Daddy's own tables and is never computed on your request, so it runs at most a day behind the chain. It is cached for about a minute.

Any coin, by its address ​

Reading by address is available on staging; not yet in production.

Put the token address where the ticker goes, for a coin nobody registered with Chain Daddy:

bash
curl https://api.chaindaddy.io/api/v2/public/coins/solana/7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU/creator-record
  • The answer adds creator, the creator's wallet, and creatorSource, where the chain names them: the launch program's own record of its creator (launchpad_record), the coin's fee-share config (fee_share), the pool it launched in (launch_pool), the mint's authority (mint_authority), the creation transaction (creation_tx), the call that made a factory create it (factory_call) or the coin's payout recipient (payout_recipient).
  • A coin read for the first time answers pending for seconds to minutes, and a pending answer is cached for seconds, so ask again. A read from a web browser starts a coin's first reading; any other caller gets what is already known, or pending. Because the reads take any origin, a page of yours that calls this one from your users' browsers starts every coin they open.
  • unknown means the chain names no creator Chain Daddy can read.
  • A coin registered with Chain Daddy answers on its ticker, and its address answers 404. The token lists map every registered EVM coin's address to its ticker, and search finds any coin by its address.

First buyers ​

bash
curl https://api.chaindaddy.io/api/v2/public/coins/base/MOON/first-buyers
json
{
  "openBlock": 21894512,
  "linkedPending": false,
  "counts": { "buyers": 23, "bundled": 9, "creator_linked": 4, "fresh_wallet": 6, "known_sniper": 2 },
  "buyers": [
    { "wallet": "0x5c1e…", "block": 21894512, "blocksAfterOpen": 0, "secondsAfterOpen": 0,
      "amount": 18000000, "pctSupply": 1.8, "labels": ["bundled", "creator_linked"] }
  ],
  "definitions": { "bundled": "…", "creator_linked": "…", "fresh_wallet": "…", "known_sniper": "…" }
}
  • Who bought a coin launched on Chain Daddy in its opening blocks (EVM: the launch block and the next 3; Solana: the first 30 slots), in order of purchase. buyers lists the first 100; counts covers every opening buyer.
  • bundled: 3 or more wallets bought in one block, or 2 or more in one block with the same first funder. creator_linked: a wallet the creator controls, or one funded by the creator or by the creator's own funder. fresh_wallet: first funded less than 7 days before its buy. known_sniper: a wallet known as a sniper. definitions has each one's line.
  • fresh_wallet and known_sniper are read for the 25 largest buyers. While linkedPending is true the wallet lookup has not answered, and no buyer carries creator_linked, fresh_wallet or known_sniper yet.
  • A coin whose opening was not measured answers 404.

Holder share ​

A coin launched on Chain Daddy can send part of its trading fees to its holders. Once a day the share is split among them and published on-chain, and each round is an epoch: every holder's share, the holding it was split from, and the proof they claim with.

bash
curl https://api.chaindaddy.io/api/v2/public/holder-share/base/0x3722264ab15a1dfce5a5af89e6547f7949a8aba3/epochs/12
json
{
  "cid": "bafkrei…",
  "document": {
    "format": "chaindaddy-holder-share-epoch/1",
    "chainId": "eip155:8453", "token": "0x3722…", "epoch": 12,
    "root": "0x9c4f…", "amount": "41250000000000000000", "holderCount": 214,
    "publishTx": "0x77ab…", "publishedAt": "2026-10-28T00:05:00Z",
    "rule": { "weighting": "time", "minUsd": 20, "…": "…" },
    "leaves": [ { "account": "0x5c1e…", "amount": "1250000000000000000", "balance": "…", "proof": ["0x…"] } ]
  }
}
  • rule.weighting is balance (the day's holdings) or time (amount × days held, up to 90, when the creator chose time held at launch). Moving or selling coins restarts their days, so a time epoch shows who held and for how long.
  • The same document is on IPFS at cid. Rebuild the tree from leaves and compare root with the contract's epochInfo(token, epoch).
  • An epoch never changes once published. How the destination works: Holders.

The signed record ​

Available on staging; in production at the next window.

The creator record as a signed answer: paste it anywhere, and anyone checks it against Chain Daddy's keys without asking Chain Daddy. A post, a bot's reply or a report can carry what the record said, provably.

bash
curl https://api.chaindaddy.io/api/v2/public/signed/coins/base/MOON/creator-record
json
{
  "jws": "eyJhbGciOiJFZERTQSIs…",
  "claims": {
    "iss": "https://chaindaddy.io", "typ": "cd-answer+v1", "iat": 1793236800, "exp": 1793237700,
    "kind": "creator_record", "chainId": "eip155:8453", "chain": "base", "symbol": "MOON", "status": "registered",
    "tokenAddress": "0x3722…", "pageUrl": "https://chaindaddy.io/moon/base",
    "record": {
      "state": "on_record", "launchesTotal": 3, "launchesAlive": 2, "launchesDead7d": 1,
      "offPlatformPending": false, "labels": ["creator_sold"],
      "computedAt": "2026-10-28T17:40:00Z",
      "definitionsVersion": "c384183e09adbf60",
      "recordHash": "e39a762961c5a606f42effb57f5ead5df19dc625ffea2da11d983c619092cf41"
    }
  },
  "creatorRecord": { "state": "on_record", "launchesTotal": 3, "…": "…" }
}
  • jws is a compact JWS signed with Ed25519 by the key its header's kid names. The keys are at https://api.chaindaddy.io/api/v2/iap/jwks, and named on chaindaddy.eth in the text record io.chaindaddy.signing-keys. claims repeats what it says; act on what you read out of jws after verifying it.
  • creatorRecord is the whole record, exactly as the creator record read answered it when this was signed. claims.record.recordHash is the SHA-256 of it in canonical JSON (RFC 8785: keys sorted, no whitespace), so a copy that hashes to it is the signed record, every line of it.
  • definitionsVersion names the wording of the definitions in use, and changes when any of them is reworded.
  • A "no" is signed too: a ticker with no verified page on that chain answers 200 with record.statenot_on_record.
  • An answer is valid for 15 minutes: exp is iat plus 900 seconds.
  • verifyRecord in @chaindaddy/js/verify checks the signature and the hash. By hand: Signed answers.

Lists, corrections and disputes ​

Available on staging; in production at the next window.

The record is public, and so is every correction to it. Anyone who holds a wallet can dispute what it says, a person at Chain Daddy reviews every dispute, and every decision goes in a correction log that is never edited. That is how the record stays accurate in public: whatever you cite from it, anyone can see whether it was ever corrected, and why.

Confirmed extractions and creator exits ​

Every coin labelled Confirmed extraction or Creator exited, newest first, with the rule it was filed under and its evidence, as JSON, CSV and RSS. They list what Chain Daddy has found.

bash
curl https://api.chaindaddy.io/api/v2/public/record/extractions
json
{
  "flag": "confirmed_extraction",
  "items": [
    {
      "chain": "solana", "chainId": "solana:mainnet",
      "tokenAddress": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU", "symbol": "EXAMPLE",
      "flag": "confirmed_extraction", "flaggedAt": "2026-10-28T20:00:00Z", "setBy": "import",
      "reason": "the coin's deployer 9WzD… removed 94.0% of the liquidity (12.3 SOL) from pool 58oQ… of coin 7xKX…, 11 min after the pool opened; tx 5VER…",
      "rule": "Confirmed extraction: the wallet that opened the pool removed 90% or more of its liquidity within 24 hours of opening, taking out more than it put in.",
      "evidence": { "pool": "58oQ…", "poolOpenedAt": "2026-10-27T18:02:11Z", "removalTx": "5VER…",
        "removedAt": "2026-10-27T18:13:40Z", "removedPct": 94, "removedAmount": "12.3 SOL",
        "deployer": "9WzD…", "remover": "9WzD…", "source": "helius" }
    }
  ],
  "next": "https://api.chaindaddy.io/api/v2/public/record/extractions/page/MTc5MTc2…",
  "corrections": "https://api.chaindaddy.io/api/v2/public/record/corrections",
  "contest": "https://docs.chaindaddy.io/token/creator-record#contest"
}
ReadGives
/api/v2/public/record/extractionsThe newest 100, JSON
/api/v2/public/record/extractions.csvThe newest 1,000, CSV
/api/v2/public/record/extractions/feed.xmlThe newest 50, RSS 2.0
/api/v2/public/record/exits, /record/exits.csv, /record/exits/feed.xmlThe same for creator exits
  • rule is the rule the row was filed under and reason the evidence written when it was filed. Show them together.
  • setBy says what filed the row: import (read from the pool's own transactions), watcher (the creator's exit followed by the price falling, on Chain Daddy's own trades) or admin (a person, from the chain's record). It never names a person.
  • evidence is the pool, when it opened, the removal transaction, the share and amount taken, and who deployed and who removed. A creator exit has none.
  • next is the next page's URL, and in CSV the Link header (rel="next"). Follow them: a page is a path, not a query string. Cached for about five minutes.

The correction log ​

bash
curl https://api.chaindaddy.io/api/v2/public/record/corrections
json
{
  "items": [
    { "id": 12, "at": "2026-10-29T17:40:00Z", "kind": "flag_cleared", "chain": "solana",
      "subjectKind": "coin", "subject": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU",
      "flag": "confirmed_extraction",
      "note": "The removal moved the liquidity to pool 3ucN…, which kept it for 30 days.", "actor": "admin" }
  ],
  "next": "https://api.chaindaddy.io/api/v2/public/record/corrections/page/12"
}

kind is override_allow (a refused wallet may launch again; its record keeps its facts), override_block, flag_cleared (a label came off a coin; flag says which), dispute_accepted or dispute_rejected. note is the reviewer's own words. Rows are only ever added. To keep a copy current, read the newest page and stop at the first id you already hold.

Disputes ​

A wallet signs a dispute of the record about it, or of a label on a coin, and posts it to POST /api/v2/record/disputes: no key and no account. A dispute changes nothing by itself; the decision goes in the correction log. Each signing wallet and each IP address can send 3 a day. The text to sign and every field: Disputing the record. To send your users there: If the record is wrong.

In an AI agent (MCP) ​

The remote MCP server at https://api.chaindaddy.io/mcp carries the record for any AI app, with no key:

ToolWhat it gives
get_creator_recordThe creator record. chain and symbol: the ticker, or the token address of a coin nobody registered
resolve_token_pageA coin's page: its registration, market data and trust row, with the coin's Terms in trust.terms
search_tokensSearch, and the creatorRecord filter: first_launch, on_record, no_serial (hides creators whose launches mostly stopped) or identified. Each result carries the record's counts in creatorRecord and the coin's labels in flags, such as Flagged with its category
json
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call",
  "params": { "name": "get_creator_record", "arguments": { "chain": "base", "symbol": "MOON" } } }

The answer is the record above, so an agent can say "3 launches, 2 still trading, 1 stopped within 7 days; the creator has sold 39% of their holding", with each label's definition. The server takes 300 requests a minute per IP address, and 300 a minute per account when signed in. Connecting it: Build with AI. Every tool: MCP Tools.

Limits ​

Without a key, per IP address (an IPv6 address counts as its /64):

LimitPast it
Everything one address sends to api.chaindaddy.io, answers from the edge cache included1,000 requests in 5 minutes403 with an HTML body and no Retry-After: slow down for a few minutes
What reaches the API, past the edge cache400 requests in any one minute429 with Retry-After: 60

Cache each answer for as long as its Cache-Control says, and one server address serves many users within these limits. The answers carry no X-RateLimit-* headers, because one cached answer goes to every caller.

At volume, send an API key from a Developer plan account in the X-API-Key header. The two limits above then stop applying to your requests, and the key's plan meters them:

PlanRequests a secondRequests a day
Developer1550,000
Partner50250,000
Enterpriseby agreementby agreement
  • A key's limits replace the keyless ones; they do not add to them. A Free plan's key is held to 5 a second and 100 a day, so send a key only from a plan whose limits you want. Every plan: Rate limiting.
  • A keyed request the edge already holds is answered from the edge and not counted. One it does not hold is answered by the API, counts against the key, and is sent Cache-Control: private, no-store, so it is never cached for anyone else.
  • Past the per-second limit the answer is 429 with Retry-After: 1; past the day's, 429 with quota_exceeded until midnight UTC.
  • Per address, the edge takes up to 30,000 keyed requests in 5 minutes, the most any plan uses.
  • Keep the key on your server. A browser reads these with no key.

The Developer plan is in beta, and free while it is: join the Developer Beta on any paid plan, then switch the Developer plan on in the developer portal, under Account.

Attribution ​

The reads are yours to use and to show anywhere: in your product, your bot's replies, your reports and your agent's answers. The one condition is attribution. Show Creator record by Chain Daddy with the record, linked to the coin's page on Chain Daddy, or to https://chaindaddy.io when you do not have the page's address.

html
<p>3 launches · 2 still trading · 1 stopped within 7 days</p>
<a href="https://chaindaddy.io/moon/base">Creator record by Chain Daddy</a>

Coverage ​

The record counts what the chains show Chain Daddy. Launches on other platforms are read on Ethereum, Base, BNB Chain, Arbitrum, Avalanche, Robinhood Chain and Solana; some older tokens carry no deployer on record, so first_launch means no earlier launch was found in what was read. Wallets are linked by funding, and an exchange, a bridge, another named service or a wallet that funded more than 50 others links nobody. Confirmed extractions are read from the pools' own transactions: Raydium, PumpSwap and Meteora pools on Solana over the past year, and Uniswap pools on Base and PancakeSwap pools on BNB Chain over the past 90 days. A coin's holdings and sells are watched while it trades, and its first buyers are measured when it launches on Chain Daddy. By address, a coin outside Chain Daddy's token index answers unknown.