Free public API for launchpad and trading-bot analytics.
powered by
https://tehcscreener.com/api/v1YYYY-MM-DD strings; amounts are USD. Data updates
once a day. Every response carries a top-level
"source": "tehcscreener.com" (on /status,
source is the sync source).window accepts 1d,
7d, 30d or all, counted back from the
latest day in the data (the response's through), not from the
current date. Other values return 400.days array.{"detail": "..."}.Retry-After and X-RateLimit-* headers.Every listed launchpad with its totals over the window, highest volume first.
| param | default | accepted |
|---|---|---|
| window | 7d | 1d | 7d | 30d | all |
| field | type | description |
|---|---|---|
| window | string | the window used |
| through | date | latest day in the launchpad data |
| pads | array | one object per (chain, pad) |
| pads[].chain | string | chain the pad runs on |
| pads[].pad | string | pad id, as used in /launchpads/{chain}/{pad} |
| pads[].logo_path | string | null | site-relative logo path |
| pads[].tokens_launched | int | tokens launched in the window |
| pads[].volume_usd | number | trading volume in the window |
| pads[].trade_txns | int | trade transactions in the window |
| pads[].tokens_traded | int | sum of the per-day count of tokens traded |
curl "https://tehcscreener.com/api/v1/launchpads?window=30d"
Daily volume and launches per listed launchpad: one series per (chain, pad), highest total volume first.
| param | default | accepted |
|---|---|---|
| window | 30d | 1d | 7d | 30d | all |
| field | type | description |
|---|---|---|
| window | string | the window used |
| through | date | latest day in the launchpad data |
| days | date[] | every day with data in the window, ascending |
| series | array | one object per (chain, pad) |
| series[].chain | string | chain |
| series[].pad | string | pad id |
| series[].color | string | null | the pad's chart color on the site |
| series[].logo_path | string | null | site-relative logo path |
| series[].volume_usd | number[] | volume per day, aligned to days (0 when none) |
| series[].tokens_launched | int[] | launches per day, aligned to days |
curl "https://tehcscreener.com/api/v1/launchpads/series?window=7d"
One launchpad: profile, daily totals and its top 50 tokens
by volume. chain and pad are the values from
/launchpads. Unknown or unlisted pads return 404.
| param | default | accepted |
|---|---|---|
| window | 30d | 1d | 7d | 30d | all |
| tokens | traded | traded (any token traded on the pad) | launched (only tokens launched on it within the window) |
| field | type | description |
|---|---|---|
| chain, pad, window | string | echo of the request |
| tokens_mode | string | the tokens param used |
| profile | object | null | name, description, website_url, x_url, logo_path, banner_path, color, pad_token (the pad's own token, if any); null when no profile is set |
| daily | array | {day, tokens_launched, volume_usd, trade_txns} per day, ascending |
| top_tokens | array | up to 50, highest volume first: {token, volume_usd, trade_txns, first_day}; token is the token address, first_day its first day with activity in the window |
curl "https://tehcscreener.com/api/v1/launchpads/solana/pumpfun?window=7d&tokens=launched"
One launchpad's daily fee revenue in USD, full history.
chain and project are the chain and
pad values from /launchpads. Coverage: currently
pump.fun only, more projects as they're added. Projects without revenue
coverage return 404 with {"detail": "no revenue data"}.
none
| field | type | description |
|---|---|---|
| chain, project | string | echo of the request |
| daily | array | one object per day with revenue data, full history, ascending |
| daily[].day | date | the day |
| daily[].protocol_revenue_usd | number | fees kept by the protocol |
| daily[].creator_revenue_usd | number | null | creator/cashback fees; null on historical rows predating per-trade measurement (Oct 2026) |
| daily[].source | string | data lineage: dune_seed | allium_events |
curl "https://tehcscreener.com/api/v1/launchpads/solana/pumpfun/revenue"
Daily volume, transactions and fees for trading bots (terminals), one series per bot or per chain, highest total volume first.
| param | default | accepted |
|---|---|---|
| window | 30d | 1d | 7d | 30d | all |
| chain | all | all, or one chain from the response's chains list |
| group | bot | bot (a series per bot) | chain (a series per chain) |
| field | type | description |
|---|---|---|
| window, chain, group | string | echo of the request |
| chains | string[] | every chain with bot data |
| through | date | latest day in the bot data |
| days | date[] | every day with data in the window, ascending |
| series | array | one object per bot (or chain) |
| series[].name | string | bot id (or chain), as used in /bots/{bot} |
| series[].display_name | string | display name; falls back to name |
| series[].color | string | null | chart color on the site |
| series[].logo_path | string | null | site-relative logo path |
| series[].volume_usd | number[] | volume per day, aligned to days; rounded to cents |
| series[].txns | int[] | transactions per day |
| series[].fees_usd | number[] | fees per day; rounded to cents |
curl "https://tehcscreener.com/api/v1/bots?window=7d&group=bot"
One trading bot: profile, lifetime totals, per-chain daily
series and its top 50 tokens. bot is a name from
/bots (case-insensitive). Unknown bots return 404.
| param | default | accepted |
|---|---|---|
| window | all | 1d | 7d | 30d | all |
| field | type | description |
|---|---|---|
| bot | string | bot id, lowercased |
| display_name | string | display name; falls back to bot |
| color, logo_path, website_url, x_url, description | string | null | profile fields |
| window | string | the window used |
| through | date | latest day in the bot data |
| first_day | date | the bot's first day with data |
| totals | object | {volume_usd, fees_usd, txns}, lifetime (ignores window) |
| days | date[] | days with data in the window, ascending |
| wallets_dedup | (int | null)[] | per day, aligned to days: deduplicated wallet count where the source provides one, else null |
| series | array | one object per chain, highest volume first |
| series[].name | string | chain |
| series[].display_name, series[].color | string | chain display name (falls back to name) and color |
| series[].volume_usd / txns / fees_usd / wallets | number[] | per day, aligned to days |
| tokens_since | date | null | first day of per-token data for this bot |
| top_tokens | array | up to 50, highest volume first: {chain, token, volume_usd, txns, peak_wallets, first_day, last_day}; peak_wallets is the highest single-day wallet count; tokens only: quote-to-quote swaps (no attributable token) are left out of the ranking but stay in every total |
curl "https://tehcscreener.com/api/v1/bots/axiom?window=30d"
Every chain with chain-wide stats, with its latest day,
highest latest dex volume first. This is the list of chains
/chains/{chain} covers.
none
| field | type | description |
|---|---|---|
| chains | array | one object per covered chain |
| chains[].chain | string | chain id, as used in /chains/{chain} |
| chains[].display_name | string | display name; falls back to chain |
| chains[].color, chains[].logo_path | string | null | profile fields |
| chains[].secondary_color | string | null | second profile colour (used for line charts on the site); null when unset |
| chains[].through | date | latest day for this chain |
| chains[].latest | object | that day's {txns, active_wallets, dex_volume_usd, dex_trades} |
curl https://tehcscreener.com/api/v1/chains
Chain-wide daily stats. Covered chains are the ones
/chains lists; any other chain returns 404.
| param | default | accepted |
|---|---|---|
| window | all | 1d | 7d | 30d | all (counted back from this chain's latest day) |
| field | type | description |
|---|---|---|
| chain | string | chain id, lowercased |
| display_name | string | display name; falls back to chain |
| color, logo_path | string | null | profile fields |
| secondary_color | string | null | second profile colour (used for line charts on the site); null when unset |
| website_url, x_url | string | null | the chain's website and X links; null when unset |
| token_address | string | null | the chain's own token contract address; null when unset |
| window | string | the window used |
| through | date | latest day for this chain |
| days | date[] | days in the window, ascending |
| txns | int[] | transactions per day |
| active_wallets | int[] | active wallets per day |
| dex_volume_usd | number[] | DEX volume per day |
| dex_trades | int[] | DEX trades per day |
curl "https://tehcscreener.com/api/v1/chains/robinhood?window=30d"
Composite 0–100 activity score for launchpads and trading bots, percentile-ranked against a trailing 90-day window and blended by weight. Only days with both launchpad and bot data count; a day is scored once 30 such days of history exist.
none
| field | type | description |
|---|---|---|
| today | object | null | latest scored day; null when there is not enough history yet |
| today.day | date | the scored day |
| today.score | int | 0–100 |
| today.band | string | ded | cold | active | hot | euphoric |
| today.components | object | keyed pad_volume, tokens_launched, bot_volume, bot_fees; each {value, percentile}: the day's raw total and its 0–100 blended percentile (see method.blend) |
| history | array | {day, score} for every scored day, oldest first |
| tracked | object | {launchpads, terminals}: how many listed launchpads (with any data) and trading bots are covered |
| method.window_days | int | short trailing window length (90) |
| method.window_days_long | int | long trailing window length (365) |
| method.blend | object | {short, long}: how the two windows' percentiles combine (sums to 1) |
| method.cooldown | float | score drops decay by this factor per day; rises apply same-day |
| method.weights | object | component → weight (sums to 1) |
| method.bands | object | band → score range; omitted when today is null |
curl https://tehcscreener.com/api/v1/trench
The most recent data sync.
none
| field | type | description |
|---|---|---|
| synced_at | string | when the last sync landed (timestamp) |
| source | string | where the sync came from |
| rows_grain | int | per-token rows loaded by that sync |
| rows_pad | int | per-pad rows loaded by that sync |
| note | string | null | free-text note; before any sync the body is just {"note": "no syncs yet"} |
curl https://tehcscreener.com/api/v1/status
The API is free to use. If you publish statistics or charts, credit tehcscreener.com as the source.
DVgCkNymLjmi1mpg8atNRrqbQjtkJf5nAmimuk3pVUPQ
Bugs and requests: @adam_tehc on X.