Positions

Request the authenticated account's full open-position snapshot through the encrypted trading protocol:

POST /api/v1/positions
Authorization: Bearer <access_token>
Content-Type: application/json

The body is an HPKE envelope whose logical request is get_positions. Plaintext position filters and GET /positions are not supported. The account identity comes from the authenticated encrypted session.

The decrypted response is PositionsSnapshot:

account: bytes
rows: PositionRow[]
server_timestamp: uint64
source: INITIAL | PERIODIC | EVENT
correlation_id?: bytes

account is the 32-byte Solana account identity; SDK public APIs expose it as base58. correlation_id is present on the initial RPC response and absent on unsolicited periodic or event snapshots.

PositionRow

Numeric values that can exceed JSON precision are decimal strings.

FieldTypeDescription
symbol_iduint64Protocol instrument identifier
sideenumBuy (long) or Sell (short)
sizestringAbsolute base size
entry_pricestringAverage entry price
leverageuint32Position leverage
mark_pricestring?Current oracle mark; absent before a usable mark
unrealized_pnlstring?Signed uPnL; absent with mark_price
notionalstring?Absolute size × mark; absent with mark_price
mark_publish_time_secuint64?Oracle publish time
liquidation_pricestring?Server-computed threshold; may be absent
adl_indicatoruint32?ADL rank, 0 safest through 5 highest
position_statusenum?NORMAL, LIQ, or ADL lifecycle
marginstring?Allocated position margin
mgn_modeenumISOLATED or CROSS
mmrstring?Maintenance requirement
mgn_ratiostring?Margin ratio
margin_ratio_bpsuint64?Margin ratio in basis points
take_profit / stop_lossstring?Position TP/SL prices
tpsl_statusenum?TP/SL lifecycle
tpsl_parent_order_iduint64?Parent order identifier

Use the official SDK to encode/decode envelopes. A positions subscription uses the same snapshot schema for initial, periodic, and event-driven updates.

See Margin & Liquidation.