---
title: "Query account (unsigned)"
method: POST
path: "/account"
tags: ["Account (Unsigned)"]
---

# Query account (unsigned)

`POST /account`

Query account information. **No signature required** - read-only operation.

Accepts a JSON body with POST request.

**Query types**:

| `type` | Returns |
|---|---|
| `fullAccount` | Complete state (margin + positions + orders + leverage settings) |
| `openOrders` | Resting live orders (includes conditional orders parked in conditional books) |
| `fills` | Trade history (last 5000 fills) |
| `positions` | Closed position history (last 5000 positions) |
| `fundingHistory` | Funding payment history (last 5000 payments) |
| `orderHistory` | Terminal order history (last 5000 orders) |
| `activityHistory` | Account activity history (last 5000; transfers/deposits) |
| `riskHistory` | Liquidation and ADL risk events (last 5000) |
| `feeTier` | Account-only fee-tier quote snapshot (`symbol` optional). For global fee state use `GET /feeState`. |

## Request body

- AccountQuery — Account query parameters (no signature needed)
  - `type` 'fullAccount' | 'openOrders' | 'fills' | 'positions' | 'fundingHistory' | 'orderHistory' | 'activityHistory' | 'riskHistory' | 'feeTier', required — Type of account data to retrieve. `feeTier` returns the account-only fee-tier quote; use `GET /feeState` for global fee policy/schedule snapshots.
  - `user` string, required — User public key (base58)
  - `symbol` string — Optional market symbol for scope-specific requests (used by `feeTier`)

## Response `200`

Successful response

