Perp API
Query and subscribe to perpetual trading data including positions, trade history, market borrowing rates, and referrals.
Table of Contents
Queries
trade
Get a specific trade by ID and trader address.
Signature:
trade(id: Int!, trader: String!): PerpTradeParameters:
id: Trade ID (integer)trader: Trader's wallet address (required)
Returns: PerpTrade object or null if not found
Example:
query GetTrade {
perp {
trade(id: 42, trader: "nibi1abc...") {
id
isOpen
isLong
leverage
collateralAmount
openPrice
closePrice
perpBorrowing {
baseToken { symbol }
collateralToken { symbol }
marketId
}
openBlock {
block
block_ts
}
closeBlock {
block
block_ts
}
state {
pnlCollateral
pnlPct
liquidationPrice
positionValue
}
}
}
}Use Cases:
Display single trade details
Track specific position status
Calculate current PnL
trades
List trades with filtering, pagination, and ordering.
Signature:
trades(
where: PerpTradesFilter!
limit: Int
offset: Int
order_by: PerpTradesOrder
order_desc: Boolean
): [PerpTrade!]!Parameters:
where: Filter object (required)trader: Trader address (required)isOpen: Filter by open/closed statusperpMarketId: Filter by market IDperpCollateralId: Filter by collateral token ID
limit: Max results (default: 100)offset: Skip results for paginationorder_by: Sort field (sequenceonly)order_desc: Sort descending (default: false)
Returns: Array of PerpTrade objects
Example - Get Open Positions:
query GetOpenPositions($trader: String!) {
perp {
trades(
where: {
trader: $trader
isOpen: true
}
limit: 50
order_desc: true
) {
id
isLong
leverage
collateralAmount
openPrice
perpBorrowing {
baseToken { symbol }
marketId
}
state {
pnlCollateral
pnlPct
liquidationPrice
}
}
}
}Example - Filter by Market:
query GetBTCTrades($trader: String!) {
perp {
trades(
where: {
trader: $trader
perpMarketId: 1 # BTC market
}
limit: 20
) {
id
isOpen
openPrice
closePrice
}
}
}Use Cases:
List user's open positions
Display trading history
Filter by specific markets
Build position dashboard
tradeHistory
Get trade events and position changes.
Signature:
tradeHistory(
where: PerpTradeHistoryFilter!
limit: Int
offset: Int
order_by: PerpTradeHistoryOrder
order_desc: Boolean
): [PerpTradeHistoryItem!]!Parameters:
where: Filter object (required)trader: Trader address (required)
limit: Max results (default: 100)offset: Skip resultsorder_by: Sort bysequenceortrade_idorder_desc: Sort descending
Returns: Array of PerpTradeHistoryItem objects
Trade Change Types:
position_opened: New position createdposition_closed_user: User closed positionposition_closed_sl: Stop loss triggeredposition_closed_tp: Take profit triggeredposition_liquidated: Position liquidatedsl_updated: Stop loss updatedtp_updated: Take profit updatedlimit_order_created: Limit order placedstop_order_created: Stop order placedorder_triggered: Order executedorder_closed_user: Order cancelled
Example:
query GetTradeHistory($trader: String!) {
perp {
tradeHistory(
where: { trader: $trader }
limit: 50
order_by: sequence
order_desc: true
) {
id
tradeChangeType
block {
block
block_ts
}
trade {
id
isLong
leverage
}
realizedPnlCollateral
realizedPnlPct
}
}
}Use Cases:
Build activity feed
Track position modifications
Calculate realized PnL history
Audit trade actions
borrowing
Get detailed borrowing information for a specific market and collateral.
Signature:
borrowing(collateralId: Int!, marketId: Int!): PerpBorrowingParameters:
collateralId: Collateral token IDmarketId: Market ID
Returns: PerpBorrowing object or null
Example:
query GetMarketInfo {
perp {
borrowing(collateralId: 1, marketId: 1) {
marketId
baseToken { symbol name }
quoteToken { symbol }
collateralToken { symbol }
price
oiLong
oiShort
oiMax
feesPerHourLong
feesPerHourShort
openFeePct
closeFeePct
triggerOrderFeePct
maxLeverage
minLeverage
minPositionSizeUSD
visible
}
}
}Key Fields Explained:
oiLong/oiShort: Open interest for longs/shortsoiMax: Maximum allowed open interestfeesPerHourLong/feesPerHourShort: Borrowing rate (per hour)openFeePct/closeFeePct: Opening/closing fee percentagesmaxLeverage/minLeverage: Leverage limitsminPositionSizeUSD: Minimum position size in USD
Use Cases:
Display market information
Calculate funding rates
Show available leverage
Check market capacity (OI limits)
borrowings
List all available markets with basic information.
Signature:
borrowings(
where: PerpBorrowingsFilter
limit: Int
offset: Int
order_by: PerpBorrowingsOrder
order_desc: Boolean
): [PerpBorrowingShortInfo!]!Parameters:
where: Filter object (optional)marketId: Filter by market IDcollateralId: Filter by collateral ID
limit: Max resultsoffset: Skip resultsorder_by: Sort bybase_token_nameorder_desc: Sort descending
Returns: Array of PerpBorrowingShortInfo objects
Example:
query ListMarkets {
perp {
borrowings(
order_by: base_token_name
limit: 20
) {
marketId
baseToken { symbol name logoUrl }
quoteToken { symbol }
collateralToken { symbol }
visible
}
}
}Use Cases:
List all tradeable markets
Build market selector
Filter visible markets
Subscriptions
Subscribe to real-time updates for perpetual trading data.
perpTrades
Subscribe to trade updates for a specific trader.
Signature:
subscription {
perpTrades(where: SubPerpTradesFilter!): [PerpTrade!]!
}Example:
subscription WatchTrades($trader: String!) {
perpTrades(where: { trader: $trader }) {
id
isOpen
leverage
state {
pnlCollateral
pnlPct
}
}
}perpTradeHistory
Subscribe to trade events for a specific trader.
Signature:
subscription {
perpTradeHistory(where: SubPerpTradeHistoryFilter!): [PerpTradeHistoryItem!]!
}Example:
subscription WatchTradeEvents($trader: String!) {
perpTradeHistory(where: { trader: $trader }) {
id
tradeChangeType
realizedPnlCollateral
block { block_ts }
}
}perpBorrowing
Subscribe to borrowing rate updates for a specific market.
Signature:
subscription {
perpBorrowing(collateralId: Int!, marketId: Int!): PerpBorrowing
}Example:
subscription WatchMarket($collateralId: Int!, $marketId: Int!) {
perpBorrowing(collateralId: $collateralId, marketId: $marketId) {
price
oiLong
oiShort
feesPerHourLong
feesPerHourShort
}
}perpBorrowings
Subscribe to updates for all markets.
Signature:
subscription {
perpBorrowings: [PerpBorrowingShortInfo!]!
}Example:
subscription WatchAllMarkets {
perpBorrowings {
marketId
baseToken { symbol }
visible
}
}Types Reference
PerpTrade
type PerpTrade {
id: Int!
trader: String!
isOpen: Boolean!
isLong: Boolean!
tradeType: PerpTradeType!
leverage: Float!
collateralAmount: Int!
openCollateralAmount: Int!
openPrice: Float!
closePrice: Float
sl: Float # Stop loss price
tp: Float # Take profit price
perpBorrowing: PerpBorrowingShortInfo!
openBlock: Block
closeBlock: Block
state: PerpTradeState
}PerpTradeState
Real-time position state with PnL and fees.
type PerpTradeState {
pnlCollateral: Float!
pnlPct: Float!
pnlCollateralAfterFees: Float!
positionValue: Float!
liquidationPrice: Float!
borrowingFeeCollateral: Float!
borrowingFeePct: Float!
closingFeeCollateral: Float!
closingFeePct: Float!
remainingCollateralAfterFees: Float!
}PerpBorrowing
Complete market information.
type PerpBorrowing {
marketId: Int!
baseToken: Token!
quoteToken: Token!
collateralToken: Token!
price: Float!
oiLong: Int!
oiShort: Int!
oiMax: Int!
feesPerHourLong: Float!
feesPerHourShort: Float!
openFeePct: Float!
closeFeePct: Float!
triggerOrderFeePct: Float!
maxLeverage: Float!
minLeverage: Float!
minPositionSizeUSD: Int!
visible: Boolean!
}Enums
PerpTradeType:
trade: Market tradelimit: Limit orderstop: Stop order
PerpTradeChangeType:
position_openedposition_closed_userposition_closed_slposition_closed_tpposition_liquidatedsl_updatedtp_updatedlimit_order_createdstop_order_createdorder_triggeredorder_closed_user
Next: LP API Reference | Back to Introduction
Last updated