WebSocket API
Portfolio Channel
Authenticated account-level portfolio summary stream
Channel name: portfolio
Authentication
You must send a successful auth message before subscribing.
{ "op": "sub", "channel": "portfolio" }No params field is required. The stream is account-scoped.
Message Types
Snapshot
Sent immediately after subscribing. Contains the full portfolio summary including positions and collateral assets.
{
"channel": "portfolio",
"type": "snapshot",
"data": {
"coll_mode": "COLLATERAL_MODE_MULTI",
"tot_coll_val": "100000.00",
"coll_mrgn_bal": "95000.00",
"cross_mrgn_bal": "90000.00",
"cross_mrgn_ratio": "0.05",
"cross_mrgn_usg": "0.10",
"cross_acct_lev": "1.5",
"free_coll": "85000.00",
"tot_acct_val": "102000.00",
"tot_cross_ntnl": "150000.00",
"tot_cross_init_mrgn": "10000.00",
"tot_cross_maint_mrgn": "5000.00",
"tot_unrlzd_pnl": "2000.00",
"rlzd_pnl": "500.00",
"mrgn_health": "0.95",
"tot_iso_ord_rsrv": "0",
"in_cross_liq": false,
"has_pnd_wdraw": false,
"has_pnd_stake": false,
"has_pnd_unstake": false,
"coll_assets": [],
"pos": [
{
"mkt_idx": 1,
"mkt_id": "BTC-PERP",
"net_sz": "1.5",
"avg_entry_px": "50000.00",
"quote_bal": "-75000.00",
"mark_px": "50100.00",
"idx_px": "50095.00",
"mrgn_mode": "MARGIN_MODE_CROSS",
"lev": "10",
"mrgn_bal": "7500.00",
"init_mrgn_req": "5000.00",
"maint_mrgn_req": "2500.00",
"liq_px": "45100.00",
"unrlzd_pnl": "150.00",
"tot_fund_paid": "5.00",
"iso_usdc_bal": "0",
"free_iso_usdc_bal": "0",
"in_iso_liq": false,
"mrgn_ratio": "0.033"
}
]
},
"gsn": 12345,
"ts": "1234567890000000000"
}Update
Incremental updates to portfolio state. Follows the same structure as snapshot messages.
Fields
Top-level
| Field | Type | Description |
|---|---|---|
data.coll_mode | string | Collateral mode |
data.tot_coll_val | string | Total collateral value |
data.coll_mrgn_bal | string | Collateral margin balance |
data.cross_mrgn_bal | string | Cross margin balance |
data.cross_mrgn_ratio | string | Cross margin ratio |
data.cross_mrgn_usg | string | Cross margin usage |
data.cross_acct_lev | string | Cross account leverage |
data.free_coll | string | Free collateral |
data.tot_acct_val | string | Total account value |
data.tot_cross_ntnl | string | Total cross notional |
data.tot_cross_init_mrgn | string | Total cross initial margin |
data.tot_cross_maint_mrgn | string | Total cross maintenance margin |
data.tot_unrlzd_pnl | string | Total unrealized PnL |
data.rlzd_pnl | string | Realized PnL |
data.mrgn_health | string | Margin health score |
data.tot_iso_ord_rsrv | string | Total isolated order reserve |
data.in_cross_liq | boolean | Account is in cross liquidation |
data.has_pnd_wdraw | boolean | Has pending withdrawal |
data.has_pnd_stake | boolean | Has pending stake |
data.has_pnd_unstake | boolean | Has pending unstake |
data.coll_assets | array | Collateral asset breakdown (see below) |
data.pos | array | Position objects per enabled market (same schema as Position Channel) |
Collateral Asset Fields (coll_assets items)
| Field | Type | Description |
|---|---|---|
asset | string | Asset symbol (e.g. "USDC") |
addr | string | Token contract address |
bal | string | Raw balance |
wdrawable_amt | string | Amount available to withdraw |
mkt_val_usd | string | Market value in USD |
coll_val_usd | string | Collateral value in USD (after haircut) |
coll_val_comp | string | Percentage of total collateral value (0–100, 6 decimal places) |
See the full schema in GET /portfolio.