API Reference

All endpoints are read-only and unauthenticated. The server proxies the GMGN Agent API and scores every token against the anti-rug algorithm before returning.

GET /api/health GET

Health check. Returns {"ok": true} if the upstream GMGN API is reachable.

curl https://gmgn-screener.pages.dev/api/health
# { "ok": true, "upstream": "gmgn.ai", "latency_ms": 142 }
GET /api/trending GET

Trending tokens with anti-rug scores pre-applied. Server-side cache: 60s.

ParamDefaultDescription
chainsolsol / bsc / base
interval1h1h / 3h / 6h / 24h
limit30Max 100
curl "https://gmgn-screener.pages.dev/api/trending?chain=sol&interval=1h&limit=50"
GET /api/trenches GET

New token launches, scored. Use type=completed for graduated tokens, type=near_completion for tokens about to graduate.

ParamDefaultDescription
chainsolsol / bsc / base
typenew_creationnew_creation / near_completion / completed
limit50Max 80
curl "https://gmgn-screener.pages.dev/api/trenches?chain=sol&type=new_creation&limit=80"
GET /api/token GET

Full token analysis for a single address. Combines info + security + scoring. Use this for token detail pages.

ParamRequiredDescription
chainyessol / bsc / base
addressyesToken contract address
curl "https://gmgn-screener.pages.dev/api/token?chain=sol&address=ENNHkudgTpnkQ3jh5Fd9PJAFyrpdqM7k2DbViMXapump"
The scoring algorithm 5 axes

Every token returned by the API has a safety_score (0-100) and a breakdown object with 5 axes. Higher = safer. Zero = hard stop.

{
  "address": "ENNHkudgTpnkQ3jh5Fd9PJAFyrpdqM7k2DbViMXapump",
  "symbol": "LIBTARD",
  "name": "libtard boomer",
  "chain": "sol",
  "price": 0.0000021356,
  "liquidity": 1.12,
  "market_cap": 2135.62,
  "smart_degen_count": 0,
  "renowned_count": 0,
  "rug_ratio": 1,
  "top_10_holder_rate": 1,
  "is_honeypot": "",
  "is_wash_trading": false,
  "renounced_mint": true,
  "renounced_freeze_account": true,
  "creator_token_status": "creator_hold",
  "sniper_count": 1,
  "bundler_rate": 0,
  "rat_trader_amount_rate": 0,
  "safety_score": 0,
  "breakdown": {
    "security": 0,
    "rug_signals": -15,
    "distribution": -5,
    "liquidity": -15,
    "conviction": 0
  }
}

Hard stops (any one = score 0)

  • is_honeypot = "yes"
  • is_wash_trading = true
  • renounced_mint = false (SOL)
  • renounced_freeze_account = false (SOL)
  • sell_tax > 0.10
  • rug_ratio > 0.30
  • top_10_holder_rate > 0.50
  • bundler_rate > 0.30
  • rat_trader_amount_rate > 0.30
  • sniper_count > 20

Score tiers

  • 🟢 80-100 SAFE — strong conviction entry OK
  • 🟢 65-79 SOLID — small position, monitor smart money
  • 🟡 50-64 CAUTION — watch only, wait for signal
  • 🟠 30-49 RISKY — skip or paper-trade
  • 🔴 0-29 REKT — hard skip, multiple red flags
Caching & rate limits be nice

All endpoints are cached at the edge for 60 seconds. The upstream GMGN API has a 10 req/sec leaky-bucket limit. The proxy respects X-RateLimit-Reset headers and self-throttles. If you see 429, back off for the indicated time.

Open source MIT

The full algorithm, the data shapes, and the deployment are open. The site runs on Cloudflare Pages Functions. The data is the GMGN Agent API (read-only, public demo key).