Skip to main content

Bags.fm API on Robinhood

Bags.fm is a token launchpad on the Robinhood network where tokens trade on a bonding-curve AMM. This guide focuses on Bags.fm trading data — live and historical trades, USD prices, OHLCV/K-line candles, market cap, whale trades, top traders, and the raw bonding-curve TokensBought/TokensSold events — using Bitquery's Trading and EVM(network: robinhood) APIs.

API Key Required

To query or stream data outside the Bitquery IDE, you need an API access token.

Follow the steps here: How to generate Bitquery API token ➤

Related docs

Bags.fm identifiers

Bags trades are indexed in the Trading cube under the Bags protocol family. Filter with ProtocolFamily (or Protocol) — you do not need a per-token contract address, since every Bags token trades under the same family.

FieldValueNotes
Pair.Market.ProtocolFamilyBagsSelects all Bags markets across tokens
Pair.Market.Protocolbags_v2Current Bags protocol version
Network / NetworkBidRobinhood / bid:robinhoodRobinhood network
Per-token Bags AMM (beacon proxy, one per token)0xfa925c0589e98f564cd7456a0e7cd80722724ac5 (example: the MERRY AMM)Each launch gets its own AMM proxy; it is the Pair.Market.Program of that token's bags_v2 trades and the LogHeader.Address of its TokensBought / TokensSold / FeesSplit events. An AMM goes quiet when its token does, so look the address up from a recent trade rather than hard-coding it
Bags AMM logic contract (beacon implementation)0x419890a21711c3d3af46b58548376420b9723275Shared implementation behind every per-token AMM; appears as Log.SmartContract
Bags factory (launch)0xe8cc4431adf8b5a847c113ef0c6af9043219cb37Mints new Bags tokens — see launches
Per-token Market.Program

