openapi: 3.0.0
info:
title: Backpack Exchange API
description: "\n# Introduction\n\nWelcome to the Backpack Exchange API. This API is for programmatic trade execution. All\
\ of the endpoints require requests to be signed with an ED25519 keypair for authentication.\n\nThe API is hosted at `https://api.backpack.exchange/`\
\ and the WS API is hosted at `wss://ws.backpack.exchange/`.\n\n# Authentication\n\n\n## Signing requests\n\nSigned requests\
\ are required for any API calls that mutate state. Additionally, some read only requests can be performed by signing\
\ or via session authentication.\n\nSigned requests require the following additional headers:\n\n- `X-Timestamp` - Unix\
\ time in milliseconds that the request was sent.\n- `X-Window` - Time window in milliseconds that the request is valid\
\ for, default is `5000` and maximum is `60000`.\n- `X-API-Key` - Base64 encoded verifying key of the ED25519 keypair.\n\
- `X-Signature` - Base64 encoded signature generated according to the instructions below.\n\n### Generate ED25519 Keys\n\
\nYou can generate a private/public ED25519 keypair using this Python one-liner:\n\n```python\npython3 -c \"from cryptography.hazmat.primitives.asymmetric\
\ import ed25519; import base64; key = ed25519.Ed25519PrivateKey.generate(); seed = key.private_bytes_raw(); pub = key.public_key().public_bytes_raw();\
\ print(f'Seed: {base64.b64encode(seed).decode()}\\nPublic Key: {base64.b64encode(pub).decode()}')\"\n```\n\nThis will\
\ output your base64-encoded private key (seed) and public key that can be used for API authentication.\n\n### Signature\
\ Generation\n\nTo generate a signature perform the following:\n\n1) The key/values of the request body or query parameters\
\ should be ordered alphabetically and then turned into query string format.\n\n2) Append the header values for the timestamp\
\ and receive window to the above generated string in the format `×tamp=<timestamp>&window=<window>`. If no `X-Window`\
\ header is passed the default value of `5000` still needs to be added to the signing string.\n\nEach request also has\
\ an instruction type, valid instructions are:\n\n```\naccountQuery\nbalanceQuery\nborrowLendExecute\nborrowHistoryQueryAll\n\
collateralQuery\ndepositAddressQuery\ndepositQueryAll\nfillHistoryQueryAll\nfundingHistoryQueryAll\ninterestHistoryQueryAll\n\
orderCancel\norderCancelAll\norderExecute\norderHistoryQueryAll\norderQuery\norderQueryAll\npnlHistoryQueryAll\npositionHistoryQueryAll\n\
positionQuery\nquoteSubmit\nstrategyCancel\nstrategyCancelAll\nstrategyCreate\nstrategyHistoryQueryAll\nstrategyQuery\n\
strategyQueryAll\nwithdraw\nwithdrawalQueryAll\n```\n\nThe correct instruction type should be prefixed to the signing\
\ string. The instruction types for each request are documented alongside the request.\n\nFor example, an API request\
\ to cancel an order with the following body:\n\n```json\n{\n \"orderId\": 28\n \"symbol\": \"BTC_USDT\",\n}\n```\n\
\nWould require the following to be signed:\n\n```text\ninstruction=orderCancel&orderId=28&symbol=BTC_USDT×tamp=1614550000000&window=5000\n\
```\n\nRegarding batch order execution (`POST /orders`), for each order in the batch, the order parameters should be ordered\
\ alphabetically and then turned into query string format. The orderExecute instruction should then be prefixed to that\
\ string.\nThe query strings for the orders should be concatenated with `&` and the timestamp and window appended at the\
\ end.\n\nFor example, an API request for an order execution batch with the following body:\n\n```json\n[\n {\n \
\ \"symbol\": \"SOL_USDC_PERP\",\n \"side\": \"Bid\",\n \"orderType\": \"Limit\",\n \"price\"\
: \"141\",\n \"quantity\": \"12\"\n },\n {\n \"symbol\": \"SOL_USDC_PERP\",\n \"side\": \"\
Bid\",\n \"orderType\": \"Limit\",\n \"price\": \"140\",\n \"quantity\": \"11\"\n }\n]\n```\n\n\
Would require the following to be signed:\n\n```text\ninstruction=orderExecute&orderType=Limit&price=141&quantity=12&side=Bid&symbol=SOL_USDC_PERP&instruction=orderExecute&orderType=Limit&price=140&quantity=11&side=Bid&symbol=SOL_USDC_PERP×tamp=1750793021519&window=5000\n\
```\n\nIf the API endpoint requires query parameters instead of a request body, the same procedure should be used on the\
\ query parameters. If the API endpoint does not have a request body or query parameters, only the timestamp and receive\
\ window need to be signed.\n\nThis message should be signed using the private key of the ED25519 keypair that corresponds\
\ to the public key in the `X-API-Key` header. The signature should then be base64 encoded and submitted in the `X-Signature`\
\ header.\n\n\n<br /><br />\n\n---\n\n\n# Infrastructure\n\nOrders are processed through a single linear command stream.\
\ All orders from all API instances feed into one stream, which is consumed by the matching engine sequentially.\n\n##\
\ Architecture\n\n```mermaid\nflowchart TB\n subgraph Client[\"Client\"]\n direction LR\n REST[\"REST\
\ API Client\"]\n WSC[\"WebSocket Client\"]\n end\n\n subgraph Edge[\"Edge\"]\n direction LR\n \
\ WAF[\"WAF\"]\n CDN[\"CDN\"]\n end\n\n ALB[\"Load Balancer\"]\n API[\"API<br/><i>N pods, Pre-validation</i>\"\
]\n BUS[\"Message Bus\"]\n\n subgraph Engine[\"Matching Engine\"]\n direction LR\n CLEARING[\"Clearing\"\
]\n OB[\"Order Book\"]\n SETTLE[\"Settlement\"]\n end\n\n WSLB[\"WebSocket LB\"]\n APIWS[\"WebSocket\
\ API<br/><i>N pods</i>\"]\n\n subgraph Persistence[\"Persistence\"]\n direction LR\n DB[\"Database\"\
]\n SNAP[\"Snapshots\"]\n end\n\n REST <-->|\"Order / Execution Response\"| WAF\n WAF <--> CDN\n CDN\
\ <--> ALB\n ALB <--> API\n API <--> BUS\n BUS <--> Engine\n\n CLEARING --> OB\n OB --> SETTLE\n\n Engine\
\ --> WSLB\n WSLB --> APIWS\n APIWS -->|\"Order Updates / Depth / Trades\"| WSC\n\n Engine -.-> Persistence\n\
\n classDef hotpath fill:#ff6b6b,stroke:#c0392b,color:#fff\n classDef bus fill:#f39c12,stroke:#e67e22,color:#fff\n\
\ classDef client fill:#3498db,stroke:#2980b9,color:#fff\n classDef persist fill:#95a5a6,stroke:#7f8c8d,color:#fff\n\
\ classDef edge fill:#1abc9c,stroke:#16a085,color:#fff\n\n class REST,WSC client\n class WAF,CDN,ALB,WSLB edge\n\
\ class API,APIWS,CLEARING,OB,SETTLE hotpath\n class BUS bus\n class DB,SNAP persist\n```\n\n## Order Lifecycle\n\
\n```mermaid\n%%{init: {'theme': 'neutral', 'themeVariables': {'fontSize': '12px'}}}%%\nsequenceDiagram\n participant\
\ Client as Client\n participant API as API\n participant Engine as Matching Engine\n participant WS as WebSocket\
\ API\n Client->>+API: POST /api/v1/order (signed)\n API->>+Engine: Order command\n Note over Engine: Clear \u2192\
\ Match \u2192 Settle\n Engine-->>-API: Execution response\n API->>-Client: HTTP 200 \u2014 Order result\n Engine->>WS:\
\ Engine events\n WS->>Client: Order updates / Depth / Trades\n```\n\n\n\n<br /><br />\n\n---\n\n# Changelog\n\n##\
\ 2025-11-12\n\n- Backstop liquidation fills now include a non-zero `tradeId` field on an on-going basis. Previously such\
\ fills had a\n zero `tradeId`. This applies to the `/fills` endpoint as well as the trade stream.\n\n## 2025-11-10\n\
\n- Add a specific error message for withdrawal attempts to non-2FA exempt withdrawal addresses.\n- Set a default limit\
\ of `1000` levels each side of the book for `/depth` endpoint.\n\n## 2025-10-23\n\n- Add `j` and `k` fields to the order\
\ update stream (take profit limit price and stop loss limit price).\n\n## 2025-09-02\n\n- The `/depth` endpoint now returns\
\ a limit of 5,000 price levels on each side of the book.\n\n## 2025-09-01\n\n- The `cumulativeInterest` response field\
\ is being removed from the `/position`endpoint.\n- Estimated liquidation price or `l` is being removed from the position\
\ update stream. It will remain as a placeholder\n and be set to 0. It will be removed in the future, so client's should\
\ not rely on its presence.\n- Liquidation price can be queried for a single position using the Positions API `/position`\
\ for example\n `/position?symbol=BTC_USDC_PERP`.\n\n## 2025-08-07\n\n- `/history/pnl` has been removed.\n\n## 2025-06-08\n\
\n- The order id format is changing, it is no longer a byte shifted timestamp. It is no longer possible to derive the\n\
\ order timestamp from the order id. This change will take place at Monday June 9th, 01:00 UTC.\n\n## 2025-04-22\n\n\
- The `/fills` endpoint now returns all fills for the account, including fills from system orders as well as client\n\
\ orders. System orders include liquidations, ADLs and collateral conversions. Previously, by default, it only returned\n\
\ fills from client orders. This behavior can be achieved by setting the `fillType` parameter to `User`.\n\n## 2025-04-08\n\
\n- Added funding rate lower and upper bounds to `/markets` and `/market` endpoints.\n\n## 2025-03-26\n\n- Add open interest\
\ stream `openInterest.<symbol>`.\n- Added the option to query `/history/borrowLend/positions` with a signed request using\
\ the instruction\n `borrowPositionHistoryQueryAll`.\n\n## 2025-03-19\n\n- The leverage filter has been removed from\
\ `/markets` and `/market` endpoints.\n- Added `/openInterest` now takes `symbol` as an optional parameter. When not set,\
\ all markets are returned.\n- `/openInterests` has been deprecated.\n- Add stop loss and take profit fields to `/orders/execute`.\n\
- Add `I` field to the order update stream (related order id).\n- Add `a` and `b` fields to the order update stream (take\
\ profit trigger price and stop loss trigger price).\n\n## 2025-02-28\n\n- Added `clientId` to fill history.\n\n## 2025-02-11\n\
\n- An `O` field has been added to the order update stream. It denotes the origin of the update. The possible values are:\n\
\ - `USER`: The origin of the update was due to order entry by the user.\n - `LIQUIDATION_AUTOCLOSE`: The origin\
\ of the update was due to a liquidation by the liquidation engine.\n - `ADL_AUTOCLOSE`: The origin of the update was\
\ due to an ADL (auto-deleveraging) event.\n - `COLLATERAL_CONVERSION`: The origin of the update was due to a collateral\
\ conversion to settle debt on the\n account.\n - `SETTLEMENT_AUTOCLOSE`: The origin of the update was due to\
\ the settlement of a position on a dated market.\n - `BACKSTOP_LIQUIDITY_PROVIDER`: The origin of the update was due\
\ to a backstop liquidity provider facilitating a\n liquidation.\n\n## 2025-02-07\n\n- Added `r` to denote a reduce\
\ only order on the order updates stream.\n- Added `reduceOnly` to the get orders endpoint.\n\n## 2025-02-03\n\n- Added\
\ `openInterestLimit` to the markets endpoint. Applicable to futures markets only.\n- Added `orderModified` event to the\
\ order update stream. A resting reduce only order's quantity can be decreased in\n order to prevent position side reversal.\n\
\n## 2025-01-09\n\n- Added `marketType` to the markets endpoint.\n- Added an optional `marketType` filter to the fills\
\ and the orders endpoints.\n\n## 2024-12-03\n\n- Add order expiry reason to order update stream.\n- Add `cumulativeInterest`\
\ to borrow lend position.\n\n## 2024-12-02\n\n- Add borrow lend history per position endpoint.\n\n## 2024-11-10\n\n-\
\ Add `timestamp` field denoting the system time in unix-epoch microseconds to the depth endpoint.\n\n## 2024-10-15\n\n\
- Convert all error responses to JSON and add a error code.\n\n## 2024-05-14\n\n- Add `executedQuantity` and `executedQuoteQuantity`\
\ to order history endpoint.\n\n## 2024-05-03\n\n- Add single market order update stream `account.orderUpdate.<symbol>`.\n\
\n## 2024-05-02\n\n- Add optional `from` and `to` timestamp to get withdrawals endpoint.\n\n## 2024-05-01\n\n- Add optional\
\ `from` and `to` timestamp to get deposits endpoint.\n\n## 2024-03-14\n\n- Add optional `orderId` filter to order history\
\ endpoint.\n- Add optional `from` and `to` timestamp to order fills endpoint.\n\n## 2024-02-28\n\n- Return the withdrawal\
\ in request withdrawal response.\n\n## 2024-02-24\n\n- An additional field `t` was added to the private order update\
\ stream. It is the `trade_id` of the fill that generated\n the order update.\n- Added a maximum value for the `X-Window`\
\ header of `60000`.\n\n## 2024-01-16\n\n### Breaking\n\n- A new websocket API is available at `wss://ws.backpack.exchange`.\
\ Please see the documentation. The previous API\n remains on the same endpoint and will be deprecated after a migration\
\ period. The new API changes the following:\n - Subscription endpoint is now `wss://ws.backpack.exchange` instead\
\ of `wss://ws.backpack.exchange/stream`.\n - Can subscribe and unsubscribe to/from multiple streams by passing more\
\ than one in the `params` field.\n - Signature should now be sent in a separate `signature` field.\n - Signature\
\ instruction changed from `accountQuery` to `subscribe`.\n - Event and engine timestamps are now in `microseconds`\
\ instead of `milliseconds`.\n - Add engine timestamp to `bookTicker`, `depth`, and `order` streams.\n - Add quote\
\ asset volume to ticker stream.\n - Add sequential trade id to trade stream.\n - Rename the event type in the depth\
\ stream from `depthEvent` to `depth`.\n - Change the format of streams from `<symbol>@<type>` to `<type>.<symbol>`\
\ or `kline.<interval>.<symbol>` for\n K-lines.\n - Flatten the K-Line in the K-line stream so its not nested.\n\
\n## 2024-01-11\n\n### Breaking\n\n- Replaced `identifier` field on deposits with `transaction_hash` and `provider_id`.\n\
\ This aims to provide clearer representation of the field, particularly for fiat deposits.\n- Removed duplicate `pending`\
\ values from the `WithdrawalStatus` and `DepositStatus` spec enum.\n\n\n<br /><br />\n\n---\n "
version: '1.0'
x-logo:
url: https://cdn.prod.website-files.com/66830ad123bea7f626bcf58f/68eccb03852237fd98ffad9b_Backpack-Icon-Color.svg
altText: Backpack Exchange
contact:
name: Backpack Exchange Support
url: https://support.backpack.exchange/
license:
name: Proprietary
servers:
- url: https://api.backpack.exchange
tags:
- name: API Keys
description: API key management.
- name: Account
description: Account settings and limits.
- name: Account Limits
description: Account limits.
- name: Achievements
description: Achievements.
- name: Address
description: Saved addresses.
- name: Affiliate
description: Affiliate program.
- name: Assets
description: Assets and collateral data.
- name: Auth
description: Authentication.
- name: Banxa
description: Banxa fiat on-ramp.
- name: Bolt Card
description: Bolt card.
- name: Borrow Lend
description: Borrowing and lending.
- name: Borrow Lend Markets
description: Borrowing and lending.
- name: Broker
description: Broker.
- name: Capital
description: Capital management.
- name: Chat
description: Chat messaging service.
- name: Country
description: Country data.
- name: Disclosures
description: Disclosures.
- name: Documents
description: Document uploads.
- name: Easy Euro
description: Easy Euro fiat.
- name: Entity
description: Corporate entities.
- name: Entity KYC
description: Entity KYC details.
- name: Equals Money
description: Equals Money fiat.
- name: European Private Beta
description: EU private beta.
- name: FTX Creditor Claims
description: FTX Creditor Claims.
- name: FTX EU Claims
description: FTX EU claims.
- name: Fee Tiers
description: Fee tiers.
- name: Front
description: Front customer service webhooks.
- name: Keypair
description: Keypairs.
- name: Know Your Customer
description: KYC verification.
- name: Know Your Transaction
description: KYT compliance.
- name: League
description: Private leagues and leaderboards.
- name: Market Data
description: Market data.
- name: Markets
description: Public market data.
- name: Notification History
description: Notification history (inbox) for the authenticated user.
- name: Notifications
description: Notifications.
- name: Order
description: Order management.
- name: Passkeys
description: Passkey authentication.
- name: Performance
description: Performance.
- name: Plaid
description: Plaid bank linking.
- name: Portfolio
description: Portfolio.
- name: Position
description: Positions and futures data.
- name: Prediction
description: Prediction events.
- name: Preferences
description: Preferences.
- name: Price Notifications
description: Price notifications.
- name: Proof of Reserves
description: Proof of reserves.
- name: Public Profile
description: Public profile.
- name: RFQ
description: RFQ (Request For Quote) - Maker.
- name: Referrals
description: Referral program.
- name: Rewards
description: Rewards.
- name: Risk Dashboard
description: Risk dashboard.
- name: Safe
description: Safe data.
- name: Satoshi Test
description: Satoshi test.
- name: Service
description: Service tokens.
- name: Session
description: Login sessions.
- name: Social Connections
description: Social account connections.
- name: Staking
description: Staking.
- name: Statistics
description: Statistics.
- name: Stocks
description: Stock market data.
- name: Strategy
description: Strategies.
- name: Streams
description: "# Usage\n\n## Subscribing\n\nTo use the websocket API, connect to\n`wss://ws.backpack.exchange`.\n\nTo subscribe\
\ to a stream with the name `stream` send a text frame\nover the websocket connection with the following JSON payload:\n\
\n```\n{\n \"method\": \"SUBSCRIBE\",\n \"params\": [\"stream\"]\n}\n```\n\nSimilarly, to unsubscribe from a stream\
\ with the name `stream`:\n\n```\n{\n \"method\": \"UNSUBSCRIBE\",\n \"params\": [\"stream\"]\n}\n```\n\nYou can subscribe\
\ or unsubscribe from multiple streams if you include\nmore than one in the params field.\n\nAll data from streams is\
\ wrapped in a JSON object of the following form:\n\n```\n{\n \"stream\": \"<stream>\",\n \"data\": \"<payload>\"\n\
}\n```\n\nThe following command can be used to test subscribing to a stream:\n```\n(sleep 1; \\\necho '{\"method\":\"\
SUBSCRIBE\",\"params\":[\"depth.SOL_USDC\"]}';\\\ncat) |\\\nwscat -c wss://ws.backpack.exchange\n```\nThe payloads for\
\ each stream time are outlined below.\n\n## Timing\n\nTimestamps are in microseconds (except for the K-line start and\
\ end\ntimes). The event timestamp is the time the event was emitted from\nthe websocket server, and the engine timestamp\
\ is the time the event\nwas generated by the matching engine.\n\nIf a message aggregates more than one event (for example,\
\ a depth\nmessage), the engine timestamp will be the timestamp of the last\nmatching engine event.\n\n## Keeping the\
\ connection alive\n\nTo keep the connection alive, a `Ping` frame will be sent from the\nserver every 60s, and a `Pong`\
\ is expected to be received from the\nclient. If a `Pong` is not received within 120s, a `Close` frame will be\nsent\
\ and the connection will be closed.\n\nIf the server is shutting down, a `Close` frame will be sent and then a\ngrace\
\ period of 30s will be given before the connection is closed. The\nclient should reconnect after receiving the `Close`\
\ frame. The client\nwill be reconnected to a server that is not shutting down.\n\n# Private\n\nSubscribing to a private\
\ stream requires a valid signature generated\nfrom an ED25519 keypair. For stream subscriptions, the signature\nshould\
\ be of the form:\n\n```text\ninstruction=subscribe×tamp=1614550000000&window=5000\n```\n\nWhere the timestamp and\
\ window are in milliseconds.\n\nPrivate streams are prefixed with `account.` and require signature data\nto be submitted\
\ in the subscribe parameters. The verifying key and\nsignature should be base64 encoded.\n\n```\n{\n \"method\": \"\
SUBSCRIBE\",\n \"params\": [\"stream\"],\n \"signature\": [\"<verifying key>\", \"<signature>\", \"<timestamp>\", \"\
<window>\"]\n}\n````\n\n## Order update\n\nOn any mutation to an order the order will be pushed to the order update\n\
stream. The event type of the order update will be one of the\nfollowing:\n\n- `orderAccepted`\n- `orderCancelled`\n-\
\ `orderExpired`\n- `orderFill`\n- `orderModified`\n- `triggerPlaced`\n- `triggerFailed`\n\nAn `orderModified` update\
\ will be received when a resting reduce only\norder's quantity is decreased in order to prevent position side\nreversal.\n\
\n### Stream Name Format\n- For all markets: `account.orderUpdate`\n- For single market: `account.orderUpdate.<symbol>`\n\
\n```\n{\n \"e\": \"orderAccepted\", // Event type\n \"E\": 1694687692980000, // Event time in microseconds\n \"\
s\": \"SOL_USD\", // Symbol\n \"c\": 123, // Client order ID\n \"S\": \"Bid\", //\
\ Side\n \"o\": \"LIMIT\", // Order type\n \"f\": \"GTC\", // Time in force\n \"q\": \"32123\"\
, // Quantity\n \"Q\": \"32123\", // Quantity in quote\n \"p\": \"20\", // Price\n\
\ \"P\": \"21\", // Trigger price\n \"B\": \"LastPrice\", // Trigger by\n \"a\": \"30\", \
\ // Take profit trigger price\n \"b\": \"10\", // Stop loss trigger price\n \"j\": \"30\", \
\ // Take profit limit price\n \"k\": \"10\", // Stop loss limit price\n \"d\": \"MarkPrice\",\
\ // Take profit trigger by\n \"g\": \"IndexPrice\", // Stop loss trigger by\n \"Y\": \"10\", \
\ // Trigger quantity\n \"X\": \"New\", // Order state\n \"R\": \"PRICE_BAND\", // Order expiry reason\n\
\ \"i\": \"1111343026172067\" // Order ID\n \"t\": 567, // Trade ID\n \"l\": \"1.23\", //\
\ Fill quantity\n \"z\": \"321\", // Executed quantity\n \"Z\": \"123\", // Executed quantity\
\ in quote\n \"L\": \"20\", // Fill price\n \"m\": true, // Whether the order was maker\n\
\ \"n\": \"23\", // Fee\n \"N\": \"USD\", // Fee symbol\n \"V\": \"RejectTaker\", // Self\
\ trade prevention\n \"T\": 1694687692989999, // Engine timestamp in microseconds\n \"O\": \"USER\" //\
\ Origin of the update\n \"I\": \"1111343026156135\" // Related order ID\n \"H\": 6023471188 // Strategy ID\n\
\ \"y\": true // Post only\n}\n```\n\nThere are several possible values for the `O` field (origin of the\n\
update):\n- `USER`: The origin of the update was due to order entry by the user.\n- `LIQUIDATION_AUTOCLOSE`: The origin\
\ of the update was due to a\nliquidation by the liquidation engine.\n- `ADL_AUTOCLOSE`: The origin of the update was\
\ due to an ADL\n(auto-deleveraging) event.\n- `COLLATERAL_CONVERSION`: The origin of the update was due to a\ncollateral\
\ conversion to settle debt on the account.\n- `SETTLEMENT_AUTOCLOSE`: The origin of the update was due to the\nsettlement\
\ of a position on a dated market.\n- `BACKSTOP_LIQUIDITY_PROVIDER`: The origin of the update was due to a\nbackstop liquidity\
\ provider facilitating a liquidation.\n\nSome fields are conditional on the order settings or event type:\n\n- `c` -\
\ Only present if the order has a client order ID.\n- `q` - Only present if the order has a quantity set.\n- `Q` - Only\
\ present if the order is reverse market order.\n- `p` - Only present if the order is a limit order.\n- `P` - Only present\
\ if the order is a trigger order.\n- `B` - Only present if the order is a trigger order.\n- `a` - Only present if the\
\ order has a take profit trigger price set.\n- `b` - Only present if the order has a stop loss trigger price set.\n-\
\ `d` - Only present if the order has a take profit trigger price set.\n- `g` - Only present if the order has a stop loss\
\ trigger price set.\n- `Y` - Only present if the order is a trigger order.\n- `R` - Only present if the event is a `orderExpired`\
\ event.\n- `t` - Only present if the event is a `orderFill` event.\n- `l` - Only present if the event is a `orderFill`\
\ event.\n- `L` - Only present if the event is a `orderFill` event.\n- `m` - Only present if the event is a `orderFill`\
\ event.\n- `n` - Only present if the event is a `orderFill` event.\n- `N` - Only present if the event is a `orderFill`\
\ event.\n\n## Position update\n\nOn any mutation to a position the position will be pushed to the\nposition update stream.\
\ The event type of the position update will\nbe one of the following:\n\n- `positionAdjusted`\n- `positionOpened`\n-\
\ `positionClosed`\n\nOn subscription, a message will be sent to the client with the current\nopen positions, if any.\
\ The `e` field will not be present in the\nmessage.\n\n### Stream Name Format\n- For all markets: `account.positionUpdate`\n\
- For single market: `account.positionUpdate.<symbol>`\n\n```\n{\n \"e\": \"positionOpened\", // Event type\n \"E\"\
: 1694687692980000, // Event time in microseconds\n \"s\": \"SOL_USDC_PERP\", // Symbol\n \"b\": 123, \
\ // Break event price\n \"B\": 122, // Entry price\n \"f\": 0.5, // Initial margin\
\ fraction\n \"M\": 122, // Mark price\n \"m\": 0.01, // Maintenance margin fraction\n \"\
q\": 5, // Net quantity\n \"Q\": 6, // Net exposure quantity\n \"n\": 732 , \
\ // Net exposure notional\n \"i\": \"1111343026172067\" // Position ID\n \"p\": \"-1\", // PnL realized\n\
\ \"P\": \"0\", // PnL unrealized\n \"T\": 1694687692989999 // Engine timestamp in microseconds\n}\n\
```\n\nThe net quantity field will be positive if the position is long and\nnegative if the position is short.\n\nThe\
\ net exposure quantity field includes exposure from the open\nposition, as well as any open orders.\n\n## RFQ Update\n\
\nThis WebSocket stream provides real-time updates on RFQs (Request for\nQuotes) that are relevant to makers. Events are\
\ pushed to this\nstream whenever there is a significant state change in an RFQ or its\nassociated quotes, allowing makers\
\ to monitor and respond to RFQs as\nthey progress through various states.\n\n### Event Types\n\nFor RFQs that submitted\
\ by other requesters.\n- `rfqActive`: Indicates that an RFQ is active and open for quotes.\n\nFor RFQs that submitted\
\ by your account.\n- `rfqAccepted`: Indicates that an RFQ has been accepted and is no\n- `rfqRefreshed`: Indicates that\
\ an RFQ has been refreshed, is active\nand open for quotes.\n- `rfqCancelled`: Indicates that an RFQ has been cancelled\
\ or expired.\n- `rfqCandidate`: RFQ has received a new best quote.\n- `rfqFilled`: Indicates that an RFQ has been fully\
\ filled with a quote.\n\nFor Quotes submitted by your account.\n- `quoteAccepted`: Indicates that a quote submitted by\
\ the maker has\nbeen accepted.\n- `quoteCancelled`: Indicates that a quote has been cancelled due to\nquote submission,\
\ RFQ being filled, refreshed, cancelled, or expired.\n\n### Quote Submission and RFQ Timing\n\nMakers should submit quotes\
\ before the **submission time** (`w` field)\nis reached, as indicated in each `rfqActive` event. An RFQ remains\nactive\
\ until the **expiration time** (`W` field). If no quote is\naccepted or the RFQ is not cancelled, makers may continue\
\ to submit\nquotes until expiration.\n\nRFQs can periodically request new quotes by issuing additional\n`rfqActive` events.\
\ Each new `rfqActive` event will have the same\nRFQ ID (`R` field) but updated values for **submission time** and\n**expiration\
\ time**, allowing makers to participate in extended or\nrenewed quoting periods for ongoing RFQs.\n\n### Stream Name\
\ Format\n- For all markets: `account.rfqUpdate`\n- For single market: `account.rfqUpdate.<symbol>`\n\n### Example Messages\n\
\n**RFQ Accepted** (sent to requester)\n```\n{\n \"e\": \"rfqAccepted\", // Event type\n \"E\": 1730225420369829,\
\ // Event time in microseconds\n \"R\": 113392053149171712, // RFQ ID\n \"C\": \"123\", \
\ // Client RFQ ID\n \"s\": \"SOL_USDC_RFQ\", // Symbol\n \"S\": \"Bid\", // RFQ\
\ side\n \"q\": \"10\", // Quantity (if quantity in base asset)\n \"w\": 1730225480368, \
\ // Submission time in milliseconds\n \"W\": 1730225540368, // Expiry time in milliseconds\n \"X\": \"\
New\", // RFQ status\n \"T\": 1730225420368765 // Engine timestamp in microseconds\n}\n```\n\
\n**RFQ Active** (broadcast to all rfq listeners)\n```\n{\n \"e\": \"rfqActive\", // Event type\n \"E\"\
: 1730225420369829, // Event time in microseconds\n \"R\": 113392053149171712, // RFQ ID\n \"s\": \"SOL_USDC_RFQ\"\
, // Symbol\n \"q\": \"10\", // Quantity (optional) (if quantity in base asset)\n \"w\"\
: 1730225480368, // Submission time in milliseconds\n \"W\": 1730225540368, // Expiry time in milliseconds\n\
\ \"X\": \"New\", // RFQ status\n \"T\": 1730225420368765 // Engine timestamp in microseconds\n\
}\n```\n\n**RFQ Refreshed** (sent to requester)\n```\n{\n \"e\": \"rfqRefreshed\", // Event type\n \"E\":\
\ 1730225450369829, // Event time in microseconds\n \"R\": 113392053149171712, // RFQ ID\n \"C\": \"123\"\
, // Client RFQ ID\n \"s\": \"SOL_USDC_RFQ\", // Symbol\n \"S\": \"Bid\", \
\ // RFQ side\n \"q\": \"10\", // Quantity (optional) (if quantity in base asset)\n \"w\"\
: 1730225480368, // Submission time in milliseconds\n \"W\": 1730225540368, // Expiry time in milliseconds\n\
\ \"X\": \"New\", // RFQ status\n \"T\": 1730225450368765 // Engine timestamp in microseconds\n\
}\n```\n\n**RFQ Cancelled** (sent to taker only)\n```\n{\n \"e\": \"rfqCancelled\", // Event type\n \"E\"\
: 1730225460369829, // Event time in microseconds\n \"R\": 113392053149171712, // RFQ ID\n \"C\": \"123\"\
, // Client RFQ ID\n \"s\": \"SOL_USDC_RFQ\", // Symbol\n \"S\": \"Bid\", \
\ // RFQ side\n \"Q\": \"150\", // Quote quantity (optional) (if quantity in quote asset)\n\
\ \"w\": 1730225480368, // Submission time in milliseconds\n \"W\": 1730225540368, // Expiry time\
\ in milliseconds\n \"X\": \"Cancelled\", // RFQ status\n \"T\": 1730225460368765 // Engine timestamp\
\ in microseconds\n}\n```\n\n**Quote Accepted** (sent to quoter)\n```\n{\n \"e\": \"quoteAccepted\", // Event\
\ type\n \"E\": 1730225434631394, // Event time in microseconds\n \"R\": 113392053149171712, // RFQ ID\n\
\ \"u\": 113392054083780608, // Quote ID\n \"C\": \"123\", // Client Quote ID\n \"s\": \"\
SOL_USDC_RFQ\", // Symbol\n \"X\": \"New\", // Quote status\n \"T\": 1730225434629778 \
\ // Engine timestamp in microseconds\n}\n```\n\n**Quote Cancelled** (sent to quoter)\n```\n{\n \"e\": \"quoteCancelled\"\
, // Event type\n \"E\": 1730225583761963, // Event time in microseconds\n \"R\": 113392061354344448,\
\ // RFQ ID\n \"u\": 113392062870847488, // Quote ID\n \"C\": \"123\", // Client Quote\
\ ID\n \"s\": \"SOL_USDC_RFQ
# --- truncated at 32 KB (386 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/backpack/refs/heads/main/openapi/backpack-exchange-openapi.yml