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 ➤


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
Bags AMM / bonding curve0x0ed8d8116f89def7c904d6b9657657a3ccc7d5b7Proxy that routes Bags trades
Bags AMM logic contract0x419890a21711c3d3af46b58548376420b9723275Implementation behind the proxy; emits TokensBought / TokensSold
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:0x3f62c875db9a08cfbb0f0ed7623770cf3fa5f70c" },
"Market": { "Program": "0x0ed8d8116f89def7c904d6b9657657a3ccc7d5b7", "Protocol": "bags_v2", "ProtocolFamily": "Bags", "Network": "Robinhood" },
"QuoteCurrency": { "Name": "Ethereum", "Symbol": "ETH", "Id": "bid:eth" },
"Token": { "Address": "0x3f62c875db9a08cfbb0f0ed7623770cf3fa5f70c", "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).


Trades for a Specific Bags Token

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

{
Trading {
Trades(
limit: {count: 50}
orderBy: {descending: Block_Time}
where: {
Pair: {
Token: {Address: {is: "0x3f62c875db9a08cfbb0f0ed7623770cf3fa5f70c"}}
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.

{
Trading {
Trades(
limit: {count: 50}
orderBy: {descending: Block_Time}
where: {
Trader: {Address: {is: "0x00a60b9760a4aa1a2fd6388b5cb6295f4c90cee0"}}
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: "0x3f62c875db9a08cfbb0f0ed7623770cf3fa5f70c"}}
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: "0x3f62c875db9a08cfbb0f0ed7623770cf3fa5f70c"}}
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: "0x3f62c875db9a08cfbb0f0ed7623770cf3fa5f70c"}, 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: "0x3f62c875db9a08cfbb0f0ed7623770cf3fa5f70c"}, 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": "0x3f62c875db9a08cfbb0f0ed7623770cf3fa5f70c" },
"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: "0x3f62c875db9a08cfbb0f0ed7623770cf3fa5f70c"}, 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 0x0ed8d8116f89def7c904d6b9657657a3ccc7d5b7) 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 the Bags AMM proxy to discover what else you can index (fee splits, initialization, role/ownership changes).

{
EVM(network: robinhood) {
Events(
limit: {count: 100}
where: {LogHeader: {Address: {is: "0x0ed8d8116f89def7c904d6b9657657a3ccc7d5b7"}}}
) {
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