# loophole tape > Real-time pump.fun / PumpSwap risk checks for agents, computed from our own independent capture of every on-chain event (not resold third-party data) and the launch history we observed ourselves. Pay per request in USDC on Solana mainnet or on Base with x402 v2 (exact scheme, PayAI facilitator, no account, no API key). 0.5-2.5 cents per call. Compact checks require full live coverage and feed lag <= 5 s; each response reports freshness. Base URL: https://api.loopholetape.com Payment: x402 v2 exact. Solana mainnet: network solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp, asset USDC EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v, payTo 9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT. Base: network eip155:8453, asset USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, payTo 0x25d408eF54e60F3006bD13d5A040d525E2F359c2. Facilitator https://facilitator.payai.network pays the network fee on either chain. Flow: GET a paid route -> 402 with header PAYMENT-REQUIRED (base64 JSON: accepts[], resource) and the same JSON in the body -> sign a USDC transfer after checking recipient, network, asset and amount against your budget with an x402 v2 client (Python or TypeScript examples in the public repo) -> retry with header PAYMENT-SIGNATURE -> 200 with header PAYMENT-RESPONSE (settlement). Every 402 lists both networks in accepts[]; you only need USDC on one of them. Every response: {ok, schema_version: 2.0, generated_at, t, coverage: full|thin, data, meta{feed_lag_s, is_stale, last_slot, price_usd, next}}. Unavailable measurements are null; labels describe observations, not a guarantee of safety. ## Start with a compact risk check - Check your own mint list for free: GET /v1/check/coverage?mints=MINT1,MINT2 (MCP: check_coverage with mints array). - Buy one compact check: GET /v1/check/mint/MINT ($0.005; MCP: check_pumpfun_risk). Buy up to five: GET /v1/check/watchlist?mints=MINT1,MINT2 ($0.01 total; MCP: check_watchlist_risk). - Invalid arguments, missing full coverage or feed lag > 5 s are rejected before payment. Eligibility is checked again after verification and before settlement. - The five-second eligibility limit is checked at result generation, before settlement. Settlement/transit can add delay. meta.result_age_s and delivery-aged feed_lag_s/is_stale include settlement time; compare t with your own clock after receipt. - Initialize a free watch: GET /v1/check/watch?mints=... (MCP: watchlist_updates). Poll with its cursor every 15 s or slower. Only new documented flags or lifecycle transitions signal an update; individual trades and changing counts do not. - Pass that cursor to the paid check to buy new event details and receive an updated cursor. No new watched events returns 200 / a successful MCP result with data.status=no_new_events and charged=false, without payment. Omit cursor to purchase the current snapshot regardless of events. Cursors bind to the exact mint set and expire after 24 h. - Retry a lost paid response using the EXACT original PAYMENT-SIGNATURE (MCP: x402/payment) and original arguments on the same transport. For 10 min the original result and receipt are replayed without a second settlement. meta.replayed/result_age_s and aged feed_lag_s identify cached data. An optional payment-identifier is supported; an identifier alone cannot recover a result. - payment_outcome_unknown (charged=null) means stop and reconcile the original transaction before authorizing another payment. Do not repeatedly create new signatures after a timeout. - Budgeted Python and TypeScript clients: https://github.com/gosadu/loophole-tape. Full risk card remains $0.025; existing free tools remain free. ## Paid resources (GET, JSON) - [GET /v1/mint/:mint](https://api.loopholetape.com/v1/mint/{mint}): $0.025 USDC. Risk card for one pump.fun mint (live microstructure or thin on-chain card). Path: mint (base58 SPL mint address (32-44 chars); pump.fun mints usually end in 'pump'). Handler latency estimate in ms (excludes payment): {'full': 15, 'thin': 300}. Freshness: {'full': 2, 'thin': 1} s. MCP tool: mint_risk_card. - [GET /v1/launches/recent](https://api.loopholetape.com/v1/launches/recent): $0.01 USDC. Recent pump.fun launches with compact risk labels. Query: limit (optional), max_age_s (optional), exclude_mayhem (optional), min_rs (optional), only_alive (optional). Handler latency estimate in ms (excludes payment): {'full': 25}. Freshness: {'full': 2} s. MCP tool: recent_launches. - [GET /v1/rugs/recent](https://api.loopholetape.com/v1/rugs/recent): $0.02 USDC. Recent rug / close flags with mechanism labels. Query: limit (optional), window_s (optional). Handler latency estimate in ms (excludes payment): {'full': 10}. Freshness: {'full': 2} s. MCP tool: recent_rugs. - [GET /v1/graduations/recent](https://api.loopholetape.com/v1/graduations/recent): $0.02 USDC. Recent migrations labelled true graduation vs below-threshold close. Query: limit (optional), window_s (optional). Handler latency estimate in ms (excludes payment): {'full': 15}. Freshness: {'full': 2} s. MCP tool: recent_graduations. - [GET /v1/creator/:address](https://api.loopholetape.com/v1/creator/{address}): $0.02 USDC. Creator reputation over our full launch history. Path: address (base58 wallet address). Handler latency estimate in ms (excludes payment): {'full': 20}. Freshness: {'full': 2} s. MCP tool: creator_reputation. - [GET /v1/wallet/:address](https://api.loopholetape.com/v1/wallet/{address}): $0.02 USDC. Wallet class from our rolling PnL leaderboard + live holdings. Path: address (base58 wallet address). Handler latency estimate in ms (excludes payment): {'full': 20}. Freshness: {'full': 2} s. MCP tool: wallet_profile. - [GET /v1/rhc/launches/recent](https://api.loopholetape.com/v1/rhc/launches/recent): $0.01 USDC. Robinhood Chain (Pons V2) recent launches with holder / route / cluster structure. Query: limit (optional), max_age_s (optional), pair (optional), only_live (optional), min_buys (optional). Handler latency estimate in ms (excludes payment): {'full': 60}. Freshness: {'full': 3} s. MCP tool: rhc_recent_launches. - [GET /v1/rhc/curve/:address](https://api.loopholetape.com/v1/rhc/curve/{address}): $0.02 USDC. Robinhood Chain (Pons V2) curve structure card for one curve or token address. Path: address (0x-prefixed 40-hex Pons V2 curve OR token address on Robinhood Chain). Handler latency estimate in ms (excludes payment): {'full': 20}. Freshness: {'full': 3} s. MCP tool: rhc_curve_card. - [GET /v1/check/mint/:mint](https://api.loopholetape.com/v1/check/mint/{mint}): $0.005 USDC. Check one pump.fun mint for observed launch risks ($0.005). Path: mint (A pump.fun mint with full live coverage; check /v1/check/coverage first.). Query: cursor (optional). End-to-end payment latency is not benchmarked. Freshness: {'full': 5} s. MCP tool: check_pumpfun_risk. - [GET /v1/check/watchlist](https://api.loopholetape.com/v1/check/watchlist): $0.01 USDC. Check up to five pump.fun mints for $0.01 total. Query: mints (required), cursor (optional). End-to-end payment latency is not benchmarked. Freshness: {'full': 5} s. MCP tool: check_watchlist_risk. ## Free resources - [/v1/check/coverage](https://api.loopholetape.com/v1/check/coverage): free coverage and freshness check for one to five mints; quotes single and batch prices - [/v1/check/watch](https://api.loopholetape.com/v1/check/watch): free availability of new risk/lifecycle events for a watchlist; opaque cursor, no event details - [/](https://api.loopholetape.com/): this index - [/health](https://api.loopholetape.com/health): feed health: seconds behind the chain, last slot, mints tracked, counters - [/v1/market/regime](https://api.loopholetape.com/v1/market/regime): market-wide regime meter: launch rate, mayhem share, buy/sell flow, fail share, migrations vs true graduations, rug flags (free) - [/v1/sample/launches](https://api.loopholetape.com/v1/sample/launches): free 3-item sample of /v1/launches/recent, delayed >= 300 s - [/v1/sample/rugs](https://api.loopholetape.com/v1/sample/rugs): free 3-item sample of /v1/rugs/recent, delayed >= 300 s - [/v1/sample/mint](https://api.loopholetape.com/v1/sample/mint): free full risk card of one mint aged >= 300 s (the exact paid shape) - [/v1/x402/resources](https://api.loopholetape.com/v1/x402/resources): machine-readable list of paid resources: prices, payment terms, input schema, output example - [/v1/labels](https://api.loopholetape.com/v1/labels): semantics of every label, flag and field (coverage, status, risk_label, confidence, rug flags, history, rhc) - [/v1/rhc/regime](https://api.loopholetape.com/v1/rhc/regime): Robinhood Chain (Pons V2) regime meter: launches/h, graduations/h and rate, median launch-to-graduation seconds, curve buys/sells per minute, unique buyers (free) - [/.well-known/x402](https://api.loopholetape.com/.well-known/x402): x402 discovery manifest (IETF draft-hawkins-x402-dns-discovery + x402scan shapes) - [/openapi.json](https://api.loopholetape.com/openapi.json): OpenAPI 3 schema with x-payment-info per paid operation - [/llms.txt](https://api.loopholetape.com/llms.txt): plain-text description for LLM agents (llms.txt convention) - [/.well-known/agent-card.json](https://api.loopholetape.com/.well-known/agent-card.json): A2A agent card (skills = these routes; payment over HTTP/MCP with x402) - [/a2a](https://api.loopholetape.com/a2a): A2A JSON-RPC endpoint: message/send answers with the catalog, payment terms and the exact call for the skill you name - [/.well-known/mcp-server-card](https://api.loopholetape.com/.well-known/mcp-server-card): MCP server card (SEP-2127 shape): remote endpoint, protocol versions, payment summary - [/.well-known/agents.json](https://api.loopholetape.com/.well-known/agents.json): agents.json manifest: OpenAPI source plus multi-step flows (coverage -> check, watch -> check, launches -> card) - [/agents.txt](https://api.loopholetape.com/agents.txt): agents.txt announcement: protocols x402, MCP endpoint, A2A card - [/.well-known/api-catalog](https://api.loopholetape.com/.well-known/api-catalog): RFC 9727 api-catalog linkset - [/.well-known/security.txt](https://api.loopholetape.com/.well-known/security.txt): RFC 9116 security contact - [/sitemap.xml](https://api.loopholetape.com/sitemap.xml): sitemap of the public documents - [/mcp](https://api.loopholetape.com/mcp): MCP server (streamable HTTP, stateless, JSON responses); paid tools use x402 over MCP - [/terms](https://api.loopholetape.com/terms): terms of use ## MCP - [MCP endpoint](https://api.loopholetape.com/mcp): streamable HTTP, stateless, JSON responses. Tools: catalog, health, market_regime, sample_mint, rhc_regime, check_coverage, watchlist_updates (free); mint_risk_card, recent_launches, recent_rugs, recent_graduations, creator_reputation, wallet_profile, rhc_recent_launches, rhc_curve_card, check_pumpfun_risk, check_watchlist_risk (paid, x402 over MCP: the first call returns the PaymentRequired as an isError result; pay and retry with _meta['x402/payment']). Registry id io.github.gosadu/loophole-tape. ## Label semantics - coverage: full = the mint is inside our live window (created while our capture was up, still tracked): every field is computed from our own per-event tape, typically < 2 s behind the chain.; thin = the mint is not in the live window (older than ~2 h of silence, created during a capture gap, or not a pump.fun mint): the card carries only what can be computed now — our resolved launch record if we have one, the current on-chain mint + bonding-curve state read from RPC, the creator's prior, and market base rates. Fields we cannot compute are null with a reason. Never a guess. - status: live_curve = bonding curve still open (not complete, not migrated); curve_complete = the curve reported complete; migration to PumpSwap pending or unobserved; migrated_graduated = migrated to a pool AND the curve was witnessed at >= 84 SOL (a true graduation); migrated_below_grad = migrated to a pool without an observed curve balance of at least 84 SOL; classified as a below-threshold close; historical = outside the live window; status is our resolved record (graduated / rugged / terminal_rs); onchain_only = no live tape and no history; status is the current bonding-curve account as read from RPC; not_pump_fun = no pump.fun bonding curve exists for this mint - risk_label: rug_flagged = at least one rug/close flag fired (see rug_flags and flags for mechanism + first-seen time); mayhem = mayhem-class launch with 2B supply; this classification does not predict its outcome; concentrated = holder structure dominated by few wallets: top-5 >= 50% of supply, or create-slot bundle >= 25%, or insider share >= 20%; stalled = no new buyer for 30 s after the first 2 minutes, or zero buys in the last 60 s past 2 minutes of age; active = none of the above fired at generation time; unknown = not enough data to label (thin coverage) - confidence: meaning = how much data the label rests on at generation time (coverage, trade count, feed lag) — NOT a measure of predictive accuracy; no label on this API is a forecast; high = full coverage, >= 20 trades observed, feed < 5 s behind the chain; medium = full coverage with 5-19 trades, or feed 5-30 s behind; low = thin coverage, or < 5 trades, or feed > 30 s behind — treat labels as weak priors - caveats: same_block_direct_cluster_share = wallets that bought directly from the curve in the same block as at least one other direct buyer; matching timing does not establish coordination or common ownership; terminal_buy_share = buys routed through terminal contracts (GMGN, Axiom, ...) — a route, not proof that a human placed the order; base_rates_vs_flags = base rates come from the RESOLVED history (rugged = >= 5 SOL peak then <= 25% of peak, or creator sold >= half); live rug_flags fire on partial evidence within seconds with their own thresholds — related, not the same measurement; labels = heuristics derived from public on-chain data; nothing here is a prediction or financial advice - rug_flags: creator_sold = the creator wallet sold tokens (share in flags.creator_sold.tokens_share); bundle_dumped = wallets that bought in the create slot have sold most of their tokens; curve_drained = curve SOL fell >= 80% from its peak (peak >= 1 SOL) before any migration; pool_drained = PumpSwap pool quote reserves fell >= 80% from the opening reserve; curve_closed_low = the curve completed below 84 SOL (a close, never a graduation); migrate_below_grad = a pool was created for a curve that never reached 84 SOL - history: graduated = 1 = the curve was observed at >= 84 SOL before migrating; this API uses observed reserves rather than the completion flag alone; rugged = 1 = DRAIN (curve held >= 5 SOL real and later fell to <= 25% of its running peak, before any migrate) or DEV DUMP (the creator sold at least half of its tokens); rug_dt_s = seconds after launch; terminal_rs = curve SOL when we stopped observing the mint (null = unresolved); peak_rs = highest curve SOL witnessed; dev_first_sell_dt_s = seconds after launch of the creator's first sell (null = never seen) - rhc: chain = Robinhood Chain, EVM chain id 4663 (eip155:4663), 100 ms blocks, FCFS sequencer; launchpad Pons V2 (constant-product curve, 4.2 ETH graduation); same_block_direct_cluster_share = share of circulating tokens held by wallets that bought DIRECTLY from the curve (not through a terminal router) in a 100 ms block where >= 2 direct buys landed; matching timing does not establish coordination or common ownership; terminal_holdings_share = share of circulating tokens held by wallets whose buys came through a terminal / aggregator router; routing does not identify a human or bot; router_join_resolved_share = share of buys linked to an observed sender address (direct buys, or router transactions joined to their sender); recent_flow = last_2s / last_6s count observed trade timestamps in (response time - window, response time]; new buyers count each resolved wallet's first observed buy. Timestamps use block time when present, otherwise receipt time. Counts expire without new events; a zero on a stale feed does not prove inactivity (check meta.is_stale); price_multiple_vs_launch = marginal curve price now / at launch for ETH-paired curves (constant product, virtual reserves 1.68 ETH / 1e9 tokens); null otherwise; snipe_tax = buys in the first 30 blocks (3 s) after launch pay a decaying tax; in_tax_window flags that period; status = live_curve | curve_complete (CurveCompleted seen) | graduated (PoolGraduated seen) | unknown (address not in our launch window); coverage = full = launched inside our event window, every trade observed; thin = launch facts + lifecycle only (older than the trade-retention window or launched before the window opened) - risk_checks: scope = pump.fun mints with full live coverage; all requested mints required; feed lag <= 5 s at evaluation; status = flags_observed = documented flags exist; no_flags_observed = none of those flags observed, not a safety verdict; insufficient data is unpaid; evidence = first_seen_at is the flag's original observation time; snapshot_slot is the overall snapshot slot, not necessarily the flag's event slot; watch = cursor advances for first-observed creator_sold, bundle_dumped, curve_drained, pool_drained, curve_closed_low, migrate_below_grad flags or lifecycle transitions; it does not report every trade, concentration change or flow fluctuation; cursor = opaque, bound to the exact set of mints, valid for 24 h; free watch initialization establishes a baseline; a paid check returns an updated cursor; retry = retry the exact signed payment and original arguments within 10 min to recover its original result; a replay is marked and its freshness ages; an uncertain settlement is reported explicitly and must be reconciled before another purchase ## Data sources and definitions - Solana source: our own real-time capture of every pump.fun / PumpSwap on-chain event, joined with the launch history we observed ourselves. - Robinhood Chain source (rhc routes): public Robinhood Chain Pons V2 events and transactions. - Graduation = the curve observed at >= 84 SOL before migration; a completion or pool below that threshold is classified as a close. - Rug = drain (curve held >= 5 SOL and fell to <= 25% of peak before migrating) or dev dump (creator sold >= half); flags carry first-seen times. - coverage=thin cards (mints outside the live window) carry only our resolved record, the live on-chain bonding-curve state read from RPC, the creator prior and market base rates; confidence is low by construction. - Discovery: /.well-known/x402 (IETF x402 dns-discovery draft + x402scan shape), /openapi.json (x-payment-info), /v1/x402/resources. - Terms: https://api.loopholetape.com/terms. Nothing here is financial advice; labels are statistics, not guarantees. ## Machine-readable { "protocol": "x402", "x402Version": 2, "schema_version": "2.0", "service": "loophole tape", "version": "0.5.0", "base_url": "https://api.loopholetape.com", "payment": { "mode": "x402", "protocol": "x402", "x402Version": 2, "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "asset_symbol": "USDC", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT", "facilitator": "https://facilitator.payai.network", "networks": [ { "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "label": "Solana mainnet", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "asset_symbol": "USDC", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT" }, { "network": "eip155:8453", "label": "Base", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "asset_symbol": "USDC", "payTo": "0x25d408eF54e60F3006bD13d5A040d525E2F359c2" } ], "prices_usd": { "risk": 0.005, "risk_batch": 0.01, "mint": 0.025, "launches": 0.01, "rugs": 0.02, "graduations": 0.02, "creator": 0.02, "wallet": 0.02, "rhc_launches": 0.01, "rhc_curve": 0.02 }, "how": "Call a priced route; a 402 with a PAYMENT-REQUIRED header comes back listing two accepts entries, USDC on Solana mainnet or USDC on Base; sign the transfer for the network your wallet supports with any x402 v2 client (python `x402[httpx,svm]` / `x402[httpx,evm]`, `@x402/fetch` + `@x402/svm` / `@x402/evm`) and retry with PAYMENT-SIGNATURE; the facilitator pays the network fee on either chain, you need only USDC." }, "source": "our own real-time capture of every pump.fun / PumpSwap on-chain event, joined with the launch history we observed ourselves", "resources": [ { "resource": "https://api.loopholetape.com/v1/mint/{mint}", "route_template": "GET /v1/mint/:mint", "method": "GET", "mimeType": "application/json", "summary": "Risk card for one pump.fun mint (live microstructure or thin on-chain card)", "description": "Risk card for ONE pump.fun mint, always HTTP 200 for a valid base58 mint. coverage=full when the mint is in our live window: curve truth (graduation = curve witnessed >= 84 SOL), demand (unique buyers, buys/sells 60 s, net SOL), holder concentration (top-5, HHI), create-slot bundle / insider / dev shares, look-ahead-safe creator prior at launch, warm-launch (observed creator-funding links) label, rug/close flags with first-seen times, exit signals. coverage=thin otherwise: our resolved launch record if any + current bonding-curve state from RPC + creator prior. Every card carries status, risk_label, confidence, a why[] list and market base rates. Nulls carry a reason; nothing is guessed.", "price": "$0.025", "price_usd": 0.025, "accepts": [ { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "amount": "25000", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT", "maxTimeoutSeconds": 60, "extra": { "feePayer": "CjNFTjvBhbJJd2B5ePPMHRLx1ELZpa8dwQgGL727eKww" } }, { "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "25000", "payTo": "0x25d408eF54e60F3006bD13d5A040d525E2F359c2", "maxTimeoutSeconds": 60, "extra": { "name": "USD Coin", "version": "2" } } ], "input": { "path_params": { "mint": { "type": "string", "description": "base58 SPL mint address (32-44 chars); pump.fun mints usually end in 'pump'", "example": "73sfnFgqQzpSRZSimCC4sxpubqghRGYewYLmiUH2pump" } }, "query": null }, "output_example": { "ok": true, "schema_version": "2.0", "coverage": "full", "data": { "mint": "So11111111111111111111111111111111111111112", "name": "Example", "symbol": "EXM", "creator": "\u2026", "created_at": 1788671800.2, "age_s": 41.9, "coverage": "full", "status": "live_curve", "risk_label": "concentrated", "confidence": "medium", "why": [ "top-5 holders own 62.1% of supply", "create-slot bundle: 4 wallets hold 31.0%", "curve 12.4 SOL (14.6% of the way to graduation), 3 buys / 1 sell in the last 60 s" ], "curve": { "rs_sol": 12.4, "peak_rs_sol": 18.9, "progress": 0.146, "drawdown_from_peak": 0.34, "complete": false, "migrated": false, "graduated": null, "is_mayhem": false, "dev_buy_sol": 1.5 }, "demand": { "unique_buyers": 41, "buys_60s": 13, "sells_60s": 7, "net_sol_60s": 1.9, "inflow_stalled": false }, "holders": { "n_holders": 38, "top5_share": 0.621, "hhi": 0.12, "dev_share": 0.0, "bundle_share": 0.31, "insider_share": 0.03, "n_bundle_wallets": 4, "bundle_dumped": false }, "exit_signals": { "creator_sold": false, "top5_holder_sold_recent": true, "inflow_stalled": false, "progress_reversed": true }, "creator_prior_at_launch": { "n_launches": 12, "n_resolved": 12, "grad_rate": 0.0, "rug_rate": 0.58, "median_dev_sell_s": 14.2, "is_first_time": false }, "warm_launch": null, "rug_flags": [], "flags": {}, "base_rates": { "window_days": 7, "launches": 192354, "grad_rate": 0.024, "rug_rate": 0.652, "dev_sold_rate": 0.645, "reached_5_sol_rate": 0.195 }, "next": { "creator": "/v1/creator/\u2026", "regime": "/v1/market/regime", "rugs": "/v1/rugs/recent?window_s=600" } } }, "output_example_thin": { "ok": true, "schema_version": "2.0", "coverage": "thin", "data": { "mint": "\u2026pump", "coverage": "thin", "coverage_reason": "not in the live window; history + on-chain state only", "status": "onchain_only", "risk_label": "unknown", "confidence": "low", "why": [ "no live tape for this mint", "bonding curve open: 5.42 SOL real, 20.7% of tokens sold", "creator prior: 3 launches, 0 graduations, 2 rugged" ], "history": null, "history_reason": "mint not in the available launch history", "onchain": { "slot": 445629740, "exists": true, "is_token_mint": true, "token_program": "spl-token-2022", "decimals": 6, "supply_ui": 1000000000.0, "mint_authority": null, "freeze_authority": null, "pump_fun": { "is_pump_fun": true, "bonding_curve": "\u2026", "complete": false, "real_sol_reserves_sol": 5.417, "virtual_sol_reserves_sol": 35.417, "progress": 0.207, "price_sol_per_token": 3.9e-08, "market_cap_sol": 38.97, "creator": "\u2026", "cashback_enabled": false, "is_mayhem_supply": false } }, "creator_prior": { "n_launches": 3, "grad_rate": 0.0, "rug_rate": 0.667 }, "base_rates": { "window_days": 7, "launches": 192354, "grad_rate": 0.024, "rug_rate": 0.652 }, "next": { "creator": "/v1/creator/\u2026", "regime": "/v1/market/regime" } } }, "latency_ms": { "full": 15, "thin": 300 }, "freshness_s": { "full": 2, "thin": 1 }, "mcp_tool": "mint_risk_card" }, { "resource": "https://api.loopholetape.com/v1/launches/recent", "route_template": "GET /v1/launches/recent", "method": "GET", "mimeType": "application/json", "summary": "Recent pump.fun launches with compact risk labels", "description": "Recent pump.fun launches (default: last hour, mayhem excluded, newest first) as compact cards: curve SOL and progress, unique buyers, holder concentration, create-slot bundle/insider/dev shares, look-ahead-safe creator prior (launches, grad rate, rug rate at the moment of launch), warm-launch label, rug flags with first-seen times. The funnel for a screener: filter by min_rs / only_alive and then buy full cards for the survivors.", "price": "$0.01", "price_usd": 0.01, "accepts": [ { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "amount": "10000", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT", "maxTimeoutSeconds": 60, "extra": { "feePayer": "CjNFTjvBhbJJd2B5ePPMHRLx1ELZpa8dwQgGL727eKww" } }, { "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "10000", "payTo": "0x25d408eF54e60F3006bD13d5A040d525E2F359c2", "maxTimeoutSeconds": 60, "extra": { "name": "USD Coin", "version": "2" } } ], "input": { "path_params": null, "query": { "type": "object", "properties": { "limit": { "type": "integer", "default": 50, "minimum": 1, "maximum": 100, "description": "max items" }, "max_age_s": { "type": "number", "default": 3600, "minimum": 30, "maximum": 21600, "description": "only mints created within this many seconds" }, "exclude_mayhem": { "type": "boolean", "default": true, "description": "drop mayhem-class (2B supply, AI walker) launches" }, "min_rs": { "type": "number", "default": 0, "minimum": 0, "description": "minimum curve SOL right now" }, "only_alive": { "type": "boolean", "default": false, "description": "drop mints with any rug/close flag" } } } }, "output_example": { "ok": true, "schema_version": "2.0", "coverage": "full", "data": { "count": 2, "items": [ { "mint": "\u2026", "age_s": 412.3, "curve": { "rs_sol": 3.2, "progress": 0.04 }, "holders": { "bundle_share": 0.31, "top5_share": 0.44 }, "demand": { "unique_buyers": 12 }, "creator_prior_at_launch": { "n_launches": 0, "is_first_time": true }, "rug_flags": [] } ] } }, "output_example_thin": null, "latency_ms": { "full": 25 }, "freshness_s": { "full": 2 }, "mcp_tool": "recent_launches" }, { "resource": "https://api.loopholetape.com/v1/rugs/recent", "route_template": "GET /v1/rugs/recent", "method": "GET", "mimeType": "application/json", "summary": "Recent rug / close flags with mechanism labels", "description": "Rug and close flags fired in the window (newest first), each with its mechanism (creator_sold, bundle_dumped, curve_drained, pool_drained, curve_closed_low, migrate_below_grad), the flag time, the mint's age at the flag, peak and current curve SOL, name/symbol/creator. Use it to review observed risk events and their frequency.", "price": "$0.02", "price_usd": 0.02, "accepts": [ { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "amount": "20000", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT", "maxTimeoutSeconds": 60, "extra": { "feePayer": "CjNFTjvBhbJJd2B5ePPMHRLx1ELZpa8dwQgGL727eKww" } }, { "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "20000", "payTo": "0x25d408eF54e60F3006bD13d5A040d525E2F359c2", "maxTimeoutSeconds": 60, "extra": { "name": "USD Coin", "version": "2" } } ], "input": { "path_params": null, "query": { "type": "object", "properties": { "limit": { "type": "integer", "default": 50, "minimum": 1, "maximum": 200, "description": "max items" }, "window_s": { "type": "number", "default": 3600, "minimum": 60, "maximum": 21600, "description": "look-back window in seconds" } } } }, "output_example": { "ok": true, "schema_version": "2.0", "coverage": "full", "data": { "count": 1, "items": [ { "t": 1788671846.0, "mint": "\u2026", "flag": "curve_drained", "detail": { "peak_rs": 18.97, "rs": 0.23 }, "mint_age_at_flag_s": 7.3, "creator": "\u2026" } ] } }, "output_example_thin": null, "latency_ms": { "full": 10 }, "freshness_s": { "full": 2 }, "mcp_tool": "recent_rugs" }, { "resource": "https://api.loopholetape.com/v1/graduations/recent", "route_template": "GET /v1/graduations/recent", "method": "GET", "mimeType": "application/json", "summary": "Recent migrations labelled true graduation vs below-threshold close", "description": "Migrations to PumpSwap in the window (default 6 h), each labelled graduated=true only when we witnessed the curve at >= 84 SOL, otherwise a below-threshold close (mayhem or operator pools). Each item is a compact card with the migrate time, pool, peak curve SOL and the holder/creator labels.", "price": "$0.02", "price_usd": 0.02, "accepts": [ { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "amount": "20000", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT", "maxTimeoutSeconds": 60, "extra": { "feePayer": "CjNFTjvBhbJJd2B5ePPMHRLx1ELZpa8dwQgGL727eKww" } }, { "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "20000", "payTo": "0x25d408eF54e60F3006bD13d5A040d525E2F359c2", "maxTimeoutSeconds": 60, "extra": { "name": "USD Coin", "version": "2" } } ], "input": { "path_params": null, "query": { "type": "object", "properties": { "limit": { "type": "integer", "default": 50, "minimum": 1, "maximum": 100, "description": "max items" }, "window_s": { "type": "number", "default": 21600, "minimum": 60, "maximum": 86400, "description": "look-back window in seconds" } } } }, "output_example": { "ok": true, "schema_version": "2.0", "coverage": "full", "data": { "count": 1, "items": [ { "mint": "\u2026", "migrate_t": 1788671128.2, "graduated": true, "curve": { "peak_rs_sol": 85.005, "pool": "\u2026" } } ] } }, "output_example_thin": null, "latency_ms": { "full": 15 }, "freshness_s": { "full": 2 }, "mcp_tool": "recent_graduations" }, { "resource": "https://api.loopholetape.com/v1/creator/{address}", "route_template": "GET /v1/creator/:address", "method": "GET", "mimeType": "application/json", "summary": "Creator reputation over our full launch history", "description": "Creator reputation: look-ahead-safe stats over every launch we have seen from this wallet (n_launches, resolved, graduations witnessed at >= 84 SOL, rugs by drain or dev dump, median seconds to the dev's first sell, total dev buys), the last 25 launches with outcomes, the creator's live mints right now, and whether the wallet was funded in the last 30 min (warm launch). Empty stats (is_first_time=true) for a wallet we never saw launch.", "price": "$0.02", "price_usd": 0.02, "accepts": [ { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "amount": "20000", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT", "maxTimeoutSeconds": 60, "extra": { "feePayer": "CjNFTjvBhbJJd2B5ePPMHRLx1ELZpa8dwQgGL727eKww" } }, { "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "20000", "payTo": "0x25d408eF54e60F3006bD13d5A040d525E2F359c2", "maxTimeoutSeconds": 60, "extra": { "name": "USD Coin", "version": "2" } } ], "input": { "path_params": { "address": { "type": "string", "description": "base58 wallet address", "example": "11111111111111111111111111111111" } }, "query": null }, "output_example": { "ok": true, "schema_version": "2.0", "coverage": "full", "data": { "creator": "\u2026", "stats": { "n_launches": 63, "n_resolved": 60, "grad_rate": 0.0, "rug_rate": 0.71, "median_dev_sell_s": 14.2, "is_first_time": false }, "recent_launches": [ { "mint": "\u2026", "t0": 1788600000.0, "graduated": 0, "rugged": 1, "rug_dt_s": 22.0, "peak_rs": 6.1 } ], "live_mints": [], "funded_recently_by": null } }, "output_example_thin": null, "latency_ms": { "full": 20 }, "freshness_s": { "full": 2 }, "mcp_tool": "creator_reputation" }, { "resource": "https://api.loopholetape.com/v1/wallet/{address}", "route_template": "GET /v1/wallet/:address", "method": "GET", "mimeType": "application/json", "summary": "Wallet class from our rolling PnL leaderboard + live holdings", "description": "Wallet profile: class from our rolling 3-day realised-PnL leaderboard over every pump.fun trade we captured (insider / sniper / skilled / crowd, with rank and stats), holdings among the last 3000 mints (token share, first-buy slot, curve SOL now), creator stats if the wallet ever launched, and recent funding source. Use it to weight the buyers on a curve.", "price": "$0.02", "price_usd": 0.02, "accepts": [ { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "amount": "20000", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT", "maxTimeoutSeconds": 60, "extra": { "feePayer": "CjNFTjvBhbJJd2B5ePPMHRLx1ELZpa8dwQgGL727eKww" } }, { "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "20000", "payTo": "0x25d408eF54e60F3006bD13d5A040d525E2F359c2", "maxTimeoutSeconds": 60, "extra": { "name": "USD Coin", "version": "2" } } ], "input": { "path_params": { "address": { "type": "string", "description": "base58 wallet address", "example": "11111111111111111111111111111111" } }, "query": null }, "output_example": { "ok": true, "schema_version": "2.0", "coverage": "full", "data": { "wallet": "\u2026", "leaderboard": { "class": "sniper", "rank": 17, "stats": { "n_positions": 120, "realized_sol": 14.2 } }, "as_creator": null, "live_holdings_recent_mints": [ { "mint": "\u2026", "tokens_share": 0.012, "first_buy_slot": 445600000, "rs_sol": 4.1 } ] } }, "output_example_thin": null, "latency_ms": { "full": 20 }, "freshness_s": { "full": 2 }, "mcp_tool": "wallet_profile" }, { "resource": "https://api.loopholetape.com/v1/rhc/launches/recent", "route_template": "GET /v1/rhc/launches/recent", "method": "GET", "mimeType": "application/json", "summary": "Robinhood Chain (Pons V2) recent launches with holder / route / cluster structure", "description": "Recent Pons V2 launches on Robinhood Chain (chain 4663; default last hour, newest first) as compact structure cards: raised (ETH), progress to the 4.2 ETH graduation, price multiple vs launch, snipe-tax activity, holder concentration (top-1 / top-5 / HHI), same-block direct-buy cluster share (matching timing, not proof of coordination), terminal-vs-direct route mix with the terminal router transactions joined to their wallets, inflow (new buyers in the last 2 / 6 s), lifecycle (live / complete / graduated). Filter pair=eth for ETH-paired curves or min_buys for a minimum observed activity count.", "price": "$0.01", "price_usd": 0.01, "accepts": [ { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "amount": "10000", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT", "maxTimeoutSeconds": 60, "extra": { "feePayer": "CjNFTjvBhbJJd2B5ePPMHRLx1ELZpa8dwQgGL727eKww" } }, { "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "10000", "payTo": "0x25d408eF54e60F3006bD13d5A040d525E2F359c2", "maxTimeoutSeconds": 60, "extra": { "name": "USD Coin", "version": "2" } } ], "input": { "path_params": null, "query": { "type": "object", "properties": { "limit": { "type": "integer", "default": 50, "minimum": 1, "maximum": 200, "description": "max items" }, "max_age_s": { "type": "number", "default": 3600, "minimum": 30, "maximum": 21600, "description": "only launches within this many seconds" }, "pair": { "type": "string", "default": "any", "enum": [ "any", "eth" ], "description": "eth = only ETH-paired curves (price multiple defined)" }, "only_live": { "type": "boolean", "default": false, "description": "drop completed / graduated curves" }, "min_buys": { "type": "integer", "default": 0, "minimum": 0, "description": "minimum curve buys observed" } } } }, "output_example": { "ok": true, "schema_version": "2.0", "coverage": "full", "data": { "count": 1, "items": [ { "curve": "0x1d63\u2026a855", "token": "0x57b4\u202697db", "age_s": 52.5, "status": "live_curve", "coverage": "full", "raised": { "eth": 0.120987, "progress": 0.0288, "price_multiple_vs_launch": 1.1492 }, "structure": { "n_holders": 6, "top1_share": 0.6777, "same_block_direct_cluster_share": 0.0834, "direct_buy_share": 0.9062, "terminal_holdings_share": 0.1987 }, "flow": { "n_buys": 32, "n_sells": 30, "unique_buyers": 31, "new_buyers_last_6s": 0, "last_trade_age_s": 33.1 } } ] } }, "output_example_thin": null, "latency_ms": { "full": 60 }, "freshness_s": { "full": 3 }, "mcp_tool": "rhc_recent_launches" }, { "resource": "https://api.loopholetape.com/v1/rhc/curve/{address}", "route_template": "GET /v1/rhc/curve/:address", "method": "GET", "mimeType": "application/json", "summary": "Robinhood Chain (Pons V2) curve structure card for one curve or token address", "description": "Full structure card for ONE Pons V2 curve on Robinhood Chain, addressed by curve or token address (0x\u2026): launch facts (block, deployer, pair token, graduation threshold), raised / progress / price multiple vs launch (ETH-paired curves), snipe-tax activity, holder ledger concentration (top-1 / top-5 / HHI / deployer share), same-block direct-buy cluster share and wallets, max direct buys in one 100 ms block, terminal-vs-direct route mix with terminal holdings share, flow (buys / sells / unique buyers / new buyers in the last 2 and 6 s / last trade age / volumes), lifecycle (completed / graduated blocks and delays, refunds). coverage=full for curves launched inside our event window (last ~2 h, trades observed from block 0); thin = launch facts + lifecycle only, with a reason. Always 200 for a valid address.", "price": "$0.02", "price_usd": 0.02, "accepts": [ { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "amount": "20000", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT", "maxTimeoutSeconds": 60, "extra": { "feePayer": "CjNFTjvBhbJJd2B5ePPMHRLx1ELZpa8dwQgGL727eKww" } }, { "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "20000", "payTo": "0x25d408eF54e60F3006bD13d5A040d525E2F359c2", "maxTimeoutSeconds": 60, "extra": { "name": "USD Coin", "version": "2" } } ], "input": { "path_params": { "address": { "type": "string", "format": "evm-address", "description": "0x-prefixed 40-hex Pons V2 curve OR token address on Robinhood Chain", "example": "0x1d63d24f2d6e726fa53c45cefcbee2c1b8ffa855" } }, "query": null }, "output_example": { "ok": true, "schema_version": "2.0", "coverage": "full", "data": { "curve": "0x1d63\u2026a855", "token": "0x57b4\u202697db", "deployer": "0x5e52\u20267c97", "pair_token": "0x0000000000000000000000000000000000000000", "pair_kind": "eth", "launch_block": 58633592, "launched_at": 1788965713.3, "age_s": 52.5, "coverage": "full", "status": "live_curve", "raised": { "quote_units": "120987126950004875", "eth": 0.120987, "progress": 0.0288, "price_multiple_vs_launch": 1.1492 }, "snipe_tax": { "in_tax_window": false, "n_taxed_buys": 10, "tax_total_eth": 0.014421 }, "structure": { "n_holders": 6, "top1_share": 0.6777, "top5_share": 0.9744, "hhi": 0.5026, "deployer_holding_share": 0.0, "same_block_direct_cluster_share": 0.0834, "same_block_direct_cluster_wallets": 26, "max_direct_buys_in_one_block": 16, "direct_buy_share": 0.9062, "terminal_buy_share": 0.0938, "terminal_holdings_share": 0.1987, "routes": { "direct": 29, "gmgn": 2, "pons_launchbuy": 1 }, "router_join_resolved_share": 0.9062 }, "flow": { "n_buys": 32, "n_sells": 30, "unique_buyers": 31, "unique_sellers": 29, "buys_last_6s": 0, "sells_last_6s": 0, "new_buyers_last_2s": 0, "new_buyers_last_6s": 0, "first_buy_after_s": 0.0, "last_trade_age_s": 33.1, "buy_volume_eth": 1.001847, "sell_volume_eth": 0.88086 }, "lifecycle": { "completed_block": null, "graduated_block": null, "graduated_after_s": null, "n_refunds": 0 } } }, "output_example_thin": { "ok": true, "schema_version": "2.0", "coverage": "thin", "data": { "address": "0x\u2026", "coverage": "thin", "known": false, "status": "unknown", "coverage_reason": "not a Pons V2 curve/token launched in the last 6 h" } }, "latency_ms": { "full": 20 }, "freshness_s": { "full": 3 }, "mcp_tool": "rhc_curve_card" }, { "resource": "https://api.loopholetape.com/v1/check/mint/{mint}", "route_template": "GET /v1/check/mint/:mint", "method": "GET", "mimeType": "application/json", "summary": "Check one pump.fun mint for observed launch risks ($0.005)", "description": "Compact check before a swap or during position monitoring: creator exits, early-wallet selling, curve/pool drains, migration classification, concentration and buyer flow. Findings include first-observed times and numeric evidence. Full coverage and feed lag <= 5 s required; stale/unavailable data is unpaid. Optional cursor: no new watched events is unpaid. No flags observed is not a safety guarantee. Exact signed-payment retries recover the original result for 10 min without a new settlement; timestamps identify its age.", "price": "$0.005", "price_usd": 0.005, "accepts": [ { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "amount": "5000", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT", "maxTimeoutSeconds": 60, "extra": { "feePayer": "CjNFTjvBhbJJd2B5ePPMHRLx1ELZpa8dwQgGL727eKww" } }, { "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "5000", "payTo": "0x25d408eF54e60F3006bD13d5A040d525E2F359c2", "maxTimeoutSeconds": 60, "extra": { "name": "USD Coin", "version": "2" } } ], "input": { "path_params": { "mint": { "type": "string", "description": "A pump.fun mint with full live coverage; check /v1/check/coverage first.", "example": "73sfnFgqQzpSRZSimCC4sxpubqghRGYewYLmiUH2pump" } }, "query": { "type": "object", "properties": { "cursor": { "type": [ "string", "null" ], "maxLength": 1024, "description": "Optional opaque watch cursor for these exact mints; no new watched events returns an unpaid result." } } } }, "output_example": { "ok": true, "schema_version": "2.0", "coverage": "full", "data": { "status": "flags_observed", "result_id": "risk_example", "count": 1, "items": [ { "mint": "73sfnFgqQzpSRZSimCC4sxpubqghRGYewYLmiUH2pump", "status": "flags_observed", "lifecycle": "live_curve", "risk_label": "rug_flagged", "findings": [ { "code": "creator_sold", "first_seen_at": 1788990000, "evidence": { "tokens_share": 0.12 } } ], "snapshot_slot": 445000001, "last_trade_at": 1788990001, "concentration": { "top5_share": 0.51, "dev_share": 0.03, "bundle_share": 0.2, "insider_share": 0.1 }, "buyer_flow": { "unique_buyers_60s": 12, "buys_60s": 18, "sells_60s": 6, "net_sol_60s": 0.2, "inflow_stalled": false }, "curve": { "rs_sol": 5.0, "peak_rs_sol": 6.0, "drawdown_from_peak": 0.1667, "graduated": null }, "full_card_url": "https://api.loopholetape.com/v1/mint/73sfnFgqQzpSRZSimCC4sxpubqghRGYewYLmiUH2pump" } ], "cursor": "opaque-watch-cursor", "watch_events": [ "creator_sold", "bundle_dumped", "curve_drained", "pool_drained", "curve_closed_low", "migrate_below_grad", "lifecycle_transition" ] } }, "output_example_thin": null, "latency_ms": { "full": null }, "freshness_s": { "full": 5 }, "mcp_tool": "check_pumpfun_risk", "output_schema": { "properties": { "ok": { "const": true, "title": "Ok", "type": "boolean" }, "schema_version": { "const": "2.0", "title": "Schema Version", "type": "string" }, "generated_at": { "title": "Generated At", "type": "string" }, "t": { "title": "T", "type": "number" }, "coverage": { "const": "full", "title": "Coverage", "type": "string" }, "data": { "anyOf": [ { "properties": { "status": { "enum": [ "flags_observed", "no_flags_observed" ], "title": "Status", "type": "string" }, "result_id": { "title": "Result Id", "type": "string" }, "count": { "maximum": 5, "minimum": 1, "title": "Count", "type": "integer" }, "items": { "items": { "properties": { "mint": { "title": "Mint", "type": "string" }, "status": { "enum": [ "flags_observed", "no_flags_observed" ], "title": "Status", "type": "string" }, "lifecycle": { "title": "Lifecycle", "type": "string" }, "risk_label": { "title": "Risk Label", "type": "string" }, "findings": { "items": { "properties": { "code": { "title": "Code", "type": "string" }, "first_seen_at": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "First Seen At" }, "evidence": { "additionalProperties": true, "title": "Evidence", "type": "object" } }, "required": [ "code", "first_seen_at", "evidence" ], "title": "Finding", "type": "object" }, "title": "Findings", "type": "array" }, "snapshot_slot": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "description": "Latest observed slot for this mint, not the slot of every finding.", "title": "Snapshot Slot" }, "last_trade_at": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Last Trade At" }, "concentration": { "properties": { "top5_share": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Top5 Share" }, "dev_share": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Dev Share" }, "bundle_share": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Bundle Share" }, "insider_share": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Insider Share" } }, "required": [ "top5_share", "dev_share", "bundle_share", "insider_share" ], "title": "Concentration", "type": "object" }, "buyer_flow": { "properties": { "unique_buyers_60s": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Unique Buyers 60S" }, "buys_60s": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Buys 60S" }, "sells_60s": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Sells 60S" }, "net_sol_60s": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Net Sol 60S" }, "inflow_stalled": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Inflow Stalled" } }, "required": [ "unique_buyers_60s", "buys_60s", "sells_60s", "net_sol_60s", "inflow_stalled" ], "title": "BuyerFlow", "type": "object" }, "curve": { "properties": { "rs_sol": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Rs Sol" }, "peak_rs_sol": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Peak Rs Sol" }, "drawdown_from_peak": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Drawdown From Peak" }, "graduated": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Graduated" } }, "required": [ "rs_sol", "peak_rs_sol", "drawdown_from_peak", "graduated" ], "title": "Curve", "type": "object" }, "full_card_url": { "title": "Full Card Url", "type": "string" } }, "required": [ "mint", "status", "lifecycle", "risk_label", "findings", "snapshot_slot", "last_trade_at", "concentration", "buyer_flow", "curve", "full_card_url" ], "title": "CheckItem", "type": "object" }, "maxItems": 5, "minItems": 1, "title": "Items", "type": "array" }, "cursor": { "title": "Cursor", "type": "string" }, "watch_events": { "items": { "type": "string" }, "title": "Watch Events", "type": "array" } }, "required": [ "status", "result_id", "count", "items", "cursor", "watch_events" ], "title": "CheckData", "type": "object" }, { "properties": { "status": { "const": "no_new_events", "title": "Status", "type": "string" }, "changed": { "const": false, "title": "Changed", "type": "boolean" }, "count": { "const": 0, "title": "Count", "type": "integer" }, "items": { "items": {}, "maxItems": 0, "title": "Items", "type": "array" }, "cursor": { "title": "Cursor", "type": "string" }, "charged": { "const": false, "title": "Charged", "type": "boolean" }, "next_check_after_s": { "title": "Next Check After S", "type": "integer" } }, "required": [ "status", "changed", "count", "items", "cursor", "charged", "next_check_after_s" ], "title": "NoChange", "type": "object" } ], "title": "Data" }, "meta": { "additionalProperties": true, "title": "Meta", "type": "object" } }, "required": [ "ok", "schema_version", "generated_at", "t", "coverage", "data", "meta" ], "title": "RiskEnvelope", "type": "object" } }, { "resource": "https://api.loopholetape.com/v1/check/watchlist", "route_template": "GET /v1/check/watchlist", "method": "GET", "mimeType": "application/json", "summary": "Check up to five pump.fun mints for $0.01 total", "description": "One payment checks one to five caller-selected pump.fun mints for observed creator exits, bundle selling, drains and migration state, with compact concentration/flow measurements and timestamped evidence. Every mint must have full coverage and feed lag <= 5 s; an unavailable batch is unpaid. Optional cursor: no new watched events is unpaid. Use /v1/check/watch for free update availability. Price is $0.01 total, not per mint. Findings describe observations, not predictions. Exact signed-payment retry cache: 10 minutes.", "price": "$0.01", "price_usd": 0.01, "accepts": [ { "scheme": "exact", "network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", "amount": "10000", "payTo": "9HkwyUhDMyjbpSpnyu5xuZ9vRaFQeajnJsavhie7XcsT", "maxTimeoutSeconds": 60, "extra": { "feePayer": "CjNFTjvBhbJJd2B5ePPMHRLx1ELZpa8dwQgGL727eKww" } }, { "scheme": "exact", "network": "eip155:8453", "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", "amount": "10000", "payTo": "0x25d408eF54e60F3006bD13d5A040d525E2F359c2", "maxTimeoutSeconds": 60, "extra": { "name": "USD Coin", "version": "2" } } ], "input": { "path_params": null, "query": { "type": "object", "properties": { "mints": { "type": "string", "maxLength": 224, "example": "73sfnFgqQzpSRZSimCC4sxpubqghRGYewYLmiUH2pump", "description": "One to five distinct mint addresses, comma-separated (MCP accepts an array)." }, "cursor": { "type": [ "string", "null" ], "maxLength": 1024, "description": "Optional opaque watch cursor for these exact mints; no new watched events returns an unpaid result." } }, "required": [ "mints" ] } }, "output_example": { "ok": true, "schema_version": "2.0", "coverage": "full", "data": { "status": "flags_observed", "result_id": "risk_example", "count": 1, "items": [ { "mint": "73sfnFgqQzpSRZSimCC4sxpubqghRGYewYLmiUH2pump", "status": "flags_observed", "lifecycle": "live_curve", "risk_label": "rug_flagged", "findings": [ { "code": "creator_sold", "first_seen_at": 1788990000, "evidence": { "tokens_share": 0.12 } } ], "snapshot_slot": 445000001, "last_trade_at": 1788990001, "concentration": { "top5_share": 0.51, "dev_share": 0.03, "bundle_share": 0.2, "insider_share": 0.1 }, "buyer_flow": { "unique_buyers_60s": 12, "buys_60s": 18, "sells_60s": 6, "net_sol_60s": 0.2, "inflow_stalled": false }, "curve": { "rs_sol": 5.0, "peak_rs_sol": 6.0, "drawdown_from_peak": 0.1667, "graduated": null }, "full_card_url": "https://api.loopholetape.com/v1/mint/73sfnFgqQzpSRZSimCC4sxpubqghRGYewYLmiUH2pump" } ], "cursor": "opaque-watch-cursor", "watch_events": [ "creator_sold", "bundle_dumped", "curve_drained", "pool_drained", "curve_closed_low", "migrate_below_grad", "lifecycle_transition" ] } }, "output_example_thin": null, "latency_ms": { "full": null }, "freshness_s": { "full": 5 }, "mcp_tool": "check_watchlist_risk", "output_schema": { "properties": { "ok": { "const": true, "title": "Ok", "type": "boolean" }, "schema_version": { "const": "2.0", "title": "Schema Version", "type": "string" }, "generated_at": { "title": "Generated At", "type": "string" }, "t": { "title": "T", "type": "number" }, "coverage": { "const": "full", "title": "Coverage", "type": "string" }, "data": { "anyOf": [ { "properties": { "status": { "enum": [ "flags_observed", "no_flags_observed" ], "title": "Status", "type": "string" }, "result_id": { "title": "Result Id", "type": "string" }, "count": { "maximum": 5, "minimum": 1, "title": "Count", "type": "integer" }, "items": { "items": { "properties": { "mint": { "title": "Mint", "type": "string" }, "status": { "enum": [ "flags_observed", "no_flags_observed" ], "title": "Status", "type": "string" }, "lifecycle": { "title": "Lifecycle", "type": "string" }, "risk_label": { "title": "Risk Label", "type": "string" }, "findings": { "items": { "properties": { "code": { "title": "Code", "type": "string" }, "first_seen_at": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "First Seen At" }, "evidence": { "additionalProperties": true, "title": "Evidence", "type": "object" } }, "required": [ "code", "first_seen_at", "evidence" ], "title": "Finding", "type": "object" }, "title": "Findings", "type": "array" }, "snapshot_slot": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "description": "Latest observed slot for this mint, not the slot of every finding.", "title": "Snapshot Slot" }, "last_trade_at": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Last Trade At" }, "concentration": { "properties": { "top5_share": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Top5 Share" }, "dev_share": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Dev Share" }, "bundle_share": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Bundle Share" }, "insider_share": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Insider Share" } }, "required": [ "top5_share", "dev_share", "bundle_share", "insider_share" ], "title": "Concentration", "type": "object" }, "buyer_flow": { "properties": { "unique_buyers_60s": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Unique Buyers 60S" }, "buys_60s": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Buys 60S" }, "sells_60s": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "title": "Sells 60S" }, "net_sol_60s": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Net Sol 60S" }, "inflow_stalled": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Inflow Stalled" } }, "required": [ "unique_buyers_60s", "buys_60s", "sells_60s", "net_sol_60s", "inflow_stalled" ], "title": "BuyerFlow", "type": "object" }, "curve": { "properties": { "rs_sol": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Rs Sol" }, "peak_rs_sol": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Peak Rs Sol" }, "drawdown_from_peak": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Drawdown From Peak" }, "graduated": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Graduated" } }, "required": [ "rs_sol", "peak_rs_sol", "drawdown_from_peak", "graduated" ], "title": "Curve", "type": "object" }, "full_card_url": { "title": "Full Card Url", "type": "string" } }, "required": [ "mint", "status", "lifecycle", "risk_label", "findings", "snapshot_slot", "last_trade_at", "concentration", "buyer_flow", "curve", "full_card_url" ], "title": "CheckItem", "type": "object" }, "maxItems": 5, "minItems": 1, "title": "Items", "type": "array" }, "cursor": { "title": "Cursor", "type": "string" }, "watch_events": { "items": { "type": "string" }, "title": "Watch Events", "type": "array" } }, "required": [ "status", "result_id", "count", "items", "cursor", "watch_events" ], "title": "CheckData", "type": "object" }, { "properties": { "status": { "const": "no_new_events", "title": "Status", "type": "string" }, "changed": { "const": false, "title": "Changed", "type": "boolean" }, "count": { "const": 0, "title": "Count", "type": "integer" }, "items": { "items": {}, "maxItems": 0, "title": "Items", "type": "array" }, "cursor": { "title": "Cursor", "type": "string" }, "charged": { "const": false, "title": "Charged", "type": "boolean" }, "next_check_after_s": { "title": "Next Check After S", "type": "integer" } }, "required": [ "status", "changed", "count", "items", "cursor", "charged", "next_check_after_s" ], "title": "NoChange", "type": "object" } ], "title": "Data" }, "meta": { "additionalProperties": true, "title": "Meta", "type": "object" } }, "required": [ "ok", "schema_version", "generated_at", "t", "coverage", "data", "meta" ], "title": "RiskEnvelope", "type": "object" } } ], "free": [ { "url": "https://api.loopholetape.com/v1/check/coverage", "description": "free coverage and freshness check for one to five mints; quotes single and batch prices" }, { "url": "https://api.loopholetape.com/v1/check/watch", "description": "free availability of new risk/lifecycle events for a watchlist; opaque cursor, no event details" }, { "url": "https://api.loopholetape.com/", "description": "this index" }, { "url": "https://api.loopholetape.com/health", "description": "feed health: seconds behind the chain, last slot, mints tracked, counters" }, { "url": "https://api.loopholetape.com/v1/market/regime", "description": "market-wide regime meter: launch rate, mayhem share, buy/sell flow, fail share, migrations vs true graduations, rug flags (free)" }, { "url": "https://api.loopholetape.com/v1/sample/launches", "description": "free 3-item sample of /v1/launches/recent, delayed >= 300 s" }, { "url": "https://api.loopholetape.com/v1/sample/rugs", "description": "free 3-item sample of /v1/rugs/recent, delayed >= 300 s" }, { "url": "https://api.loopholetape.com/v1/sample/mint", "description": "free full risk card of one mint aged >= 300 s (the exact paid shape)" }, { "url": "https://api.loopholetape.com/v1/x402/resources", "description": "machine-readable list of paid resources: prices, payment terms, input schema, output example" }, { "url": "https://api.loopholetape.com/v1/labels", "description": "semantics of every label, flag and field (coverage, status, risk_label, confidence, rug flags, history, rhc)" }, { "url": "https://api.loopholetape.com/v1/rhc/regime", "description": "Robinhood Chain (Pons V2) regime meter: launches/h, graduations/h and rate, median launch-to-graduation seconds, curve buys/sells per minute, unique buyers (free)" }, { "url": "https://api.loopholetape.com/.well-known/x402", "description": "x402 discovery manifest (IETF draft-hawkins-x402-dns-discovery + x402scan shapes)" }, { "url": "https://api.loopholetape.com/openapi.json", "description": "OpenAPI 3 schema with x-payment-info per paid operation" }, { "url": "https://api.loopholetape.com/llms.txt", "description": "plain-text description for LLM agents (llms.txt convention)" }, { "url": "https://api.loopholetape.com/.well-known/agent-card.json", "description": "A2A agent card (skills = these routes; payment over HTTP/MCP with x402)" }, { "url": "https://api.loopholetape.com/a2a", "description": "A2A JSON-RPC endpoint: message/send answers with the catalog, payment terms and the exact call for the skill you name" }, { "url": "https://api.loopholetape.com/.well-known/mcp-server-card", "description": "MCP server card (SEP-2127 shape): remote endpoint, protocol versions, payment summary" }, { "url": "https://api.loopholetape.com/.well-known/agents.json", "description": "agents.json manifest: OpenAPI source plus multi-step flows (coverage -> check, watch -> check, launches -> card)" }, { "url": "https://api.loopholetape.com/agents.txt", "description": "agents.txt announcement: protocols x402, MCP endpoint, A2A card" }, { "url": "https://api.loopholetape.com/.well-known/api-catalog", "description": "RFC 9727 api-catalog linkset" }, { "url": "https://api.loopholetape.com/.well-known/security.txt", "description": "RFC 9116 security contact" }, { "url": "https://api.loopholetape.com/sitemap.xml", "description": "sitemap of the public documents" }, { "url": "https://api.loopholetape.com/mcp", "description": "MCP server (streamable HTTP, stateless, JSON responses); paid tools use x402 over MCP" }, { "url": "https://api.loopholetape.com/terms", "description": "terms of use" } ], "mcp": { "endpoint": "https://api.loopholetape.com/mcp", "transport": "streamable-http", "tools": [ "mint_risk_card", "recent_launches", "recent_rugs", "recent_graduations", "creator_reputation", "wallet_profile", "rhc_recent_launches", "rhc_curve_card", "check_pumpfun_risk", "check_watchlist_risk", "catalog", "health", "market_regime", "sample_mint", "rhc_regime", "check_coverage", "watchlist_updates" ] }, "labels": "https://api.loopholetape.com/v1/labels", "llms": "https://api.loopholetape.com/llms.txt", "openapi": "https://api.loopholetape.com/openapi.json", "updated": "2026-09-11T01:04:52Z" }