Live token and pool data
The token and pool channels: the /tokens/:chain/:address or /pools/:chain/:address body, then the price as each trade lands, and the body again as it changes.
Subscribe to token with token, or to pool with pool. The first message after subscribed is the REST body (the token, the pool), and again whenever it changes. Between two bodies, tick messages carry what a trade changes at once.
Subscribe:
{"op":"subscribe","id":"t","channel":"token","chain":"solana","token":"So11111111111111111111111111111111111111112"}
{"op":"subscribe","id":"p","channel":"pool","chain":"solana","pool":"Czfq3xZZDmsdGdUyrNLtRhGc47cXcZtLG4crryfu44zE"}
| type | When | data |
|---|---|---|
token / pool | Right after subscribed; then when it changed, rebuilt at most every 5 s after a trade of the subject, and every 30 s regardless (windows roll without trades) | The REST body |
tick (token) | After a trade that moves the price or the latest trade time, at most 4 a second | price, latestTradeAt, marketCapUsd, fdvUsd |
tick (pool) | After a swap that moves the price, at most 4 a second | price: baseToken, quoteToken, usd, quote |
A tick replaces those fields of the latest body; the next body replaces it whole. The token's price follows the page's rule: the latest swap where the token was the base in its chart pool, worth at least $0.01 when priced. After resubscribed, a fresh body follows. Logo URLs are absolute, as over REST.
This is the way to follow one token's price. For many tokens, poll GET /prices (up to 100 a request) rather than subscribe to each.
Captured on a test instance: a token, trimmed to 1 pool and the 5m and 24h windows, then a trade:
{"type":"subscribed","id":"k1","channel":"token","chain":"evm:56","token":"0xa9fcda9bd321adeb7cbbbd30ef2dd0ed1d657777"}
{
"id": "k1",
"type": "token",
"data": {
"token": {
"address": "0xa9fcda9bd321adeb7cbbbd30ef2dd0ed1d657777",
"decimals": 18,
"symbol": "TAX",
"name": "Tax Token",
"firstSeenBlock": 1000002,
"totalSupply": "1000000000",
"circulatingSupply": "1000000000",
"supplyAt": 1790618262558,
"firstSeenAt": 1790546861920,
"createdAt": 1790546861920,
"createdTx": "0x4517764dd3b9782c02c5a640714b20335ea2585b394946c4b0f5f44bc1a7bf12",
"creator": "0x0f325bd174c70440fa62c31dce9f69d54baf717e",
"logo": null,
"description": null,
"socials": {
"website": null,
"twitter": null,
"telegram": null,
"discord": null,
"others": {}
},
"uri": null,
"security": {
"checkedAt": 1790618614169,
"flags": [
"buy_tax",
"sell_tax"
],
"honeypot": {
"likely": false,
"buyers": 8,
"sellers": 7,
"window": "24h",
"how": "Distinct wallets that bought, and that sold, in the last 24h (the transaction's sender), leaving out the token's creator and its pools' creators where Aurelia saw them. Likely a honeypot when 10+ wallets bought and none of them sold; not one once any sold"
},
"lp": {
"pool": "0x702e6533e0182381606adbe3ccbb77f682ccc58b",
"lockedShare": null,
"burnedShare": 1,
"how": "The pool is its own LP token: totalSupply() and balanceOf() of the zero and dead addresses at block 124557783. Locked LP is not counted: Aurelia has no trustworthy list of lockers"
},
"top10Share": 0.30010822,
"logoReuses": null,
"unknown": {
"logoReuses": "the token has no logo"
},
"contract": {
"block": 124557783,
"owner": "0x0000000000000000000000000000000000000000",
"renounced": true,
"proxy": {
"kind": "minimal",
"implementation": "0x024f18294970b5c76c0691b87f138a0317156422",
"admin": null,
"upgradeable": false
},
"functions": {
"mint": {
"present": false,
"signatures": [],
"nonOwnerCall": null
},
"pause": {
"present": false,
"signatures": [],
"nonOwnerCall": null
},
"blacklist": {
"present": false,
"signatures": [],
"nonOwnerCall": null
},
"tradingToggle": {
"present": false,
"signatures": [],
"nonOwnerCall": null
}
},
"how": "At block 124557783: owner() or getOwner(); the EIP-1967, OpenZeppelin and EIP-1822 proxy slots and EIP-1167 code; the known mint, pause, blacklist and trading-toggle signatures the implementation's bytecode dispatches, each present one called once through Multicall3 (eth_call from a caller that is not the owner)"
},
"taxes": {
"buy": 0.02,
"sell": 0.02,
"buys": 69,
"sells": 33,
"window": "24h",
"how": "Median over the swaps of the last 24h in transactions with one swap of the token: what the pool's Transfer logs delivered to the recipient against what the pool sent (buys), what the pool received against what its sender sent in all (sells)"
}
}
},
"holders": {
"count": 13,
"top10Share": 0.30015722
},
"creator": {
"address": "0x0f325bd174c70440fa62c31dce9f69d54baf717e",
"labels": [
"creator"
],
"tokensCreated": 3,
"graduated": 1
},
"stats24h": {
"volumeUsd": 1758,
"buyVolumeUsd": 1560,
"sellVolumeUsd": 198,
"trades": 105,
"buys": 72,
"sells": 33,
"traders": 8,
"buyers": 8,
"sellers": 7,
"feesPaidUsd": null
},
"chartPool": "0x702e6533e0182381606adbe3ccbb77f682ccc58b",
"price": {
"usd": 0.006,
"quote": 0.00001,
"quoteToken": {
"address": "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
"symbol": "WBNB"
},
"pool": "0x702e6533e0182381606adbe3ccbb77f682ccc58b",
"time": 1790618578665
},
"windows": {
"5m": {
"priceChange": 0,
"volumeUsd": 600,
"buyVolumeUsd": 600,
"sellVolumeUsd": 0,
"trades": 2,
"buys": 2,
"sells": 0,
"traders": 1,
"buyers": 1,
"sellers": 0,
"feesPaidUsd": null
},
"24h": {
"priceChange": null,
"volumeUsd": 1758,
"buyVolumeUsd": 1560,
"sellVolumeUsd": 198,
"trades": 105,
"buys": 72,
"sells": 33,
"traders": 8,
"buyers": 8,
"sellers": 7,
"feesPaidUsd": null
}
},
"poolCount": 2,
"liquidityUsd": 4204200,
"marketCapUsd": 6000000,
"fdvUsd": 6000000,
"pools": [
{
"address": "0x702e6533e0182381606adbe3ccbb77f682ccc58b",
"protocol": "pancakeswap-v2",
"token0": "0xa9fcda9bd321adeb7cbbbd30ef2dd0ed1d657777",
"token1": "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
"volume24hUsd": 1368,
"reserve": "700000000",
"based": true,
"counter": {
"address": "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
"symbol": "WBNB"
},
"trades24h": 102,
"priceUsd": 0.006,
"counterReserve": "7",
"liquidityUsd": 4204200
}
],
"feesPaidUsd": null,
"ath": {
"usd": 0.006122448979591836,
"at": 1790549820000
},
"atl": {
"usd": 0.000012,
"at": 1790546820000
},
"bonding": {
"pool": "0xf39f85a07237050d069187679c621b9df1df8585b01d625ae22bc7cb99430013",
"progress": 1,
"complete": true
},
"latestTradeAt": 1790618578665
}
}
{"id":"k1","type":"tick","data":{"price":{"usd":0.006,"quote":0.00001,"quoteToken":{"address":"0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c","symbol":"WBNB"},"pool":"0x702e6533e0182381606adbe3ccbb77f682ccc58b","time":1790618628209},"latestTradeAt":1790618628209,"marketCapUsd":6000000,"fdvUsd":6000000}}
Captured on a test instance: the pool, then the swap's tick:
{"type":"subscribed","id":"p1","channel":"pool","chain":"evm:56","pool":"0x702e6533e0182381606adbe3ccbb77f682ccc58b"}
{
"id": "p1",
"type": "pool",
"data": {
"pool": {
"chain": "evm:56",
"address": "0x702e6533e0182381606adbe3ccbb77f682ccc58b",
"protocol": "pancakeswap-v2",
"token0": "0xa9fcda9bd321adeb7cbbbd30ef2dd0ed1d657777",
"token1": "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
"factory": null,
"createdBlock": 1000008,
"createdTx": null,
"creator": "0x0f325bd174c70440fa62c31dce9f69d54baf717e",
"extra": {},
"createdAt": 1790549261920
},
"token0": {
"address": "0xa9fcda9bd321adeb7cbbbd30ef2dd0ed1d657777",
"decimals": 18,
"symbol": "TAX",
"name": "Tax Token",
"firstSeenBlock": 1000002,
"logo": null
},
"token1": {
"address": "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
"decimals": 18,
"symbol": "WBNB",
"name": "Wrapped BNB",
"firstSeenBlock": 1000001,
"logo": null
},
"state": {
"atBlock": 1000008,
"atIndex": 0,
"reserve0": "700000000",
"reserve1": "7"
},
"price": {
"baseToken": "0xa9fcda9bd321adeb7cbbbd30ef2dd0ed1d657777",
"quoteToken": "0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c",
"usd": 0.006,
"quote": 0.00001
},
"liquidityUsd": 4204200,
"windows": {
"5m": {
"volumeUsd": 600,
"buyVolumeUsd": 600,
"sellVolumeUsd": 0,
"trades": 2,
"buys": 2,
"sells": 0,
"traders": 1,
"priceChange": 0
},
"1h": {
"volumeUsd": 618,
"buyVolumeUsd": 612,
"sellVolumeUsd": 6,
"trades": 5,
"buys": 4,
"sells": 1,
"traders": 4,
"priceChange": -0.019999999999999907
},
"6h": {
"volumeUsd": 822,
"buyVolumeUsd": 762,
"sellVolumeUsd": 60,
"trades": 31,
"buys": 21,
"sells": 10,
"traders": 8,
"priceChange": 0
},
"24h": {
"volumeUsd": 1368,
"buyVolumeUsd": 1170,
"sellVolumeUsd": 198,
"trades": 102,
"buys": 69,
"sells": 33,
"traders": 8,
"priceChange": null
}
}
}
}
{"id":"p1","type":"tick","data":{"price":{"baseToken":"0xa9fcda9bd321adeb7cbbbd30ef2dd0ed1d657777","quoteToken":"0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c","usd":0.006,"quote":0.00001}}}
Errors: 400 (token is required, pool is required), 404 (unknown token, unknown pool), 503 when the body cannot be built. Each ends the subscription only.