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
| Read | What you get |
|---|---|
GET /api/v2/public/coins/{chain}/{symbol}/creator-record | A coin's creator record |
GET /api/v2/public/coins/{chain}/{symbol}/first-buyers | Who 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-record | The creator record, signed by Chain Daddy |
GET /api/v2/public/record/extractions and /record/exits | Every coin labelled Confirmed extraction or Creator exited, with its rule and evidence |
GET /api/v2/public/record/corrections | Every 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
curl https://api.chaindaddy.io/api/v2/public/coins/base/MOON/creator-record{
"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.
launchesTotalcounts the creator's coins, here and on other platforms.launchesAlivehad a trade in the last 7 days;launchesUnknownhave no trade on record and no word on whether they left their launch curve; the rest stopped.launchesDead7dstopped within 7 days of launch. Show them as counts, with their words: "3 launches · 2 still trading · 1 stopped within 7 days". stateispending(not read yet),first_launch(no earlier launch found in what was read),on_record,serial(many launches, most stopped within a week) orblocked(refused new launches on Chain Daddy). Branch on it; show the counts.offPlatformPendingistruewhile launches on other platforms are still being read, and the counts can grow until it isfalse.- Labels come with their one-line definitions in
labelsanddefinitions. Show each label with its definition. - The creator's wallets.
walletAgeDaysis how long the creator's wallet has been active, andfunderLabelnames its first funder when that is a known operator, such as an exchange.identityis 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.
holdingsis 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 inholdings.team.eventslists everysell,moved_outandcreator_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) andbacked, the coin's Backed vault.backedForfeitedcounts the creator's other launches whose vault forfeited.promotersnames the wallets the coin pays a share of its creator fees to, each with its own record. - A
blockedrecord carriesruleHit, its line indefinitions.rule, andsupportEmail, 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:
curl https://api.chaindaddy.io/api/v2/public/coins/solana/7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU/creator-record- The answer adds
creator, the creator's wallet, andcreatorSource, 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
pendingfor seconds to minutes, and apendinganswer 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, orpending. Because the reads take any origin, a page of yours that calls this one from your users' browsers starts every coin they open. unknownmeans 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
curl https://api.chaindaddy.io/api/v2/public/coins/base/MOON/first-buyers{
"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.
buyerslists the first 100;countscovers 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.definitionshas each one's line.fresh_walletandknown_sniperare read for the 25 largest buyers. WhilelinkedPendingistruethe wallet lookup has not answered, and no buyer carriescreator_linked,fresh_walletorknown_sniperyet.- 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.
curl https://api.chaindaddy.io/api/v2/public/holder-share/base/0x3722264ab15a1dfce5a5af89e6547f7949a8aba3/epochs/12{
"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.weightingisbalance(the day's holdings) ortime(amount × days held, up to 90, when the creator chose time held at launch). Moving or selling coins restarts their days, so atimeepoch shows who held and for how long.- The same document is on IPFS at
cid. Rebuild the tree fromleavesand comparerootwith the contract'sepochInfo(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.
curl https://api.chaindaddy.io/api/v2/public/signed/coins/base/MOON/creator-record{
"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, "…": "…" }
}jwsis a compact JWS signed with Ed25519 by the key its header'skidnames. The keys are athttps://api.chaindaddy.io/api/v2/iap/jwks, and named onchaindaddy.ethin the text recordio.chaindaddy.signing-keys.claimsrepeats what it says; act on what you read out ofjwsafter verifying it.creatorRecordis the whole record, exactly as the creator record read answered it when this was signed.claims.record.recordHashis 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.definitionsVersionnames 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
200withrecord.statenot_on_record. - An answer is valid for 15 minutes:
expisiatplus 900 seconds. verifyRecordin@chaindaddy/js/verifychecks 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.
curl https://api.chaindaddy.io/api/v2/public/record/extractions{
"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"
}| Read | Gives |
|---|---|
/api/v2/public/record/extractions | The newest 100, JSON |
/api/v2/public/record/extractions.csv | The newest 1,000, CSV |
/api/v2/public/record/extractions/feed.xml | The newest 50, RSS 2.0 |
/api/v2/public/record/exits, /record/exits.csv, /record/exits/feed.xml | The same for creator exits |
ruleis the rule the row was filed under andreasonthe evidence written when it was filed. Show them together.setBysays 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) oradmin(a person, from the chain's record). It never names a person.evidenceis the pool, when it opened, the removal transaction, the share and amount taken, and who deployed and who removed. A creator exit has none.nextis the next page's URL, and in CSV theLinkheader (rel="next"). Follow them: a page is a path, not a query string. Cached for about five minutes.
The correction log
curl https://api.chaindaddy.io/api/v2/public/record/corrections{
"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:
| Tool | What it gives |
|---|---|
get_creator_record | The creator record. chain and symbol: the ticker, or the token address of a coin nobody registered |
resolve_token_page | A coin's page: its registration, market data and trust row, with the coin's Terms in trust.terms |
search_tokens | Search, 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 |
{ "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):
| Limit | Past it | |
|---|---|---|
Everything one address sends to api.chaindaddy.io, answers from the edge cache included | 1,000 requests in 5 minutes | 403 with an HTML body and no Retry-After: slow down for a few minutes |
| What reaches the API, past the edge cache | 400 requests in any one minute | 429 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:
| Plan | Requests a second | Requests a day |
|---|---|---|
| Developer | 15 | 50,000 |
| Partner | 50 | 250,000 |
| Enterprise | by agreement | by 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
429withRetry-After: 1; past the day's,429withquota_exceededuntil 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.
<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.