Each Bags token exposes its own Pair.Market.Program (the token's bonding-curve/pool contract). To scope trades to a single token, filter by Pair.Token.Address rather than Program; to get all Bags trading activity, filter by ProtocolFamily: {is: "Bags"}.


New Bags Token Launches

To detect newly created Bags tokens (before or alongside their first trades), use the mint-transfer pattern on the Bags factory contract — covered in detail on the Robinhood Meme Coin Launches API page.

{
EVM(network: robinhood) {
Transfers(
orderBy: {descending: Block_Time}
limit: {count: 50}
where: {
Transaction: {To: {is: "0xe8cc4431adf8b5a847c113ef0c6af9043219cb37"}}
Transfer: {
Amount: {eq: "1000000000"}
Sender: {is: "0x0000000000000000000000000000000000000000"}
}
}
) {
Block {
Time
}
Transaction {
Hash
From
}
Transfer {
Amount
Receiver
Currency {
Name
Symbol
SmartContract
}
}
}
}
}

Real-Time Bags Trades

Stream every Bags trade as it is indexed via a GraphQL subscription on Trading.Trades, scoped to the Bags protocol family on Robinhood. Includes side (buy/sell), trader, base/quote amounts (native and USD), market cap, and full transaction header.

▶️ Run in IDE

subscription {
Trading {
Trades(
where: {Pair: {Market: {ProtocolFamily: {is: "Bags"}, Network: {is: "Robinhood"}}}}
) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Currency {
Id
Name
Symbol
}
Market {
Address
Program
Network
Protocol
ProtocolFamily
}
QuoteCurrency {
Id
Name
Symbol
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}
Sample response
{
"Side": "Sell",
"Amounts": { "Base": 73809640, "Quote": 0.1017578 },
"AmountsInUsd": { "Base": 190.31902, "Quote": 190.31883 },
"Block": { "Date": "2026-07-16", "Time": "2026-07-16T17:25:21Z", "Timestamp": "1784222721000000000" },
"Supply": { "CirculatingSupply": 0, "MarketCap": 2578.51 },
"Trader": { "Address": "0x00a60b9760a4aa1a2fd6388b5cb6295f4c90cee0" },
"Pair": {
"Currency": { "Name": "Stud", "Symbol": "Stud", "Id": "bid:robinhood:0x66c9ba158b2b80c2a51ca75f3e4155a682676c7a" },
"Market": { "Program": "0xfa925c0589e98f564cd7456a0e7cd80722724ac5", "Protocol": "bags_v2", "ProtocolFamily": "Bags", "Network": "Robinhood" },
"QuoteCurrency": { "Name": "Ethereum", "Symbol": "ETH", "Id": "bid:eth" },
"Token": { "Address": "0x66c9ba158b2b80c2a51ca75f3e4155a682676c7a", "Symbol": "Stud", "IsNative": false },
"QuoteToken": { "Symbol": "ETH", "IsNative": true, "Id": "bid:robinhood" }
}
}

Latest Bags Trades

The query counterpart to the stream above — the most recent Bags trades across all tokens, newest first.

▶️ Run in IDE

{
Trading {
Trades(
limit: {count: 50}
orderBy: {descending: Block_Time}
where: {Pair: {Market: {ProtocolFamily: {is: "Bags"}, Network: {is: "Robinhood"}}}}
) {
Side
Supply {
CirculatingSupply
MarketCap
}
Trader {
Address
}
TransactionHeader {
Fee
FeePayer
Sender
To
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
Quote
}
Block {
Date
Time
Timestamp
}
Pair {
Currency {
Id
Name
Symbol
}
Market {
Address
Program
Network
Protocol
ProtocolFamily
}
QuoteCurrency {
Id
Name
Symbol
}
Token {
Address
Id
IsNative
Symbol
TokenId
Network
}
QuoteToken {
Address
Id
IsNative
Symbol
TokenId
Network
}
}
}
}
}
Query ⇄ Stream

Every query on this page can be turned into a live stream — switch the operation type from query to subscription in the Bitquery IDE (and drop orderBy/limit, which don't apply to subscriptions). Over WebSocket, connect to wss://streaming.bitquery.io/graphql?token=YOUR_TOKEN with the graphql-transport-ws subprotocol — see WebSocket authentication.


Trades for a Specific Bags Token

Scope trades to a single Bags token with Pair.Token.Address. This example uses the MERRY token (0x66c9ba158b2b80c2a51ca75f3e4155a682676c7a).

{
Trading {
Trades(
limit: {count: 50}
orderBy: {descending: Block_Time}
where: {
Pair: {
Token: {Address: {is: "0x66c9ba158b2b80c2a51ca75f3e4155a682676c7a"}}
Market: {ProtocolFamily: {is: "Bags"}}
}
}
) {
Side
Block {
Time
}
Trader {
Address
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
}
Supply {
MarketCap
}
Pair {
Token {
Name
Symbol
Address
}
QuoteToken {
Name
Symbol
}
}
TransactionHeader {
Hash
}
}
}
}

Trades by a Trader on Bags

Track all Bags trades made by a specific wallet by filtering on Trader.Address. Replace the example with any wallet address.

{
Trading {
Trades(
limit: {count: 50}
orderBy: {descending: Block_Time}
where: {
Trader: {Address: {is: "0x7906d5e4a10fbb07f5491018ab29df072a76eb3d"}}
Pair: {Market: {ProtocolFamily: {is: "Bags"}}}
}
) {
Side
Block {
Time
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
}
Pair {
Token {
Name
Symbol
Address
}
QuoteToken {
Symbol
}
}
TransactionHeader {
Hash
}
}
}
}

Whale Trades on Bags

Surface large Bags trades by filtering on USD value. This example returns trades of at least $500 — raise or lower the AmountsInUsd.Base threshold to match current Bags liquidity.

{
Trading {
Trades(
limit: {count: 50}
orderBy: {descending: AmountsInUsd_Base}
where: {
Pair: {Market: {ProtocolFamily: {is: "Bags"}}}
AmountsInUsd: {Base: {ge: 500}}
}
) {
Side
Block {
Time
}
Trader {
Address
}
AmountsInUsd {
Base
}
Amounts {
Base
Quote
}
Supply {
MarketCap
}
Pair {
Token {
Name
Symbol
Address
}
}
TransactionHeader {
Hash
}
}
}
}

First Buyers of a Bags Token

Get the earliest trades for a token, ordered oldest first, to find the first buyers after launch. Filtered to Buy here; remove the Side filter for the first trades of any side.

{
Trading {
Trades(
limit: {count: 50}
orderBy: {ascending: [Block_Time, TransactionHeader_Index]}
where: {
Pair: {
Token: {Address: {is: "0x66c9ba158b2b80c2a51ca75f3e4155a682676c7a"}}
Market: {ProtocolFamily: {is: "Bags"}}
}
Side: {is: "Buy"}
}
) {
Block {
Time
}
Trader {
Address
}
Amounts {
Base
Quote
}
AmountsInUsd {
Base
}
Side
TransactionHeader {
Hash
}
}
}
}

Top Traders of a Bags Token

Rank the biggest traders of a specific Bags token by total USD volume, with a buy/sell split and trade count. Aggregates Trading.Trades grouped by trader.

{
Trading {
Trades(
limit: {count: 50}
orderBy: {descendingByField: "volume_usd"}
where: {
Pair: {
Token: {Address: {is: "0x66c9ba158b2b80c2a51ca75f3e4155a682676c7a"}}
Market: {ProtocolFamily: {is: "Bags"}}
}
}
) {
Trader {
Address
}
volume_usd: sum(of: AmountsInUsd_Base)
bought_usd: sum(of: AmountsInUsd_Base, if: {Side: {is: "Buy"}})
sold_usd: sum(of: AmountsInUsd_Base, if: {Side: {is: "Sell"}})
trades: count
}
}
}

Latest Price of a Bags Token

Get the latest USD-normalised price of a Bags token using Trading.Tokens with the bid:robinhood network filter. The price is the pool-weighted average across the token's markets.

{
Trading {
Tokens(
limit: {count: 1}
orderBy: {descending: Interval_Time_End}
where: {
Token: {Address: {is: "0x66c9ba158b2b80c2a51ca75f3e4155a682676c7a"}, NetworkBid: {is: "bid:robinhood"}}
Interval: {Time: {Duration: {eq: 1}}}
}
) {
latest_price: Price {
Ohlc {
Close
}
}
}
}
}

Market Cap, FDV and Supply of a Bags Token

Get the latest market cap, fully-diluted valuation, supply, price, and USD volume for a single Bags token in one row.

{
Trading {
Tokens(
limit: {count: 1}
orderBy: {descending: Interval_Time_Start}
where: {
Token: {Address: {is: "0x66c9ba158b2b80c2a51ca75f3e4155a682676c7a"}, NetworkBid: {is: "bid:robinhood"}}
Interval: {Time: {Duration: {eq: 1}}}
}
) {
Token {
Name
Symbol
Address
}
Price {
Ohlc {
Close
}
}
Supply {
MarketCap
FullyDilutedValuationUsd
CirculatingSupply
TotalSupply
}
Volume {
Usd
}
}
}
}
Sample response
{
"Token": { "Name": "Stud", "Symbol": "Stud", "Address": "0x66c9ba158b2b80c2a51ca75f3e4155a682676c7a" },
"Price": { "Ohlc": { "Close": 2.3498699e-06 } },
"Supply": {
"MarketCap": 2451.49,
"FullyDilutedValuationUsd": 2451.49,
"CirculatingSupply": 0,
"TotalSupply": 1000000000
},
"Volume": { "Usd": 44.038837 }
}

OHLCV / K-Line Candles for a Bags Token

Token-level OHLCV candles (USD-normalised, weighted across all pools) for charting. This example uses 1-minute candles (Duration: 60); use 1 (1s), 300 (5m), or 3600 (1h — the maximum) as needed.

{
Trading {
Tokens(
limit: {count: 100}
orderBy: {descending: Interval_Time_Start}
where: {
Token: {Address: {is: "0x66c9ba158b2b80c2a51ca75f3e4155a682676c7a"}, NetworkBid: {is: "bid:robinhood"}}
Interval: {Time: {Duration: {eq: 60}}}
}
) {
Interval {
Time {
Start
End
}
}
Price {
Ohlc {
Open
High
Low
Close
}
}
Volume {
Base
Quote
Usd
}
Supply {
MarketCap
}
}
}
}

Top Bags Tokens by Volume

Rank the most actively traded Bags tokens by USD volume over the last 24 hours. This aggregates Trading.Trades grouped by token — the Trading.Tokens cube doesn't expose a protocol-family filter, so scope by ProtocolFamily on the trades and group by Pair.Token.

{
Trading {
Trades(
limit: {count: 50}
orderBy: {descendingByField: "volume_usd"}
where: {
Pair: {Market: {ProtocolFamily: {is: "Bags"}}}
Block: {Time: {since_relative: {days_ago: 1}}}
}
) {
Pair {
Token {
Name
Symbol
Address
}
}
volume_usd: sum(of: AmountsInUsd_Base)
trades: count
}
}
}
Sample response
{
"Pair": { "Token": { "Name": "Crypto Cats", "Symbol": "CRYPTOCATS", "Address": "0x366c07ef29f06c7e9e6d0078eb7e31186f87605c" } },
"trades": "238",
"volume_usd": "17691.63"
}
Getting per-token market cap

This aggregation gives volume and trade counts per token. To add the latest market cap / FDV for any token in the results, pass its Token.Address to the Market Cap, FDV and Supply query above.


Raw Bonding-Curve Trades (TokensBought / TokensSold)

For the lowest-level view, read Bags trades directly from the AMM's decoded logs. The Bags bonding-curve logic contract (0x419890a21711c3d3af46b58548376420b9723275, proxied by 0xfa925c0589e98f564cd7456a0e7cd80722724ac5) emits TokensBought and TokensSold with full fee breakdown and virtual reserves — data that isn't exposed by the higher-level Trading.Trades cube.

Bags buys (TokensBought)

{
EVM(network: robinhood) {
Events(
limit: {count: 25}
orderBy: {descending: Block_Time}
where: {Log: {Signature: {Name: {is: "TokensBought"}}, SmartContract: {is: "0x419890a21711c3d3af46b58548376420b9723275"}}}
) {
Block {
Time
}
Transaction {
Hash
From
}
Arguments {
Name
Value {
... on EVM_ABI_Address_Value_Arg {
address
}
... on EVM_ABI_BigInt_Value_Arg {
bigInteger
}
... on EVM_ABI_Integer_Value_Arg {
integer
}
}
}
}
}
}

TokensBought arguments: buyer, recipient, grossQuoteIn, netQuoteIn, tokensOut, feeQuote, vaultFeeQuote, creatorFeeWETH, refundQuote, price, virtualTokenReserves, virtualQuoteReserves.

Bags sells (TokensSold)

Swap the signature name to stream sells. Arguments: seller, recipient, tokensIn, grossQuoteOut, netQuoteToRecipient, feeQuote, vaultFeeQuote, creatorFeeWETH, price, virtualTokenReserves, virtualQuoteReserves.

{
EVM(network: robinhood) {
Events(
limit: {count: 25}
orderBy: {descending: Block_Time}
where: {Log: {Signature: {Name: {is: "TokensSold"}}, SmartContract: {is: "0x419890a21711c3d3af46b58548376420b9723275"}}}
) {
Block {
Time
}
Transaction {
Hash
From
}
Arguments {
Name
Value {
... on EVM_ABI_Address_Value_Arg {
address
}
... on EVM_ABI_BigInt_Value_Arg {
bigInteger
}
}
}
}
}
}
Raw integers vs normalized amounts

TokensBought / TokensSold arguments are raw on-chain integers (WETH-style quote amounts are 1e18-scaled; tokensOut/tokensIn use the token's own decimals). Use Trading.Trades (above) when you want decimal-normalized and USD-priced amounts; use these events when you need the exact fee split, price, and virtualTokenReserves/virtualQuoteReserves from the bonding curve.


All Bags AMM Events

Enumerate the event signatures emitted through one token's Bags AMM proxy (the MERRY AMM here; swap in the Pair.Market.Program of any live Bags token) to discover what else you can index (fee splits, initialization, role/ownership changes).

{
EVM(network: robinhood) {
Events(
limit: {count: 100}
where: {LogHeader: {Address: {is: "0xfa925c0589e98f564cd7456a0e7cd80722724ac5"}}}
) {
count
Log {
Signature {
Name
}
SmartContract
}
}
}
}

Observed signatures include TokensBought, TokensSold, FeesSplit, Initialized, RoleGranted, OwnershipTransferred, and BeaconUpgraded (most emitted by the logic contract 0x419890a21711c3d3af46b58548376420b9723275).


FAQ

How do I get all Bags.fm trades?

Query Trading.Trades filtered by Pair.Market.ProtocolFamily: {is: "Bags"} (optionally with Network: {is: "Robinhood"}). This returns trades across every Bags token — no per-token address needed.

How do I stream Bags trades in real time?

Run a GraphQL subscription on Trading.Trades with the same ProtocolFamily: "Bags" filter, or open the WebSocket IDE link. Any query on this page can be converted to a stream by switching the operation to subscription.

What's the difference between Trading.Trades and the TokensBought/TokensSold events?

Trading.Trades gives decimal-normalized, USD-priced trades with market cap and a unified buy/sell Side — best for analytics and charts. The TokensBought/TokensSold events are the raw bonding-curve logs with the exact fee breakdown (feeQuote, vaultFeeQuote, creatorFeeWETH), execution price, and virtual reserves — best when you need on-chain-exact values.

How do I get the price, market cap, or OHLCV of a Bags token?

Use Trading.Tokens with Token.Address and NetworkBid: {is: "bid:robinhood"}. Set Interval.Time.Duration (seconds) for OHLCV candles, or read Supply.MarketCap / Supply.FullyDilutedValuationUsd for valuations.

Which protocol value does Bags use?

Bags markets report Protocol: "bags_v2" under ProtocolFamily: "Bags". Filter on ProtocolFamily so your queries keep working across protocol versions.

How do I detect a newly launched Bags token?

Use the mint-transfer pattern on the Bags factory (0xe8cc4431adf8b5a847c113ef0c6af9043219cb37) — a transfer from the zero address with Amount 1000000000. See the launches page.


Next steps

Build with Bitquery

Ready to run this in production?

Get an API key and run these queries in minutes, or talk to us about plans and enterprise delivery.