Live Launches & Graduations
The whole token lifecycle on Flap, pushed the moment it happens. Two things arrive on this one socket:
- Launches - a token appears on the Flap bonding curve. Several hundred a day.
- Graduations - a curve sells out and the token moves to its permanent PancakeSwap pool.
Free, no key, no account.
wss://api.shrine.trade/bnb/api/launches/ws
Try it
Choose a filter and connect. The latest event arrives at once, and everything after it streams in live.
Copy this
Click Flap or PancakeSwap to choose what the script receives - the URL updates.
- JavaScript
- Python
const ws = new WebSocket("wss://api.shrine.trade/bnb/api/launches/ws");
ws.onmessage = (e) => {
const t = JSON.parse(e.data);
// t.type: new_launch or graduated
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/bnb/api/launches/ws") as ws:
for raw in ws:
t = json.loads(raw)
# t["type"]: new_launch or graduated
print(json.dumps(t, indent=2))
Save it as launches.py, pip install websockets, then python launches.py.
What you get
The first message after connecting is a replay of the most recent event, so a fresh client has something to show. After that, every message is new.
A message is classified by two fields, type and protocol:
type | protocol | Means |
|---|---|---|
new_launch | FLAP | A token launched on the Flap curve - tradeable immediately. |
graduated | PANCAKESWAP | A Flap curve sold out; the token moved to its PancakeSwap pool. |
Filter with ?protocols=FLAP or ?protocols=PANCAKESWAP (omit it for both), or use the picker above.
Optional fields are omitted rather than sent as null, so branch on type before reading anything else.
{
"type": "new_launch",
"protocol": "FLAP",
"token": "0x2f1952E00F6BA7655993120B8c41E5ab511e7777",
"name": "星际巨舰",
"symbol": "星际巨舰",
"creator": "0xF31b8fcD326e0aD7837af0aefed60cC71Db82595",
"quoteToken": "BNB",
"tokenType": "tax_v3",
"buyTaxBps": 1000,
"sellTaxBps": 1000,
"graduationSupply": "800000000000000000000000000",
"meta": "bafkreidrm6a6ieclmputpy2iw5wxqkpcttpapxidcxpl5z5lj…",
"metaUri": "https://ipfs.io/ipfs/bafkreidrm6a6ieclmputpy2iw5wxqkpcttpapxidcxpl5z5lj…",
"blockNumber": 120101041,
"txHash": "0x…",
"timestamp": 1788610321
}
tokenType, the tax and the quote asset come from Flap's Portal at the moment of the event, so a sniper can decide on a launch without another request: skip 10% sell taxes, take only BNB-priced tokens, only stock-priced ones, whatever the rule is. quoteToken is a ticker (BNB, USD1, NVDAB, TSLAB...) for every asset in Supported quote assets, and an address for a quote the API has no name for, such as another Flap token. meta is the IPFS CID of the creator's metadata JSON (image, description, socials); metaUri is the same thing through a gateway.
A graduated event carries pool (the PancakeSwap pool), liquidityTokens and liquidityQuote (what Flap put in it) instead.
Some launches cap what one wallet may buy on the curve, and most carry a tax. Both are in Token Info and in every quote from Buy & Sell, so a sniper that reads the quote before sending never overpays.
Notes
- Reconnect on drop. Long-lived sockets die; reconnect and you're re-seeded with the most recent launch, so you won't miss much.
- One socket per IP. A second is turned away with
too_many_connections. An unfiltered socket already carries every event, so one is enough.