Live Launches & Graduations
The whole token lifecycle on Robinhood Chain, pushed the moment it happens. Three things arrive on this one socket:
- Launches - a token appears on any launchpad: Pons, Flap, Bags, o1, Pools.trade, PAIR, Long, letscash, Varo or Virtuals.
- Graduations - a Pons or Flap curve sells out and the token moves to its permanent pool.
- New Uniswap v4 pools - including tokens launched straight on Uniswap, without a curve.
Free, no key, no account.
wss://api.shrine.trade/rh/api/launches/ws
Try it
Pick what you want and connect. You'll get the most recent event immediately, then new ones as they happen.
Copy this
Click the launchpads you want - the URL updates.
- JavaScript
- Python
const ws = new WebSocket("wss://api.shrine.trade/rh/api/launches/ws");
ws.onmessage = (e) => {
const t = JSON.parse(e.data);
// t.type: new_launch, graduated or new_pool
console.log(JSON.stringify(t, null, 2));
};
Save it as launches.js and run node launches.js - no packages needed (Node 22+).
import json
from websockets.sync.client import connect
with connect("wss://api.shrine.trade/rh/api/launches/ws") as ws:
for raw in ws:
t = json.loads(raw)
# t["type"]: new_launch, graduated or new_pool
print(json.dumps(t, indent=2))
Save it as launches.py, pip install websockets, then python launches.py.
What you get
On connect you're sent the single most recent event so the screen isn't blank, then everything new as it happens.
Each message has a type and a protocol:
type | protocol | Means |
|---|---|---|
new_launch | PONS | A token launched on the Pons curve - tradeable immediately. |
new_launch | FLAP, BAGS, O1, POOLS_TRADE, LETSCASH, PAIR, LONG, VARO, VIRTUALS | A token launched on that launchpad. Where the launch opened a Uniswap v4 pool, the pool key rides along (poolId, currency0, currency1, fee, tickSpacing, hooks); a Bags launch carries its curve. |
graduated | UNISWAP_V4 | A Pons curve sold out; the token moved to its Uniswap v4 pool. |
graduated | FLAP | A Flap curve sold out; the token moved to its Uniswap v2 pair. |
new_pool | UNISWAP_V4 | A Uniswap v4 pool was created. Includes graduations and tokens launched directly on Uniswap. When the pool carries a launchpad's hook, launchpad names it (BAGS, say). |
Filter with ?protocols=PONS,FLAP,BAGS - any comma-separated set of the names above (omit it for everything), or use the picker above.
Fields that don't apply to an event are simply absent, so check type first.
{
"type": "new_launch",
"protocol": "PONS",
"token": "0x84BD8478c0…",
"curve": "0x2ffCc8d7…",
"deployer": "0x1a2b3c…",
"name": "Tollbooth",
"symbol": "TOLLBOOTH",
"pairToken": "ETH",
"launchConfigId": 0,
"graduationThreshold": "4200000000000000000",
"uri": "ipfs://bafy…",
"description": "the greenest coin on Robinhood Chain",
"socials": {
"twitter": "https://x.com/grene",
"telegram": "", "discord": "", "website": "", "farcaster": ""
},
"blockNumber": 50952986,
"txHash": "0x…",
"timestamp": 1756654321
}
uri, description and socials come off the token contract itself - Pons stores them on-chain, so the creator's image URI and links arrive with the event and there's nothing extra to fetch.
A new_pool event carries poolId, currency0, currency1, fee, tickSpacing and hooks instead. A hooks of 0x0000…0000 means a plain Uniswap pool with no Pons hook - i.e. someone launched directly on Uniswap rather than through a curve.
Pons has sniper protection and taxes buys for about 3 seconds after a launch, starting near 99% and decaying to zero. Buying the moment a launch appears in this feed hands over almost your entire order as tax.
Notes
- Reconnect on drop. Long-lived sockets die; reconnect and you're re-seeded with the recent launches, so you won't miss much.
- One subscription per IP. A second launch-feed connection from the same address is refused with
too_many_connections. One socket with no filter carries everything, so you need no more; the data stream is a separate kind and can be open alongside it. - Nothing is stored. This is a live feed, not an archive - there's no history endpoint and no backfill.