Timechain API
For terminals, screeners, bots and indexers. List every Timechain coin: a pump.fun coin priced in Bitcoin that is also a Bitcoin Rune, with its locked fee split, its market and its Rune.
Getting started
- 1Request a keyTell us who you are and how you will use it. Keys are free.
- 2Send it from your serverA bearer token on every request.
- 3Page through coinsNewest first, up to 100 at a time.
- 4Follow the streamNew launches and trades as server-sent events.
Get access
We review every request and send the key to the contact you give.
Using your key
From your server, never from a web page.
Send the key on every request. The API does not answer browsers on other sites, so a key never has to sit in a web page.
curl -H "Authorization: Bearer YOUR_KEY" "/api/v1/coins?limit=50"
- Rate limit
- Each key has a limit per minute. Over it you get
429withRetry-After. - Errors
- A missing or revoked key gets
401. An unknown coin gets404. - A leaked key
- Tell us and we revoke it and send a new one.
Endpoints
JSON over HTTPS, plus one event stream.
Timechain coins, newest first. Query: limit (1 to 100), before (the nextCursor of the previous page).
One coin, or 404 when it is not a Timechain coin.
Server-sent events: launch (a new coin, same shape as below) and trade. A few open streams per key.
The board, coin page, chart, trades and holders are also readable without a key: see the open endpoints in the docs.
A coin
What one entry in /api/v1/coins looks like.
{
"mint": "…", "name": "…", "symbol": "…", "imageUrl": "…",
"launchedAt": "2026-10-19T12:00:00Z", "creator": "…",
"quoteMint": "…", // WBTC: the coin's price is in Bitcoin
"launchKind": "holders", // creator fees go to the coin's holders
"feeSplit": { "locked": true, "sharingConfig": "…",
"shareholders": [{ "address": "…", "shareBps": 8000 }, { "address": "…", "shareBps": 2000 }] },
"market": { "priceQuote": 0, "marketCapUsd": 0, "volume24hUsd": 0, "liquidityUsd": 0, "holders": 0,
"bondingProgressBps": 0, "graduated": false, "priceChange1h": 0, "priceChange6h": 0, "priceChange24h": 0,
"lastTradeAt": "…" },
"page": "/explore#t/…"
}
- feeSplit
- The coin's creator fee split as pump.fun's fee sharing locked it at launch.
shareBpsis in basis points: the holders' share and the platform's share, which buys and burns $TIMECHAIN. - market
priceQuoteis in the quote coin (WBTC); the rest is in US dollars.bondingProgressBpsis how full pump.fun's curve is, in basis points.- Other keys
- Responses can carry keys from earlier versions. Ignore any key you do not use.
The Rune
Every coin's Bitcoin side, as coin.rune.
Each coin is etched on Bitcoin as a Rune right after launch. The coin page payload (/api/coin-page/{mint}) carries it as coin.rune. It is null or absent until the etching is recorded: show that as "being etched on Bitcoin".
"rune": {
"status": "final", // queued | etching | etched | final (enough confirmations)
"runeId": "972111:121", // block:transaction of the etching
"runeName": "AAAAAAAAAAAAAAABDOZNDJIIIHD",
"spacedName": "AAAAAAAAAAAAAAA•BDOZNDJIIIHD",
"symbol": "¤",
"etchTxid": "…", // mempool.space/tx/{etchTxid}
"inscriptionId": "…i0", // ordinals.com/inscription/{inscriptionId}
"custody": "bc1p…", // the coin's custody address, held by the canister
"etchedAt": "2026-10-19T12:00:00Z",
"onBitcoinRaw": "0", // raw units bridged out to Bitcoin wallets
"supplyRaw": "1000000000000000",
"bridge": { "toBitcoin": false, "toSolana": false }
}
- runeName
- Assigned by Bitcoin, like a contract address. Display the coin's own name and ticker; use the Rune name to look it up.
- Links
- The Rune on
ordinals.com/rune/{spacedName}, its parent inscription on ordinals.com, transactions on mempool.space. - bridge
- Which directions are open for this coin. The Bitcoin side opens in stages: etching first, then the bridge to Bitcoin, then back to Solana.
- Amounts
- Raw units as strings, 6 decimals, the same on both chains.
How the Rune, custody and the bridge work: The Rune, Custody, The bridge.