Three new API surfaces, two long-deferred cleanups, and a defensive throttle for endpoint probers.
New endpoints:
GET /api/v1/me → all tiers
GET /api/v1/tokens → PRO+
GET /api/v1/me reads from the same in-memory counters that drive rate-limit enforcement — quota.daily.remaining is authoritative, no header parsing required. Returns tier, subscription block (status, billing_cycle, current_period_end, started_at), quota.daily (limit/used/remaining/resets_at), quota.burst (limit/used/remaining/window_seconds), and per-feature usage across webhooks, copy-trade wallets/rules, coordination rules, first-touch subscriptions, ws/dex connections, and wallet-tracker watchlist. Useful for self-throttling clients and quota-aware retry logic.
GET /api/v1/tokens is a filtered, sortable directory across every active mint we track — complements the single-mint /token/{mint} and the KOL-scoped /kol/tokens/{hot,trending}. Server-side filters: min_mc, max_mc, min_liq (default 2000 USD — set 0 to disable phantom-MC dust floor), active_h, primary_dex (pumpfun/pumpswap/raydium/meteora/orca/raydium_clmm), authority_revoked, exclude_token2022, min_lp_burnt_pct. Computed post-filters (over-fetches 3× and filters in app): min_volume_1h_usd, max_mev_share_pct, mc_change_1h_min_pct, mc_change_1h_max_pct. Sort: mc_desc / mc_asc / last_trade_desc / liquidity_desc / cumulative_volume_desc. Pagination response includes post_filtered: true so clients can detect when computed filters trim a page below limit.
// Momentum scanner: liquid mints up >20% in 1h, low bot share
const { tokens } = await client.token.list({
min_liq: 10000,
min_volume_1h_usd: 5000,
max_mev_share_pct: 60,
mc_change_1h_min_pct: 20,
sort: "mc_desc",
});
Structured 400 on /token/{mint}: invalid mints now ship code: "invalid_mint", reason (specific diagnosis — "too short — got 8 chars, need 32-44", "contains '0' which isn't valid base58", etc.), received, received_length, expected_length, example, and a docs URL. No more trial-and-error.
Velocity / MEV-share fields added to every TokenResponseBody (catching the SDK up to the 2026-05-07 server-side ship): mc_change_pct, volume_usd, mev_volume_pct (each keyed by 5m/15m/1h/2h/4h) plus history_age_seconds on the parent. mev_volume_pct is unique to MadeOnSol — flag wash-pump patterns where headline volume is bot-driven (sandwich/Jito-bundle MEV) rather than organic demand. Note: the 1.7.0 typed shape was wrong (velocity[window] instead of field-keyed) — patched in 1.7.1 / 2.6.1, see entry above.
Per-IP 401 throttle: repeated authentication failures from the same IP now hit a 30-failure/min cap that short-circuits to a 429 with a tiny body — stops endpoint-fishing without DB lookups. Legitimate clients with a typo get 30 retries before the cap fires.
TRADER tier (Telegram) unlocks coordination + copy-trade alerts: the $25/mo Trader tier now includes 1 copy-trade wallet + 1 coordination alert rule, delivered exclusively over Telegram (/alert copytrade <wallet>, /alert coord on). REST/WS/webhook access for those endpoints stays PRO+ — the underlying rules are auto-created on direct DB write when a Trader user opts in via the bot. Default coord thresholds locked at min_kols=5, window=15min, cooldown=30min for Trader; PRO+ keep custom thresholds.
TG bot /start UX: new unlinked users now see one real sample alert appended to the welcome message (no rate-limit hit), the $25/mo price line moved out of the cold open into /upgrade, a "Just /pause anytime to silence" reassurance line was added, and the post-link flow renders a one-tap "🚨 Configure my alerts" keyboard instead of plain text.
Removed: the deprecated avg_entry_mc_usd / entry_mc_samples fields are now fully gone from leaderboard endpoints, SDK types, READMEs, openapi-spec, llms.txt, and MCP tool descriptions. If you were reading them, switch to per-trade market_cap_usd_at_trade (via the v1.6 MC enrichment).
SDK versions published:
madeonsol 2.5.0 → 2.6.0 (bare TypeScript)
madeonsol-x402 1.6.0 → 1.7.0 (npm)
madeonsol-x402 1.6.1 → 1.7.0 (PyPI — pip install madeonsol-x402)
@madeonsol/mcp-server 1.6.0 → 1.7.0
@madeonsol/plugin 1.6.0 → 1.7.0 (Eliza)
@madeonsol/solana-agent-kit-plugin 1.6.0 → 1.7.0
madeonsol (crates.io) 0.7.0 → 0.8.0 (Rust)
All packages add a me() method (or client.rest.me() in Python) and a tokensList() / token.list() / tokens_list() method, plus expose the velocity/MEV-share fields on token responses. The MCP server gains two new tools: madeonsol_me and madeonsol_tokens_list. The Eliza and Solana-Agent-Kit plugins gain matching meAction and tokensListAction.