OpenBook DEX API
OpenBook Trades in Real-Time
The below query gets real-time information whenever there's a new trade on the OpenBook DEX including detailed information about the trade, including the buy and sell details, the block information, and the transaction specifics. You can run the query here
subscription {
Solana {
DEXTrades(
where: { Trade: { Dex: { ProtocolFamily: { is: "OpenBook" } } } }
) {
Trade {
Dex {
ProgramAddress
ProtocolFamily
ProtocolName
}
Buy {
Currency {
Name
Symbol
MintAddress
}
Amount
Account {
Address
}
PriceAgainstSellCurrency: Price
}
Sell {
Account {
Address
}
Amount
Currency {
Name
Symbol
MintAddress
}
PriceAgainstBuyCurrency: Price
}
}
Block {
Time
}
}
}
}
Price Average of Pair on OpenBook
Here is the query to get average price of a selected pair on a selected day.
query PriceAverage {
Solana {
DEXTrades(
limit: { count: 1 }
orderBy: { descending: Block_Time }
where: {
Trade: {
Dex: { ProtocolFamily: { is: "OpenBook" } }
Sell: { Currency: { Symbol: { is: "USDC" } } }
Buy: { Currency: { Symbol: { is: "WSOL" } } }
}
Block: {
Time: {
after: "2024-06-03T00:00:00Z"
before: "2024-06-04T00:00:00Z"
}
}
}
) {
tokenPrice: average(of: Trade_Buy_Price)
}
}
}
Get All Instructions of OpenBook v2
To get all the Instructions associated with OpenBook v2, we will utilize the Solana instructions API. You can run this query using this link.
query MyQuery {
Solana {
Instructions(
where: {
Instruction: {
Program: {
Address: { is: "opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb" }
}
}
Transaction: { Result: { Success: true } }
}
) {
Instruction {
Program {
Method
}
}
count
}
}
}
Listen to placeOrder, placeTakeOrder Instructions of OpenBook v2
We will use this subscription to listen to transactions that are placing orders on OpenBook v2. We will utilize the Solana instructions API. You can also watch a Youtube Tutorial for a better understand here. You can run this query using this link.
subscription {
Solana {
Instructions(
where: {
Instruction: {
Program: {
Address: { is: "opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb" }
Method: { in: ["placeOrder", "placeTakeOrder"] }
}
}
Transaction: { Result: { Success: true } }
}
) {
Transaction {
Signature
}
Instruction {
Accounts {
Address
IsWritable
Token {
Mint
Owner
ProgramId
}
}
Program {
AccountNames
Address
Method
Name
Parsed
Arguments {
Name
Type
Value {
... on Solana_ABI_Json_Value_Arg {
json
}
... on Solana_ABI_Float_Value_Arg {
float
}
... on Solana_ABI_Boolean_Value_Arg {
bool
}
... on Solana_ABI_Bytes_Value_Arg {
hex
}
... on Solana_ABI_BigInt_Value_Arg {
bigInteger
}
... on Solana_ABI_Address_Value_Arg {
address
}
... on Solana_ABI_String_Value_Arg {
string
}
... on Solana_ABI_Integer_Value_Arg {
integer
}
}
}
}
}
}
}
}
Listen to consumeEvents Instructions of OpenBook v2
We will use this subscription to listen to consumeEvents
transactions on OpenBook v2. This instruction processes trade events and other activities such as order cancellations. It updates the order book and ensures that all relevant trade activities are accounted for and settled. We will utilize the Solana instructions API. You can also watch a Youtube TUtorial for a better understand here.
You can run this query using this link.
subscription {
Solana {
Instructions(
where: {
Instruction: {
Program: {
Address: { is: "opnb2LAfJYbRMAHHvqjCwQxanZn7ReEHp1k81EohpZb" }
Method: { is: "consumeEvents" }
}
}
Transaction: { Result: { Success: true } }
}
) {
Transaction {
Signature
}
Instruction {
Accounts {
Address
IsWritable
Token {
Mint
Owner
ProgramId
}
}
Program {
AccountNames
Address
Method
Name
Parsed
Arguments {
Name
Type
Value {
... on Solana_ABI_Json_Value_Arg {
json
}
... on Solana_ABI_Float_Value_Arg {
float
}
... on Solana_ABI_Boolean_Value_Arg {
bool
}
... on Solana_ABI_Bytes_Value_Arg {
hex
}
... on Solana_ABI_BigInt_Value_Arg {
bigInteger
}
... on Solana_ABI_Address_Value_Arg {
address
}
... on Solana_ABI_String_Value_Arg {
string
}
... on Solana_ABI_Integer_Value_Arg {
integer
}
}
}
}
}
}
}
}
Latest Price of a Token on OpenBook
You can use the following query to get the latest price of a token on OpenBook on Solana.
You can run this query using this link.
{
Solana {
DEXTradeByTokens(
limit: {count: 1}
orderBy: {descending: Block_Time}
where: {Trade: {Dex: {ProtocolFamily: {is: "OpenBook"}}, Currency: {MintAddress: {is: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}}}}
) {
Block {
Time
}
Trade {
Currency {
MintAddress
}
Side {
Currency {
MintAddress
}
}
Price
PriceInUSD
}
}
}
}
OpenBook OHLC API
If you want to get OHLC data for any specific currency pair on OpenBook, you can use this api. Only use this API as query and not subscription websocket as Aggregates and Time Intervals don't work well with subscriptions.
{
Solana {
DEXTradeByTokens(
orderBy: {descendingByField: "Block_Timefield"}
where: {Trade: {Currency: {MintAddress: {is: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}}, Dex: {ProtocolFamily: {is: "OpenBook"}}, PriceAsymmetry: {lt: 0.1}}}
limit: {count: 10}
) {
Block {
Timefield: Time(interval: {in: minutes, count: 1})
}
volume: sum(of: Trade_Amount)
Trade {
high: Price(maximum: Trade_Price)
low: Price(minimum: Trade_Price)
open: Price(minimum: Block_Slot)
close: Price(maximum: Block_Slot)
}
count
}
}
}
Get the Top Traders of a specific Token on OpenBook DEX
The below query gets the Top Traders of the specified Token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
on OpenBook. Keep in mind you can use this API only as a query and not a subscription websocket because aggregates don't work with subscription and you will end up getting wrong results. You can run the query here
query TopTraders($token: String) {
Solana {
DEXTradeByTokens(
orderBy: {descendingByField: "volumeUsd"}
limit: {count: 100}
where: {Trade: {Currency: {MintAddress: {is: $token}}, Dex: {ProtocolFamily: {is: "OpenBook"}}}, Transaction: {Result: {Success: true}}}
) {
Trade {
Account {
Owner
}
Side {
Account {
Address
}
Type
}
}
bought: sum(of: Trade_Amount, if: {Trade: {Side: {Type: {is: buy}}}})
sold: sum(of: Trade_Amount, if: {Trade: {Side: {Type: {is: sell}}}})
volume: sum(of: Trade_Amount)
volumeUsd: sum(of: Trade_Side_AmountInUSD)
}
}
}
{
"token": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
}
Get trading volume, buy volume, sell volume of a token
This query fetches you the traded volume, buy volume and sell volume of a token EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
on OpenBook DEX. Try out the API here.
query MyQuery {
Solana(dataset: combined) {
DEXTradeByTokens(
where: {Block: {Time: {since: "2025-03-10T07:00:00Z"}}, Transaction: {Result: {Success: true}}, Trade: {Currency: {MintAddress: {is: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"}}, Dex: {ProtocolFamily: {is: "OpenBook"}}}}
) {
Trade {
Currency {
MintAddress
Decimals
}
Side {
Currency {
Name
MintAddress
}
}
}
traded_volume_USD: sum(of: Trade_Side_AmountInUSD)
traded_volume: sum(of: Trade_Amount)
buy_volume: sum(
of: Trade_Side_AmountInUSD
if: {Trade: {Side: {Type: {is: buy}}}}
)
sell_volume: sum(
of: Trade_Side_AmountInUSD
if: {Trade: {Side: {Type: {is: sell}}}}
)
}
}
}
Volatility of a Pair on OpenBook
Volatility is an important factor in trading world as it determines the fluctuation in price that implies the possibility of profit and risk of loss. Lesser volatility denotes that the pair is stable.
Here is the query to get the volatility for a selected token in the last 24 hours.
query Volatility {
Solana {
DEXTrades(
where: {
Trade: {
Dex: { ProtocolFamily: { is: "OpenBook" } }
Sell: {
Currency: {
MintAddress: {
is: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
}
}
}
}
Block: { Time: { after: "2025-03-18T00:00:00Z" } }
}
) {
volatility: standard_deviation(of: Trade_Buy_Price)
}
}
}