{"service":"Paxie.Matrix Data API","schemaVersion":1,"availability":{"signal":"Known when the burst fires. Safe to use as a feature.","signal+seconds":"Filled 5-60 s after the signal, computed from chain state as of the signal block. Safe as a feature once present; null until then.","signal+30m":"Outcome. Exists only after the scoring window closes (Robinhood 30 min; Solana graduation or 20 min). Never use as a feature: a backtest that does uses the future.","now":"Current state as of the response's generatedAt (or the row's checkedAt). Not tied to a signal."},"timestamps":"Every timestamp (at, generatedAt, lastSwapAt, checkedAt, lastBuyAt, lastSeenAt, mins[][0]) is epoch milliseconds, UTC.","lookAhead":"Backtesting? Use only signal and signal+seconds fields as inputs. outcome.* is the label. Rows are appended at signal time and their outcome is filled in place 30 minutes later, so a row fetched from /v1/rh/bursts/history already carries its future.","objects":{"rhBurst":{"about":"Robinhood Chain buyer burst: net ETH buying into one ETH-quoted Uniswap v4 or v3 pool within 60 s while buying is still building.","fields":[{"name":"at","type":"integer","avail":"signal","desc":"Signal time, epoch ms (when our scout saw the threshold crossed)."},{"name":"token","type":"string","avail":"signal","desc":"Token contract address."},{"name":"pool","type":"string","avail":"signal","desc":"Pool id: v4 PoolId (bytes32) or v3 pool address."},{"name":"tier","type":"string","avail":"signal","desc":"main: >= 1 ETH net in and >= 12 buy swaps in 60 s, still buying over the last 15 s, pool 5 min-6 h old. lite: >= 0.5 ETH and >= 8 buys (fires earlier, noisier). refire: main thresholds again on the same pool >= 30 min after its last burst. old: first main-threshold burst on a 6-24 h pool.","enum":["main","lite","refire","old"]},{"name":"dex","type":"string","avail":"signal","desc":"Uniswap version of the pool.","enum":["v4","v3"]},{"name":"shape","type":"string","avail":"signal","desc":"scripted: >= 5 buy swaps of an identical size inside the window (one crew splitting a bag). spread: the 3 largest buys are < 50% of the buying. other: neither. v3: a v3-pool burst (tracked as its own lane, shape not classified).","enum":["scripted","spread","other","v3"]},{"name":"inflowEth","type":"number","avail":"signal","desc":"Net ETH into the pool over the window (buys minus sells)."},{"name":"buys","type":"integer","avail":"signal","desc":"Buy swaps in the window."},{"name":"sells","type":"integer","avail":"signal","desc":"Sell swaps in the window."},{"name":"windowSec","type":"integer","avail":"signal","desc":"Window length in seconds (60)."},{"name":"poolAgeMin","type":"number","avail":"signal","desc":"Minutes since the pool was created."},{"name":"sameSizeMax","type":"integer","avail":"signal","desc":"Largest count of buy swaps with an identical ETH size in the window."},{"name":"top3Share","type":"number","avail":"signal","desc":"Share of the window's buy ETH from its 3 largest buy swaps (0-1)."},{"name":"sizeCV","type":"number","avail":"signal","desc":"Coefficient of variation of buy sizes (stdev / mean). Low = uniform, scripted-looking."},{"name":"buyers","type":"integer","avail":"signal+seconds","desc":"Distinct buyer wallets (tx senders) in the window. Main tier only; null otherwise."},{"name":"repeatBuyers","type":"integer","avail":"signal+seconds","desc":"Of those, wallets seen in earlier bursts. Main tier only."},{"name":"lp","type":"object","avail":"signal+seconds","desc":"Rug check: who held the pool's liquidity at the signal block. v4 main and lite bursts; null otherwise. See lp fields."},{"name":"outcome","type":"object","avail":"signal+30m","desc":"Scored 30 minutes after the signal. { scored: false } until then. See rhOutcome fields."}]},"lp":{"about":"Rug check at the signal block. Liquidity-weighted shares of who held the pool's LP position NFTs. insider = the wallet that created the pool or sent an LP add; they can pull it whenever they like.","fields":[{"name":"class","type":"string","avail":"signal+seconds","desc":"held: the creator / LP adder held >= 50% of the liquidity (the rug tell). safe: burned, launchpad or locker contracts, or other wallets held >= 50%. unknown: the LP owner could not be read; never treat as safe.","enum":["held","safe","unknown"]},{"name":"insiderShare","type":"number","avail":"signal+seconds","desc":"Share of liquidity whose LP NFT the pool creator / LP adder still held (0-1). On Robinhood Chain >= 0.5 is the rug tell: most such pools are pulled within ~10 minutes of liquidity going in."},{"name":"burnedShare","type":"number","avail":"signal+seconds","desc":"Share whose LP NFT was sent to the zero or dead address (cannot be pulled)."},{"name":"contractShare","type":"number","avail":"signal+seconds","desc":"Share added by a contract other than Uniswap's position manager (a launchpad or locker)."},{"name":"otherShare","type":"number","avail":"signal+seconds","desc":"Share held by any other wallet."},{"name":"unknownShare","type":"number","avail":"signal+seconds","desc":"Share whose LP NFT owner could not be read."},{"name":"lpAgeMin","type":"number","avail":"signal+seconds","desc":"Minutes from the first liquidity add to the signal."},{"name":"estimated","type":"boolean","avail":"signal+seconds","desc":"true on bursts before Oct 8 2026 21:10 PT, profiled afterwards with the signal block estimated from block time (minute-level precision)."}]},"rhOutcome":{"about":"What happened in the 30 minutes after a Robinhood burst, priced from the pool's own swaps. 2% round-trip costs included in every return.","fields":[{"name":"scored","type":"boolean","avail":"signal+30m","desc":"false until the 30-minute window closes."},{"name":"ret30m","type":"number","avail":"signal+30m","desc":"Return holding from the signal price to 30 minutes (-1 = worthless)."},{"name":"peakRet","type":"number","avail":"signal+30m","desc":"Best price in the window vs the signal price. Not reachable in practice: you do not know the top."},{"name":"ruleRet","type":"number","avail":"signal+30m","desc":"Return under our live exit rule (fade 0.5 ETH from the high-water inflow, or 60 s without a new price high; -15% stop)."},{"name":"byRule","type":"object","avail":"signal+30m","desc":"Return, exit reason and exit second under each exit rule we test."},{"name":"rug","type":"object","avail":"signal+30m","desc":"{ atSec, lpRemoved }: >= 80% of the pool's liquidity was removed atSec after the signal. Every exit rule that had not fired by then scores -100% (minus costs). null = no rug in the window."}]},"solBurst":{"about":"Solana pump.fun bonding-curve buyer burst: >= 10 SOL net in within 60 s, token >= 5 min old, curve 25-55% full, still buying. Tokens 5 min to 4 h old that show curve progress are watched.","fields":[{"name":"at","type":"integer","avail":"signal","desc":"Signal time, epoch ms."},{"name":"mint","type":"string","avail":"signal","desc":"Token mint."},{"name":"inflowSol","type":"number","avail":"signal","desc":"Net SOL into the curve over the window."},{"name":"windowSec","type":"integer","avail":"signal","desc":"Window length in seconds."},{"name":"curveFrom","type":"number","avail":"signal","desc":"Curve fill at the start of the window (0-1)."},{"name":"curveAt","type":"number","avail":"signal","desc":"Curve fill at the signal (0-1)."},{"name":"tokenAgeMin","type":"number","avail":"signal","desc":"Minutes since the token launched."},{"name":"anatomy","type":"object","avail":"signal+seconds","desc":"Sampled bursts only. See solAnatomy fields. null when not sampled."},{"name":"outcome","type":"object","avail":"signal+30m","desc":"Scored at graduation or 20 minutes. { scored: false } until then. See solOutcome fields."}]},"solAnatomy":{"about":"Who bought inside a Solana burst window (sampled bursts).","fields":[{"name":"buys","type":"integer","avail":"signal+seconds","desc":"Buy trades in the window."},{"name":"buyers","type":"integer","avail":"signal+seconds","desc":"Distinct buyer wallets."},{"name":"sameSlotMax","type":"integer","avail":"signal+seconds","desc":"Most buys landed in one slot (bundling)."},{"name":"bundledShare","type":"number","avail":"signal+seconds","desc":"Share of buy SOL that landed in multi-buy slots (0-1)."},{"name":"sameSizeMax","type":"integer","avail":"signal+seconds","desc":"Largest count of buys with an identical size."},{"name":"top3Share","type":"number","avail":"signal+seconds","desc":"Share of buy SOL from the 3 largest buys (0-1)."},{"name":"holdersTop10","type":"number","avail":"signal+seconds","desc":"Share of supply held by the top 10 holders (0-1)."},{"name":"holderTop1","type":"number","avail":"signal+seconds","desc":"Share of supply held by the largest holder (0-1)."},{"name":"repeatBuyers","type":"integer","avail":"signal+seconds","desc":"Buyers seen in earlier Solana bursts."}]},"solOutcome":{"about":"What happened after a Solana burst: the curve path to graduation or 20 minutes (price = curve SOL squared). 2.5% round-trip costs included.","fields":[{"name":"scored","type":"boolean","avail":"signal+30m","desc":"false until graduation or 20 minutes."},{"name":"graduated","type":"boolean","avail":"signal+30m","desc":"The curve completed inside the window."},{"name":"gradMin","type":"number","avail":"signal+30m","desc":"Minutes from the signal to graduation; null if it did not graduate."},{"name":"peakRet","type":"number","avail":"signal+30m","desc":"Best curve price in the window vs the signal."},{"name":"gradRet","type":"number","avail":"signal+30m","desc":"Return at graduation; null if it did not graduate."},{"name":"ret20m","type":"number","avail":"signal+30m","desc":"Return at the 20-minute close; null if it graduated first."},{"name":"ruleRet","type":"number","avail":"signal+30m","desc":"Return under our live abandon-ship exit rule."},{"name":"nonStandardCurve","type":"boolean","avail":"signal+30m","desc":"true when the curve reserves were outside the standard pump.fun range (prices less reliable)."},{"name":"byRule","type":"object","avail":"signal+30m","desc":"Return, exit reason and exit second under each exit rule we test."}]},"pool":{"about":"An ETH-quoted Uniswap v4 or v3 pool on Robinhood Chain created in the last 24 h.","fields":[{"name":"id","type":"string","avail":"now","desc":"v4 PoolId or v3 pool address."},{"name":"dex","type":"string","avail":"now","desc":"v4 or v3.","enum":["v4","v3"]},{"name":"token","type":"string","avail":"now","desc":"Token address."},{"name":"createdBlock","type":"integer","avail":"now","desc":"Block the pool was created in."},{"name":"ageMin","type":"number","avail":"now","desc":"Minutes since creation."},{"name":"lastPx","type":"number","avail":"now","desc":"Last swap price, ETH per raw token unit (scale by the token's decimals)."},{"name":"liqEth","type":"number","avail":"now","desc":"ETH-side liquidity estimate at the last swap."},{"name":"lastSwapAt","type":"integer","avail":"now","desc":"Time of the last swap, epoch ms."},{"name":"net60m","type":"number","avail":"now","desc":"Net ETH in over the last 60 minutes."},{"name":"buys60m","type":"integer","avail":"now","desc":"Buy swaps, last 60 minutes."},{"name":"sells60m","type":"integer","avail":"now","desc":"Sell swaps, last 60 minutes."},{"name":"fired","type":"array","avail":"now","desc":"Burst tiers that have fired on this pool (main, lite, refire, old).","items":{"type":"string"}}]},"rugProfile":{"about":"Rug check for one pool right now (GET /v1/rh/token/{addr}/rugcheck). Same reading as the per-burst lp object, taken at the latest block the scout had when it profiled the pool.","fields":[{"name":"pool","type":"string","avail":"now","desc":"v4 PoolId."},{"name":"token","type":"string","avail":"now","desc":"Token address."},{"name":"dex","type":"string","avail":"now","desc":"Always v4 (v3 LP ownership is not profiled)."},{"name":"poolAgeMin","type":"number","avail":"now","desc":"Pool age at the check, minutes."},{"name":"checkedAt","type":"integer","avail":"now","desc":"When this profile was taken, epoch ms. Active pools are re-profiled about every 10 minutes."},{"name":"block","type":"integer","avail":"now","desc":"Block the ownership was read at."},{"name":"class","type":"string","avail":"now","desc":"held / safe / unknown as on bursts, plus empty: no liquidity in the pool (never added, or already pulled).","enum":["held","safe","unknown","empty"]},{"name":"insiderShare","type":"number","avail":"now","desc":"Share of liquidity the creator / LP adder can pull (0-1)."},{"name":"burnedShare","type":"number","avail":"now","desc":"Share burned (cannot be pulled)."},{"name":"contractShare","type":"number","avail":"now","desc":"Share added by a launchpad or locker contract."},{"name":"otherShare","type":"number","avail":"now","desc":"Share held by other wallets."},{"name":"unknownShare","type":"number","avail":"now","desc":"Share whose LP NFT owner could not be read."},{"name":"lpAgeMin","type":"number","avail":"now","desc":"Minutes since the first liquidity add."},{"name":"lpAdds","type":"integer","avail":"now","desc":"Liquidity adds seen."},{"name":"creator","type":"string","avail":"now","desc":"Address that created the pool (Initialize tx sender)."}]},"walletLeader":{"about":"A Solana wallet whose pump.fun buys we replay as copy trades (GET /v1/sol/wallets/leaders). Replays use one fixed exit plan over a 60-minute price path; fees in; each capped at +100%.","fields":[{"name":"rank","type":"integer","avail":"now","desc":"Rank by evShrunk."},{"name":"wallet","type":"string","avail":"now","desc":"Wallet address (on-chain)."},{"name":"n","type":"integer","avail":"now","desc":"Replayed big buys (up to the last 60)."},{"name":"evShrunk","type":"number","avail":"now","desc":"Mean replay return per copy, shrunk toward the pooled mean with k pseudo-buys (see method.shrink)."},{"name":"evRaw","type":"number","avail":"now","desc":"Unshrunk mean replay return per copy."},{"name":"winShare","type":"number","avail":"now","desc":"Share of replays that ended positive."},{"name":"shadowed","type":"integer","avail":"now","desc":"Buys shadowed for 60 min (all sizes)."},{"name":"shadowHit","type":"number","avail":"now","desc":"Share of shadowed buys that hit +35% before -20%."},{"name":"lastBuyAt","type":"integer","avail":"now","desc":"Last buy we saw, epoch ms."},{"name":"sells","type":"object","avail":"now","desc":"The leader's own exits on the buys we followed: observed, sold, soldShare, medSoldSec, medSellGain (leader's gain at its first sell), soldWithin60sShare. null when none observed."}]},"crew":{"about":"A repeat buyer in Robinhood Chain bursts (GET /v1/rh/crews): a tx sender of buy swaps inside 3 or more burst windows.","fields":[{"name":"wallet","type":"string","avail":"now","desc":"Wallet address (on-chain)."},{"name":"bursts","type":"integer","avail":"now","desc":"Bursts it bought into."},{"name":"lastSeenAt","type":"integer","avail":"now","desc":"Last burst it bought into, epoch ms (minute precision)."},{"name":"lastSeenMinAgo","type":"integer","avail":"now","desc":"Minutes since then, at snapshot time."}]},"ponsCurve":{"about":"Rug check for a Pons launchpad bonding-curve token (class pons-curve on GET /v1/rh/token/{addr}/rugcheck): read from the curve contract by our worker. Pons launchpad bonding-curve token: it has no Uniswap pool and no LP to pull until the curve fills (4.2 ETH) and graduates. The risk on a curve is the creator or early insiders selling into it, not liquidity removal.","fields":[{"name":"curve","type":"string","avail":"now","desc":"The token's bonding-curve contract."},{"name":"creator","type":"string","avail":"now","desc":"Launch creator (TokenLaunched event)."},{"name":"launchBlock","type":"integer","avail":"now","desc":"Block the token launched in."},{"name":"ageMin","type":"number","avail":"now","desc":"Minutes since launch at checkedAt."},{"name":"progress","type":"number","avail":"now","desc":"Curve fill: ETH in the curve / the graduation threshold (0-1)."},{"name":"ethInCurve","type":"number","avail":"now","desc":"Real ETH held by the curve."},{"name":"thresholdEth","type":"number","avail":"now","desc":"ETH the curve must raise to graduate (4.2)."},{"name":"graduated","type":"boolean","avail":"now","desc":"The curve completed; the token now trades on a Uniswap v4 pool (the v4 rug check applies)."},{"name":"mcapUsd","type":"number","avail":"now","desc":"Curve spot price x supply, in USD."},{"name":"feeBps","type":"integer","avail":"now","desc":"Median fee the curve charged on its last 30 buys (basis points; early anti-snipe windows charge more)."},{"name":"checkedAt","type":"integer","avail":"now","desc":"When the curve was read, epoch ms."}]},"precall":{"about":"Pre-call context (GET /v1/rh/token/{addr}/precall): the pool's activity before a Robinhood call was posted, captured when our desk first saw the call.","fields":[{"name":"postedAt","type":"integer","avail":"signal","desc":"When the call was first posted, epoch ms."},{"name":"tracked","type":"boolean","avail":"signal","desc":"Our scout had the token's pool; false = the pre-post numbers are missing (run falls back to the DexScreener h1 change)."},{"name":"buys","type":"integer","avail":"signal","desc":"Buy swaps in the 10 minutes before the post."},{"name":"buyEth","type":"number","avail":"signal","desc":"ETH spent on those buys."},{"name":"sameBlockMaxTx","type":"integer","avail":"signal","desc":"Most buy txs in one block in that window."},{"name":"run60","type":"number","avail":"signal","desc":"Price at the post / price at the start of the hour before it (3 = up 3x)."},{"name":"ageAtCallMin","type":"number","avail":"signal","desc":"Token (pool) age when the call was posted, minutes."},{"name":"chg1h0","type":"number","avail":"signal","desc":"DexScreener 1-hour % change when we saw the call (fallback only)."},{"name":"wallets","type":"integer","avail":"signal+seconds","desc":"Distinct pre-post buyer wallets (tx senders) resolved; null until resolved."},{"name":"sameBlockWallets","type":"integer","avail":"signal+seconds","desc":"Most distinct wallets buying in one block before the post."},{"name":"walletList","type":"array","avail":"signal+seconds","desc":"The resolved buyer wallets (up to 40, on-chain addresses).","items":{"type":"string"}},{"name":"flags","type":"array","avail":"signal+seconds","desc":"Matching veto rules: run, young, cluster (see rules in the response).","items":{"type":"string"}}]},"verdict":{"about":"GET /v1/rh/token/{addr}/verdict: avoid / caution / ok from the rug check, liquidity pulls, pre-call flags and token age; the worst matching rule decides. Research, not advice.","fields":[{"name":"verdict","type":"string","avail":"now","desc":"avoid, caution or ok.","enum":["ok","caution","avoid"]},{"name":"reasons","type":"array","avail":"now","desc":"Every rule that matched, with its level."},{"name":"rug","type":"object","avail":"now","desc":"uniswap-v4-lp (class, insiderShare, pools, checkedAt) or pons-curve (progress, ethInCurve, creator); null when not profiled."},{"name":"precall","type":"object","avail":"signal+seconds","desc":"flags and the main pre-call numbers if the token was called; null otherwise."},{"name":"desk","type":"object","avail":"now","desc":"Our desk's last closed trade and first finished shadow on the token (paper unless mode says live)."},{"name":"tokenAgeMin","type":"number","avail":"now","desc":"Minutes since the token's oldest tracked pool (or its Pons launch) was created."}]},"solVerdict":{"about":"GET /v1/sol/token/{mint}/verdict: what our desk recorded on a Solana mint in the last 48 h. Research, not advice.","fields":[{"name":"safety","type":"object","avail":"now","desc":"Our safety gate (pass, fails) and the rugcheck.xyz numbers it read (attributed)."},{"name":"scouts","type":"object","avail":"now","desc":"Scout scores (0-1) and their composite."},{"name":"scanner","type":"object","avail":"now","desc":"Our grade from scanner-card fields (see GET /v1/scanner/{mint})."},{"name":"trader","type":"object","avail":"now","desc":"The head trader's action (enter / pass) and conviction; no thesis."},{"name":"shadows","type":"array","avail":"signal+30m","desc":"Shadow outcomes: ret1/ret5/ret15/ret60 from the shadow's start price, mfe / mae (max favourable / adverse excursion). Labels, not features."},{"name":"lastTrade","type":"object","avail":"signal+30m","desc":"Our last closed trade on the mint: book (main / explore), mode, retPct, exit."}]},"scannerGrade":{"about":"GET /v1/scanner/{mint}: our grade from scanner-bot holder data. Shares are 0-1; the most cautious reading across bots.","fields":[{"name":"grade","type":"string","avail":"now","desc":"A-F (see gradeRules).","enum":["A","B","C","D","F"]},{"name":"score","type":"number","avail":"now","desc":"100 minus penalties."},{"name":"fields.top10Pct","type":"number","avail":"now","desc":"Share of supply held by the top 10 holders."},{"name":"fields.topHolder1Pct","type":"number","avail":"now","desc":"Share held by the largest holder."},{"name":"fields.snipers / sniperPct","type":"number","avail":"now","desc":"Sniper wallets and their share."},{"name":"fields.bundlers / bundlePct","type":"number","avail":"now","desc":"Bundled-buy wallets and their share."},{"name":"fields.devLeftPct","type":"number","avail":"now","desc":"Share the dev still holds."},{"name":"fields.fresh1d / fresh7d","type":"number","avail":"now","desc":"Share held by wallets created in the last 1 / 7 days."},{"name":"fields.holders","type":"integer","avail":"now","desc":"Holder count."}]}},"envelope":"Every paid response carries chain, schemaVersion, generatedAt and ageSec (plus ethUsd + rules on Robinhood routes, solUsd + rule on Solana routes).","errors":{"400":"bad_address: the rugcheck addr is not a 0x + 40 hex address.","402":"payment_required: the PAYMENT-REQUIRED header carries price, asset (USDC), network and payTo. Sign and retry with PAYMENT-SIGNATURE.","404":"pool_not_tracked / token_not_tracked / v3_not_profiled / pool_too_old / not_profiled_yet: only ETH-quoted pools created in the last 24 h are tracked; the rug check covers v4 pools under 6 h old.","429":"rate_limited: free routes and /mcp are limited per IP; see Retry-After.","503":"warming_up: until the worker writes its first snapshot. data_stale: the data is older than 120 s (ageSec in the body). payments_not_live: the facilitator is not connected yet. Retry after the Retry-After seconds.","shape":"{ error, code, docs } on every 4xx/5xx (plus ageSec on data_stale, retryAfterSec on not_profiled_yet).","charging":"Errors come before payment: a request that would answer 400/404/503 gets that error straight away (charged: false), with no 402 challenge. Only a request that would answer 200 is asked to pay, and a paid request that still ends in 4xx/5xx is not settled: you only pay for a 200."},"freshness":"Robinhood and Solana data are rewritten every 20 s (≤30 s lag behind the chain); the scouts read the chain every ~6 s (pump.fun curves every 10-90 s by activity). Each response carries generatedAt and ageSec; paid routes refuse data older than 120 s with a 503 (not charged). Copy leaders are rebuilt hourly (stale after 3 h).","limits":"Paid endpoints: no rate limit beyond payment. /v1/sample: 30 requests per minute per IP. Other free routes: 120 per minute per IP. /mcp: 60 per minute per IP. History covers the last 24 h.","versioning":"Canonical paths start with /v1. The original paid paths (/rh/..., /sol/..., /snapshot) are also served unversioned; free doc paths redirect (301).","docs":{"openapi":"https://api.paxie.fun/v1/openapi.json","llms":"https://api.paxie.fun/llms.txt","stats":"https://api.paxie.fun/v1/stats"}}