Filtered token directory (PRO+)
Browse tokens by market-cap band, liquidity floor, recent-activity window, primary DEX, authority/safety flags, computed 1h volume, MEV-share ceiling, and MC change. Momentum sorts surface movers (mc_change_5m_desc, mc_change_1h_desc, volume_1h_desc) and a composite trending board. Complements /token/{mint} (single lookup), /tokens/almost-bonded (pre-bond pump.fun), and the KOL-scoped /kol/tokens/{hot,trending}.
Default min_liq is 2000 USD to filter the long tail of phantom-MC tokens from low-liquidity pools. Pass min_liq=0 to opt out.
Default max_mc is 100,000,000,000 USD ($100B) — a sanity ceiling that drops phantom market caps (a genuine ~1e12 token supply trading near $1, or a thin-pool price blow-up). No real tracked memecoin approaches it. Pass a higher explicit max_mc to opt out.
Momentum sorts + filters are DB-native (via the token_prices_trending view): min_volume_1h_usd, max_mev_share_pct, min_liq_mc_ratio, max_liq_mc_ratio, mc_change_1h_min_pct, mc_change_1h_max_pct and the momentum sorts paginate correctly with no over-fetch. The trending sort = recent-volume × positive-momentum composite, recency-bounded to the last 1h, and echoes filters.trending_version: "v1".
Only deployer_tier and launchpad remain post-filters (joined from deployer_tokens, not the view). They are served by a bounded SCAN: candidates are walked in pages until limit matches, the candidates run out, or the scan budget is spent. has_more:false only when the candidates ran out; pagination.scan_truncated:true = the budget ran out first and more matches MAY exist — continue with offset = pagination.next_offset (a RAW candidate offset, not a match count). Offset pages walk a LIVE order (pagination.order_is_live: true): MC and activity move between calls, so rows can shift across pages — treat the screener as a ranking, not a ledger.
LP burn (2026-09-21): lp_burned / lp_burn_status come from LP-custody evidence only (lp_burnt_pct). No Solana writer populates it yet, so lp_burn_status is unknown and lp_burned null for every token, and lp_burned=true|false currently matches nothing. lp_burned is DEPRECATED: true = verified burned/locked, false = verified NOT burned, and a token with unknown LP custody matches neither (false never turns unknown into "unburned"); a request that sends it gets a deprecations entry. The old lp_burned flag was the token-SUPPLY burn — filter that with supply_burn and read it as token_supply_burn_detected.
Request
- Base URL: https://madeonsol.com/api/v1
- URL: https://madeonsol.com/api/v1/tokens
- Auth: HTTP bearer
Query parameters
Minimum market_cap_usd
Maximum market_cap_usd. Default 100000000000 ($100B) — pass a higher value to surface phantom thin-pool caps.
Minimum liquidity_usd. Default 2000 — set 0 to disable.
Only tokens with a trade within the last N hours. Default 168 (7 d) — a screener ranks what is tradeable; 0 = no freshness bound (not applied to sort=trending, which has its own 1 h window)
Filter by primary trading venue (launchlab = on-curve bonk/LetsBonk tokens)
Filter to pump.fun tokens whose deployer carries this reputation tier (post-filter; non-pump tokens have a null tier and are dropped)
Filter by launchpad of origin (post-filter, from deployer_tokens.launchpad). Distinct from primary_dex: bags tokens trade on meteora, so only this tag identifies them.
true = require both mint + freeze authority revoked; false = at least one not revoked
Drop Token-2022 mints (commonly used for transfer-fee scams)
DEPRECATED — use lp_burn_status on each token, or supply_burn for the token-supply burn flag. Filter on VERIFIED LP-burn evidence only: true = lp_burnt_pct ≥ 99; false = lp_burnt_pct measured AND below it. A token with unknown LP custody matches NEITHER value (false never means "unknown"). Sending it adds a deprecations entry to the response. No writer populates LP evidence yet, so this matches no token today — it never matches a token-supply burn (use supply_burn). See filters.lp_burned_source.
Filter on the token-SUPPLY burn flag (the mint's on-chain supply decreased). This is what lp_burned used to filter on; it is not LP evidence.
Computed organic-volume floor in the last 1 hour (DB-native; tokens with insufficient history are dropped)
Computed MEV/bot volume ceiling as a % of total cumulative volume (DB-native)
Minimum liquidity_to_mc_ratio (liquidity ÷ market cap). Default 0.00002 (= MC at most 50,000× pool liquidity) — a plausibility gate against price × nominal-supply blowups off dust pools; pass 0 to opt out. Low values = thin liquidity relative to MC (DB-native)
Maximum liquidity_to_mc_ratio — drops over-collateralised thin-MC tokens (DB-native)
Minimum 1h MC change % (DB-native; use for momentum scans)
Maximum 1h MC change % (DB-native; use for dip scans)
trending = recent-volume × positive-momentum composite, recency-bounded to the last 1h; echoes filters.trending_version: "v1".
Response
OK. Returns tokens[] (with liquidity_to_mc_ratio, deployer_tier, launchpad (pumpfun/launchlab/bags, null when unknown), mev_share_pct, organic_volume_1h_usd, mc_change_5m_pct, mc_change_1h_pct, is_token_2022, authorities_revoked, etc.), pagination (with post_filtered flag), and a filters echo (with min_liq_default_applied; trending_version: "v1" when sort=trending).
Changes
No recorded changes to this operation across all 1 revision of this API.