- AccountData[]
  - union
    - object
      - `fullAccount` FullAccount — Complete account state with account tree, margin, positions, orders, and leverage settings
        - `kind` 'MasterEOA' | 'SubAccount' | 'IsoAccount' | 'Multisig' — Account kind
        - `parent` string, nullable — Parent account pubkey (present for sub/iso accounts, otherwise `null`)
        - `name` string, nullable — Sub-account display name. Present on responses where `kind: "SubAccount"` (i.e. when the sub-account pubkey was passed as `user`); omitted on master responses.
        - `subAccounts` object[] — Child sub-accounts owned by this master (empty for non-master kinds). The list contains pubkeys only; query a sub-account directly with `type: "fullAccount"` (HTTP) or subscribe to its account stream (WS) to see its `name`.
          - `pubkey` string, required — Sub-account pubkey (base58)
        - `multisigAccounts` string[] — Multisig accounts where this account is the multisig address or a signer member
        - `authorizedAgentWallets` string[] — Agent wallets registered on this account that may sign on its behalf. Agents registered on a master are also authorized to sign for any of the master's sub-accounts. Sub-accounts can additionally register their own agents independently.
        - `builderCodeApprovals` BuilderCodeApproval[] — Approved builder-code recipients for this account. Builder codes are builder-code fees on the wire.
          - `recipient` string — Approved builder-code recipient public key (base58)
          - `maxFee` integer — Maximum approved builder-code fee in basis points
        - `margin` Margin — Account-level margin and PnL
          - `totalBalance` number — Total account equity
          - `availableBalance` number — Available for new orders (totalBalance - marginUsed)
          - `marginUsed` number — Total maintenance margin requirement
          - `notional` number — Total position notional value
          - `realizedPnl` number — Total realized profit/loss
          - `unrealizedPnl` number — Total unrealized profit/loss
          - `fees` number — Total fees paid
          - `funding` number — Total funding payments
        - `positions` Position[] — Open positions with full risk metrics. For master/sub accounts, includes per-instrument isolated-account rows (`iso=true`).
          - `symbol` string — Market symbol
          - `size` number — Position size (negative=short, positive=long)
          - `price` number — Volume-weighted average entry price
          - `fairPrice` number — Current fair/mark price
          - `notional` number — Position notional value
          - `realizedPnl` number — Realized profit/loss
          - `unrealizedPnl` number — Unrealized profit/loss at current fair price
          - `leverage` number — Effective leverage
          - `liquidationPrice` number — Estimated liquidation price
          - `fees` number — Fees paid on this position
          - `funding` number — Funding payments for this position
          - `maintenanceMargin` number — Maintenance margin requirement
          - `lambda` number — Risk lambda parameter
          - `riskAllocation` number — Fraction of portfolio risk allocated
          - `iso` boolean — `true` if this row belongs to a per-instrument isolated account, otherwise `false`
          - `isoPubkey` string, nullable — Present only when `iso=true`; base58 pubkey of the per-instrument isolated account. Use **only** as `to` in an internal `transfer` action to top up isolated-account margin. Isolated-account pubkeys are not valid as `account` on transactions and are not valid `user` values for `POST /account`.
          - `protection` PositionProtection
            - `orders` ProtectionOrderRef[] — Protective order references attached to this position
              - …
        - `openOrders` OrderState[] — Resting live orders, including conditional orders parked in conditional books. For master/sub accounts, includes per-instrument isolated-account rows (`iso=true`).
          - `symbol` string — Market symbol
          - `orderId` string — Order ID (base58) - use for cancellation
          - `price` number — Order price (for conditional roots this is projected from trigger threshold when direct price is not set)
          - `originalSize` number — Original order size (signed; negative values indicate sell-side intent)
          - `size` number — Remaining size (signed; negative values indicate sell-side intent; `trigger` baskets use `0` because they are action containers, not direct sized orders)
          - `filledSize` number — Filled size
          - `vwap` number — Volume-weighted average fill price (0 if no fills)
          - `maker` boolean — true if order is maker (resting on book)
          - `reduceOnly` boolean — true if reduce-only order
          - `orderType` 'limit' | 'market' | 'stop' | 'takeProfit' | 'range' | 'trigger' | 'trailing' — Inferred order type for snapshots/open-orders
          - `trigger` TriggerSpec
            - `isAbove` boolean, nullable — Trigger direction when encoded
            - `px` number — Trigger threshold price
            - `lim` number, nullable — Optional post-trigger limit price (`null` means market)
            - `oco` string, nullable — Optional linked OCO sibling order ID
            - `pxHi` number, nullable — Optional upper trigger threshold for range/OCO
            - `limHi` number, nullable — Optional upper post-trigger limit for range/OCO
            - `trb` integer, nullable — Trailing distance in bps (trailing orders only)
            - `stb` integer, nullable — Favorable reset step in bps (trailing orders only)
          - `tif` 'gtc' | 'ioc' | 'postOnly' — Time in force
          - `status` 'pending' | 'placed' | 'resting' | 'working' | 'modified' | 'filled' | 'partiallyFilled' | 'cancelled' | 'cancelledRiskLimit' | 'cancelledSelfCrossing' | 'cancelledReduceOnly' | 'cancelledIoc' | 'rejectedInvalid' | 'rejectedRiskLimit' | 'rejectedCrossing' | 'rejectedDuplicate' | 'triggered' | 'siblingCancelled' | 'triggerFailed' — Order status
          - `timestamp` integer — Order placement time (nanoseconds)
          - `iso` boolean — `true` if this row belongs to a per-instrument isolated account, otherwise `false`
        - `pendingOnFill` PendingOnFillPlan[] — Registered on-fill plans waiting for parent order fill
          - `parentOrderId` string — Parent resting order ID that activates these actions on first fill
          - `actions` object[] — Consequent actions executed when parent order first fills
        - `feeTiers` FeeTierQuote[] — Effective fee tier snapshot rows for global and instrument scopes
          - `symbol` string — Scope symbol (`global` or market symbol)
          - `rollingVolume` number
          - `tierIndex` integer
          - `tierThreshold` number
          - `makerBps` number
          - `takerBps` number
          - `windowDays` integer
        - `leverageSettings` LeverageEntry[] — Per-symbol leverage settings
          - `symbol` string — Market symbol
          - `leverage` number — Maximum leverage (1.0 to 50.0)
    - object
      - `openOrder` OrderState — Order status and details
        - `symbol` string — Market symbol
        - `orderId` string — Order ID (base58) - use for cancellation
        - `price` number — Order price (for conditional roots this is projected from trigger threshold when direct price is not set)
        - `originalSize` number — Original order size (signed; negative values indicate sell-side intent)
        - `size` number — Remaining size (signed; negative values indicate sell-side intent; `trigger` baskets use `0` because they are action containers, not direct sized orders)
        - `filledSize` number — Filled size
        - `vwap` number — Volume-weighted average fill price (0 if no fills)
        - `maker` boolean — true if order is maker (resting on book)
        - `reduceOnly` boolean — true if reduce-only order
        - `orderType` 'limit' | 'market' | 'stop' | 'takeProfit' | 'range' | 'trigger' | 'trailing' — Inferred order type for snapshots/open-orders
        - `trigger` TriggerSpec
          - `isAbove` boolean, nullable — Trigger direction when encoded
          - `px` number — Trigger threshold price
          - `lim` number, nullable — Optional post-trigger limit price (`null` means market)
          - `oco` string, nullable — Optional linked OCO sibling order ID
          - `pxHi` number, nullable — Optional upper trigger threshold for range/OCO
          - `limHi` number, nullable — Optional upper post-trigger limit for range/OCO
          - `trb` integer, nullable — Trailing distance in bps (trailing orders only)
          - `stb` integer, nullable — Favorable reset step in bps (trailing orders only)
        - `tif` 'gtc' | 'ioc' | 'postOnly' — Time in force
        - `status` 'pending' | 'placed' | 'resting' | 'working' | 'modified' | 'filled' | 'partiallyFilled' | 'cancelled' | 'cancelledRiskLimit' | 'cancelledSelfCrossing' | 'cancelledReduceOnly' | 'cancelledIoc' | 'rejectedInvalid' | 'rejectedRiskLimit' | 'rejectedCrossing' | 'rejectedDuplicate' | 'triggered' | 'siblingCancelled' | 'triggerFailed' — Order status
        - `timestamp` integer — Order placement time (nanoseconds)
        - `iso` boolean — `true` if this row belongs to a per-instrument isolated account, otherwise `false`
    - object
      - `fills` Fill — Trade execution (fill)
        - `maker` string — Maker public key (base58)
        - `taker` string — Taker public key (base58)
        - `orderIdMaker` string — Maker order ID (base58)
        - `orderIdTaker` string — Taker order ID (base58)
        - `isBuy` boolean — Taker side (true=bought, false=sold)
        - `symbol` string
        - `amount` number — Trade size
        - `price` number — Execution price
        - `makerFee` number — Maker fee (negative means rebate)
        - `takerFee` number — Taker fee (negative means rebate)
        - `fee` number — Effective fee for queried row (`makerFee` for maker row, `takerFee` for taker row)
        - `reasonCode` 0 | 1 | 2 | 3 — Fill reason code: `0=normal`, `1=liquidation`, `2=adl`, `3=liquidation_sweep`
        - `reason` 'liquidation' | 'adl' | 'liquidation_sweep' — Fill reason label (present only if non-normal)
        - `counterpartyHint` string — Short counterparty key hint for the queried user (`xxxx..yyyy`)
        - `slot` integer — Slot number
        - `timestamp` integer — Execution time (nanoseconds)
        - `iso` boolean — `true` if this row belongs to a per-instrument isolated account, otherwise `false`
    - object
      - `positions` ClosedPosition — Closed position history record
        - `owner` string — Owner public key (base58)
        - `symbol` string — Market symbol
        - `quantity` number — Closed position size (signed; long=positive, short=negative)
        - `maxQuantity` number — Legacy alias of quantity (kept for backward compatibility)
        - `totalVolume` number — Total traded volume over position lifetime
        - `avgOpenPrice` number — Volume-weighted average entry price
        - `avgClosePrice` number — Volume-weighted average exit price
        - `realizedPnl` number — Total realized profit/loss
        - `fees` number — Total fees paid
        - `funding` number — Total funding payments (positive=received, negative=paid)
        - `openTime` integer — Position open timestamp (nanoseconds)
        - `closeTime` integer — Position close timestamp (nanoseconds)
        - `closeReason` 'normal' | 'liquidation' | 'adl' | 'liquidation_sweep' — Reason for position closure
        - `iso` boolean — `true` if this row belongs to a per-instrument isolated account, otherwise `false`
    - object
      - `fundingPayment` FundingPayment — Funding payment record
        - `owner` string — Owner public key (base58)
        - `symbol` string — Market symbol
        - `size` number — Position size at time of funding (positive=long, negative=short)
        - `payment` number — Funding payment amount in USD (positive=received, negative=paid)
        - `fundingRate` number — Applied funding rate
        - `markPrice` number — Fair price at time of funding
        - `slot` integer — Slot number when funding was applied
        - `timestamp` integer — Timestamp (nanoseconds)
        - `iso` boolean — `true` if this row belongs to a per-instrument isolated account, otherwise `false`
    - object
      - `orderHistory` OrderHistoryEntry — Terminal order history record
        - `orderId` string — Order ID (base58)
        - `symbol` string — Market symbol
        - `side` 'buy' | 'sell' — Order side
        - `orderType` 'limit' | 'market' | 'stop' | 'stopLimit' | 'takeProfit' | 'range' | 'trigger' | 'trailing' — Order type
        - `tif` 'gtc' | 'ioc' | 'postOnly' — Time in force
        - `price` number — Order price
        - `vwap` number — Volume-weighted average fill price (0 if no fills)
        - `originalSize` number — Original order size
        - `executedSize` number — Amount filled
        - `reduceOnly` boolean — Whether order was reduce-only
        - `status` 'filled' | 'partiallyFilled' | 'cancelled' | 'cancelledRiskLimit' | 'cancelledSelfCrossing' | 'cancelledReduceOnly' | 'cancelledIoc' | 'rejectedInvalid' | 'rejectedRiskLimit' | 'rejectedCrossing' | 'rejectedDuplicate' — Terminal order status
        - `trigger` TriggerSpec
          - `isAbove` boolean, nullable — Trigger direction when encoded
          - `px` number — Trigger threshold price
          - `lim` number, nullable — Optional post-trigger limit price (`null` means market)
          - `oco` string, nullable — Optional linked OCO sibling order ID
          - `pxHi` number, nullable — Optional upper trigger threshold for range/OCO
          - `limHi` number, nullable — Optional upper post-trigger limit for range/OCO
          - `trb` integer, nullable — Trailing distance in bps (trailing orders only)
          - `stb` integer, nullable — Favorable reset step in bps (trailing orders only)
        - `reason` string, nullable — Rejection/cancellation reason (optional)
        - `slot` integer — Slot number when order became terminal
        - `timestamp` integer — Timestamp (nanoseconds)
        - `iso` boolean — `true` if this row belongs to a per-instrument isolated account, otherwise `false`
    - object
      - `activityHistory` ActivityHistoryEntry — Account activity history row (transfers, deposits, builder-code fee credits)
        - `activityType` 'transferInternal' | 'transferExternal' | 'deposit' | 'withdrawal' | 'builderCode' | 'unknown'
        - `status` 'completed' | 'failed' | 'ongoing' | 'unknown'
        - `from` string — Source account pubkey (base58)
        - `to` string — Destination account pubkey (base58)
        - `symbol` string — Margin asset symbol
        - `amount` number
        - `reason` string, nullable — Optional failure/details string
        - `iso` boolean — `true` if the row belongs to an implicit isolated-lane owner stream
        - `slot` integer
        - `timestamp` integer — Event timestamp (nanoseconds)
        - `sequence` integer
    - object
      - `riskHistory` RiskHistoryEntry — Liquidation or ADL risk event row (returned by `type: "riskHistory"`)
        - `owner` string — Account pubkey on which the event was recorded (base58)
        - `symbol` string
        - `isBuy` boolean — Direction of the risk fill
        - `amount` number
        - `price` number
        - `eventType` 'liquidation' | 'adl'
        - `marginPrior` number — Margin balance before this risk event
        - `marginAfter` number — Margin balance after this risk event
        - `reason` string, nullable — Optional human-readable reason (e.g. shortfall / underfill tagging)
        - `iso` boolean — `true` if the row belongs to a per-instrument isolated account
        - `slot` integer
        - `timestamp` integer — Event timestamp (nanoseconds)
        - `sequence` integer
    - object
      - `feeTier` FeeTierAccountQuote — Account-only fee-tier quote returned by `POST /account` with `type: "feeTier"`. For global fee state (policy/schedule/settlement totals), use `GET /feeState`.
        - `scopeInstrument` string — Instrument scope resolved for this quote (`global` or a market symbol)
        - `rollingVolume` number — Account rolling volume in resolved scope window
        - `tierIndex` integer — Active tier index (0-based)
        - `tierThreshold` number — Threshold volume of the active tier row
        - `makerBps` number
        - `takerBps` number
        - `windowDays` integer — Rolling window length in days

## Other responses

- `404` — Not Found - Symbol or account doesn't exist
- `408` — Request Timeout - Executor didn't respond within 2s
- `500` — Internal Server Error - Database or channel error

---

[API](https://skmtc.dev/bulk/apis/bulk-trade-api.md) · [All operations](https://skmtc.dev/bulk/apis/bulk-trade-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/bulk/bulk-trade-api/revisions/087f7b45aa1a/schema)
