Head-start measurement, caveats and payload verified 2026-08-28.
Solana API · sniper
Every new pump.fun token, reconstructed from the shred stream (Yellowstone SubscribeDeshred) and pushed ~500–800 ms before confirmation— measured in production against our own confirmed-stream alerts. Each alert carries the deployer's reputation so you can decide in the same millisecond whether it is worth a priority fee. About 1–3 % of detected deploys never settle; the payload says confidence: "deshred" so you never forget it.
WS sniper:deploys · webhook sniper:deploy · GET /api/v1/sniper/recent · x402 /api/x402/sniper/recent ($0.01)
The numbers
Measured, not marketed.
vs confirmed-stream alerts
shreds that never confirm
dual-region delivery confirm
unverified → confirmed / corrected
How it works
A validator gossips a block as shreds before it is voted on. Yellowstone's SubscribeDeshred reassembles transactions from those shreds; we consume it in two regions, keep only pump.fun bonding-curve interactions, and push the create the moment it is reconstructed. Detection is restart-safe and deployer enrichment is served from an in-memory cache so the alert never waits on a database.
1 · Detect
detection_confirmed marks a dual-region confirm. No other launchpad is covered pre-confirmation.2 · Enrich
3 · Correct
attribution_status: corrected) while the WebSocket push stays pre-confirmation by design.Honest caveats
These are required by the deshred contract and repeated in the payload.
Abandonment
No execution metadata
meta. The mint, deployer and signature are always present; anything derived from execution (dev buy size, initial reserves) is not, and is not invented.Attribution
attribution_status is unverified for rows younger than ~15 min (or when no confirmable create exists), then confirmed or corrected. Distinct from detection_confirmed, which is the delivery confirm.Footprint timing
data_available: false means outside the capture window — not zero snipes. Use it for post-hoc auditing, not the entry decision.Tier policy
Curation runs per deploy at delivery time across REST, WebSocket and webhooks, so a PRO subscriber cannot widen past elite/good through a filter or a stale rule.
| Capability | PRO · €43/mo | ULTRA · €131/mo |
|---|---|---|
| Deployer tiers received | elite + good only | every tier, incl. unranked ("all" scope) |
| GET /sniper/recent | yes (curated) | yes |
| GET /sniper/by-deployer/{wallet} | — | yes |
| Custom deployer watchlist (max 50) | — | yes — watchlist scope overrides tier on REST, WS and webhooks |
| WS sniper:deploys | yes (curated per message) | yes |
| Webhook sniper:deploy | yes (curated at delivery) | yes |
| Filters | since, deployer_tier, min_bond_rate, limit 1–200 | same + watchlist=true / sniper_scope: "watchlist" |
Payload
The webhook / WebSocket event and the REST row share the core fields; footprint, attribution and confirmation fields are REST-only because they need settled data.
| Field | Meaning |
|---|---|
| mint · name · symbol | The new token. Always present. |
| deployer / deployer_wallet | The deployer wallet (same value on both keys — parity between the event and the REST row). |
| signature · slot · detected_at · detection_region | The create transaction as seen in the shred stream, the slot, when and where we saw it. |
| confidence: "deshred" | Explicit on every push: this is pre-execution. Treat it as buy intent observed, not a guaranteed deploy. |
| deployer_tier | elite · good · moderate · rising · cold · unranked — from the reputation engine over every pump.fun deployer we have indexed. |
| deployer_bond_rate · deployer_total_bonded | Lifetime graduation rate and count for the deployer. |
| deployer_recent | Last-10 outcome bitmap, newest first — e.g. BBBBBFBBB (bonded / failed). A string of D's is a near-certain skip. |
| deployer_runner_rate · deployer_labeled_tokens | Fraction of the deployer's labeled tokens that ran (peak ≥ 60 min after deploy) and the denominator — gate on labeled_tokens ≥ 3 before trusting the rate. |
| footprint (REST) | Slot-window snipe rollup over slots deploy−1..+3: buys, buyers, sol, supply_pct, sniper_wallet_buys, data_available, as_of. null for deploys younger than the 10-minute settle window. |
| attribution_status · attribution_checked_at (REST) | The deshred-speed deployer attribution is a heuristic, cross-checked every 15 min against the confirmed create: unverified → confirmed or corrected (deployer re-snapshotted from the confirmed create; the original heuristic wallet is kept server-side). |
| detection_confirmed · confirmed_on_chain · confirmed_at (REST) | Dual-region delivery confirm, and whether/when the deploy settled on-chain. |
{
"mint": "…pump", "name": "…", "symbol": "…",
"deployer": "Aqje…SMXk", "deployer_wallet": "Aqje…SMXk",
"signature": "5Kd…", "slot": 371254112,
"detected_at": "2026-08-28T11:56:51.205Z", "detection_region": "Frankfurt",
"confidence": "deshred",
"deployer_tier": "good", "deployer_bond_rate": 0.62, "deployer_total_bonded": 31,
"deployer_recent": "BBBBBFBBBB", "deployer_runner_rate": 0.41, "deployer_labeled_tokens": 17
}How to consume
Live alerts belong on the WebSocket or a webhook — pushed frames never spend quota (see /streaming). The read API is the corrected record for backtests and post-hoc auditing.
{ "type": "subscribe", "channels": ["sniper:deploys"],
"filters": { "deployer_tier": ["elite", "good"] } }
// ULTRA, watchlist only:
{ "type": "subscribe", "channels": ["sniper:deploys"],
"filters": { "sniper_scope": "watchlist" } }{ "url": "https://your.bot/hooks/deploys",
"events": ["sniper:deploy"],
"filters": { "deployer_tier": ["elite"] } }
// HMAC-SHA256 header x-madeonsol-signature · retries 5s / 30s / 2mincurl "https://madeonsol.com/api/v1/sniper/recent?deployer_tier=elite&min_bond_rate=0.5&limit=100" \
-H "Authorization: Bearer msk_YOUR_KEY"
# ULTRA: ?watchlist=true · GET /api/v1/sniper/by-deployer/{wallet}
# ULTRA: POST /api/v1/sniper/watchlist {"wallets":["…"],"label":"tier-1"}// TypeScript
const { deploys } = await client.sniper.recent({ limit: 20, min_bond_rate: 0.5 });
const stream = await client.stream.connect();
stream.on("sniper:deploy", (d) => console.log(d.symbol, d.deployer_tier, d.deployer_recent));
# Python
deploys = client.sniper_recent(limit=20, min_bond_rate=0.5)
// Rust
let res = client.sniper.recent(&SniperRecentParams::default()).await?;MCP: tool madeonsol_sniper_recent in mcp-server-madeonsol. Keyless agents: GET /api/x402/sniper/recent at $0.01 USDC per call (elite/good feed).
Where this sits
If your edge is your own decoding, buy the shred stream from an RPC provider (Helius, Shyft, Triton) and reconstruct creates yourself — that is the flexible, unmetered path and it will always be a few milliseconds ahead of any vendor that does the decoding for you. This feed is for teams that would rather spend those milliseconds on the reputation check than on maintaining a deshred consumer: the tier, bond rate, last-10 bitmap and runner rate are the part nobody else attaches at shred speed, and among the memecoin data APIs we audited on 2026-08-16 none sold a pre-confirmation deploy feed with deployer reputation on it.
FAQ
More for developers
Token surge & revival alerts
Momentum fires with risk flags and out-of-sample +1h outcomes.
WebSocket streaming
seq, replay, heartbeat, 19 channels — pushed events don't spend quota.
MCP servers & SDKs
Two MCP servers, 14 packages, one free key.
Full surface: Solana API overview, Robinhood Chain API, endpoint docs and the 9-provider data API comparison.
Start building
Elite/good deployers on PRO (€43/month); every tier, custom watchlists and by-deployer audits on ULTRA (€131/month).