> For the complete documentation index, see [llms.txt](https://lambdaplex-labs.gitbook.io/lambdaplex/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lambdaplex-labs.gitbook.io/lambdaplex/for-developers/api/account.md).

# Account

Caller-scoped account endpoints

## Get order status

> Returns the status of a single order for the authenticated account.\
> \
> \*\*Rules\*\*\
> \- \`symbol\` is required.\
> \- Exactly one of \*\*\`orderId\`\*\* (server-assigned UUID) or \*\*\`origClientOrderId\`\*\* (your client ID) must be provided.\
> \- Requests must be signed (global security requires \*\*XApiKey\*\* header AND \*\*Ed25519Sig\*\* query signature).\
> \
> \
> \*\*Weight:\*\* 4

```json
{"openapi":"3.1.0","info":{"title":"Lambdaplex API","version":"1.0"},"tags":[{"name":"Account","description":"Caller-scoped account endpoints"}],"servers":[{"url":"https://api.lambdaplex.io","description":"Generated server url"}],"security":[{"XApiKey":[],"Ed25519Sig":[]}],"components":{"securitySchemes":{"XApiKey":{"type":"apiKey","description":"API key identifier. For Ed25519 V2 operations, its exact header value is the second line of the canonical signing payload.","name":"X-API-KEY","in":"header"}},"schemas":{"OrderStatus":{"type":"object","description":"Detailed status of a single order","properties":{"symbol":{"type":"string","description":"Trading pair symbol","maxLength":33,"minLength":3,"pattern":"^[A-Z0-9_]+-[A-Z0-9_]+$"},"orderId":{"type":"string","format":"uuid","description":"Exchange-assigned order ID (UUID)"},"clientOrderId":{"type":"string","description":"Client-assigned order ID, if provided on placement (max 36 chars)","maxLength":36},"price":{"type":"number","description":"Price for LIMIT/*_LIMIT orders; null for MARKET/STOP orders"},"origQty":{"type":"number","description":"Original order quantity (base asset)"},"executedQty":{"type":"number","description":"Executed quantity (base asset)"},"cumulativeQuoteQty":{"type":"number","description":"Cumulative quote quantity (quote asset)"},"status":{"type":"string","description":"Order status","enum":["OPEN","CANCELED","FILLED","PARTIALLY_FILLED","EXPIRED","FAILED","ACTIVE"]},"timeInForce":{"type":"string","description":"Time in force for LIMIT/*_LIMIT orders; null otherwise","enum":["GTC","IOC","FOK","POST_ONLY","GTD","GTC","GTD","IOC","FOK","POST_ONLY"]},"type":{"type":"string","description":"Order type","enum":["LIMIT","MARKET","STOP_LIMIT","STOP_MARKET"]},"side":{"type":"string","description":"Order side","enum":["BUY","SELL"]},"stopPrice":{"type":"number","description":"Stop price for STOP/TAKE_PROFIT orders; null otherwise"},"time":{"type":"integer","format":"int64","description":"Creation time (ms since epoch)"},"updateTime":{"type":"integer","format":"int64","description":"Last update time (ms since epoch)"},"isWorking":{"type":"boolean","description":"Whether the order is currently working on the book"},"workingTime":{"type":"integer","format":"int64","description":"Time at which the book started working on the order"},"feeRegime":{"type":"string","description":"Actual small-notional fee regime across recorded fills","enum":["LEGACY_NORMAL","NORMAL","DUST"]},"appliedTakerBpsMin":{"type":"integer","format":"int32","description":"Minimum actual taker BPS across recorded fills"},"appliedTakerBpsMax":{"type":"integer","format":"int32","description":"Maximum actual taker BPS across recorded fills"},"acceptedMaxTakerBps":{"type":"integer","format":"int32","description":"User-accepted maximum taker BPS"},"postOnly":{"type":"boolean","description":"Whether the order is forbidden from taking liquidity"},"acceptedExpireTime":{"type":"integer","format":"int64","description":"Venue-normalized whole-second match deadline for GTD orders (ms since epoch)"}}},"ProblemDetail":{"type":"object","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","format":"int32"},"detail":{"type":"string"},"instance":{"type":"string","format":"uri"},"properties":{"type":"object","additionalProperties":{}}}}}},"paths":{"/api/v1/order":{"get":{"tags":["Account"],"summary":"Get order status","description":"Returns the status of a single order for the authenticated account.\n\n**Rules**\n- `symbol` is required.\n- Exactly one of **`orderId`** (server-assigned UUID) or **`origClientOrderId`** (your client ID) must be provided.\n- Requests must be signed (global security requires **XApiKey** header AND **Ed25519Sig** query signature).\n\n\n**Weight:** 4","operationId":"getOrderStatus","parameters":[{"name":"symbol","in":"query","description":"Trading pair symbol","required":true,"schema":{"type":"string","maxLength":33,"minLength":3,"pattern":"^[A-Z0-9_]+-[A-Z0-9_]+$"}},{"name":"orderId","in":"query","description":"Server-assigned order ID (if combined with `origClientOrderId`, must refer to same order).","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"origClientOrderId","in":"query","description":"Client-assigned order ID (optional if `orderId` is set).","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{1,36}$"}}],"responses":{"200":{"description":"Order status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderStatus"}}}},"400":{"description":"Bad Request — XOR violation, invalid UUID, or parameter error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized — missing/invalid API key or signature","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden — authenticated but not allowed to view this order","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"404":{"description":"Not Found — order does not exist for this account/symbol","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"Too Many Requests — rate limit exceeded","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"503":{"description":"Service Unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}}}}
```

## Get a lossless bounded page of account trades

> Returns a page from one fully committed 64-shard FillProjection source-event frontier.\
> \
> Start or resume a scan with the last exhausted \`afterEventIds\` vector, fixed inclusive \`startTime\`, and\
> no \`throughEventIds\`; reset \`pageAfterCursorId\` to zero. The server captures and returns an immutable\
> \`throughEventIds\` vector after proving FILL offsets and poison health through every shard bound. Continue\
> within that snapshot by echoing both vectors and \`startTime\`, and pass \`nextPageAfterCursorId\`.\
> \
> For each item shard s the predicate is \`cursorId > max(through(afterEventIds\[s]), pageAfterCursorId)\` and\
> \`cursorId <= through(throughEventIds\[s])\`. Pages are ordered by cursorId within the frozen vector. A\
> limit-plus-one lookahead makes \`hasMore\` authoritative. Exhaustion, including an empty or exactly-full\
> page, returns \`nextPageAfterCursorId: null\`; persist \`throughEventIds\` as the next scan's \`afterEventIds\`\
> and reset the page cursor. Execution time is only the fixed lower eligibility floor, so a later settlement\
> event with an old-but-eligible fill time remains discoverable.\
> \
> All returned rows are \`SETTLEMENT\_FINAL\`: \`FillProjection\` creates persisted fill rows only from\
> \`SettlementTxSucceededEvent\` after settlement success has been durably established.\
> \
> Successful and controller-originated error responses are explicitly non-cacheable so a cache cannot bypass\
> the initial request-time frontier capture or a continuation's current offset-and-poison validation.\
> \
> \
> \*\*Weight:\*\* 20\
> \
> This route also consumes one request from the shared correctness-critical\
> account/fill barrier pre-authentication IP bucket: \*\*2 requests/second\*\*\
> with a \*\*5 request burst\*\*. \`GET /api/v1/account/reconciliationSnapshot\` and \`GET /api/v2/myTrades\` use the same bucket,\
> so alternating between them does not create additional database-barrier capacity.<br>

```json
{"openapi":"3.1.0","info":{"title":"Lambdaplex API","version":"1.0"},"tags":[{"name":"Account","description":"Caller-scoped account endpoints"}],"servers":[{"url":"https://api.lambdaplex.io","description":"Generated server url"}],"security":[{"XApiKey":[],"Ed25519Sig":[]}],"components":{"securitySchemes":{"XApiKey":{"type":"apiKey","description":"API key identifier. For Ed25519 V2 operations, its exact header value is the second line of the canonical signing payload.","name":"X-API-KEY","in":"header"}},"schemas":{"MyTradesPageV2":{"type":"object","description":"A lossless settlement-final account-trade page bounded by a complete FillProjection event frontier","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Trade"}},"symbol":{"type":"string","description":"Echo of the exact symbol filter interpreted by the server"},"nextPageAfterCursorId":{"type":"integer","format":"int64","description":"Exclusive page-local cursor for the next request within this frozen scan; null when exhausted"},"afterEventIds":{"type":"array","description":"Echo of the caller's exclusive per-shard source-event lower frontier","items":{"type":"integer","format":"int64"}},"throughEventIds":{"type":"array","description":"Immutable server-authored source-event high-water for all 64 shards; echo unchanged on continuations","items":{"type":"integer","format":"int64"}},"startTime":{"type":"integer","format":"int64","description":"Inclusive execution-time floor in epoch milliseconds; repeat unchanged across scans and continuations"},"hasMore":{"type":"boolean","description":"True exactly when another matching page exists below the frozen ceiling"},"contract":{"type":"string","description":"Self-identifying contract discriminator; consumers must require the exact value","enum":["SHARDED_PROJECTION_CURSOR_V1"]},"finality":{"type":"string","description":"Finality guaranteed for every item. Fills are projected only from SettlementTxSucceededEvent","enum":["SETTLEMENT_FINAL"]}}},"Trade":{"type":"object","description":"Details of an executed trade","properties":{"symbol":{"type":"string","description":"Trading pair symbol","maxLength":33,"minLength":3,"pattern":"^[A-Z0-9_]+-[A-Z0-9_]+$"},"id":{"type":"integer","format":"int64","description":"Read-model paging ID for legacy `/api/v1/myTrades`; `/api/v2/myTrades` pages and deduplicates by `cursorId`"},"cursorId":{"type":"integer","format":"int64","description":"Durable fill cursor ID; matches `t` on the authenticated websocket `orderUpdate` for this fill"},"projectionShard":{"type":"integer","format":"int32","description":"Durable source-event shard (0..63); use it to validate cursorId against the matching V2 frontier entries","maximum":63,"minimum":0},"orderId":{"type":"string","format":"uuid","description":"Exchange-assigned order ID (UUID)"},"price":{"type":"number","description":"The price the trade executed at"},"qty":{"type":"number","description":"The amount of base asset filled"},"quoteQty":{"type":"number","description":"The amount of quote asset exchanged"},"commission":{"type":"number","description":"The amount of commission paid by the creator of the referenced order"},"commissionAsset":{"type":"string","description":"Code for the commission asset","maxLength":24,"minLength":2,"pattern":"^[A-Z0-9_]+$"},"time":{"type":"integer","format":"int64","description":"Trade execution time (ms since epoch)"},"isBuyer":{"type":"boolean","description":"Whether the creator of the referenced order took the BUY side"},"isMaker":{"type":"boolean","description":"Whether the creator of the referenced order was the maker"},"feeRegime":{"type":"string","description":"Actual small-notional fee regime for this settlement","enum":["LEGACY_NORMAL","NORMAL","DUST"]},"appliedTakerBps":{"type":"integer","format":"int32","description":"Actual taker fee rate used for this settlement"},"acceptedMaxTakerBps":{"type":"integer","format":"int32","description":"User-accepted maximum taker fee rate"}}},"ProblemDetail":{"type":"object","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","format":"int32"},"detail":{"type":"string"},"instance":{"type":"string","format":"uri"},"properties":{"type":"object","additionalProperties":{}}}},"RateLimitError":{"type":"object","description":"Error response returned when a request is rate limited (HTTP 429)","properties":{"code":{"type":"string","description":"Error code indicating rate limiting"},"status":{"type":"integer","format":"int32","description":"HTTP status code"},"scope":{"type":"string","description":"Scope of the rate limit: 'rest' for HTTP endpoints, 'ws' for WebSocket handshake","enum":["rest","ws"]},"bucket":{"type":"string","description":"Bucket that triggered the limit (e.g. 'rest_weight', 'orders', 'ws_handshake')"},"keyType":{"type":"string","description":"Key type that was rate limited: 'ip' or 'api'","enum":["ip","api"]},"retryAfterSec":{"type":"number","format":"double","description":"Seconds until enough tokens are available to retry this request"}},"required":["bucket","code","keyType","retryAfterSec","scope","status"]}},"responses":{"RateLimited":{"description":"Too Many Requests - Rate limit exceeded.","headers":{"X-PLEX-USED-WEIGHT-API":{"description":"Current used weight for your API key this minute (if authenticated)","schema":{}},"Retry-After":{"description":"Number of seconds to wait before retrying","schema":{}},"X-PLEX-ORDER-COUNT":{"description":"Current order count for your API key (for order endpoints)","schema":{}},"X-PLEX-USED-WEIGHT-IP":{"description":"Current used weight for your IP this minute","schema":{}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}},"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}}}}},"paths":{"/api/v2/myTrades":{"get":{"tags":["Account"],"summary":"Get a lossless bounded page of account trades","description":"Returns a page from one fully committed 64-shard FillProjection source-event frontier.\n\nStart or resume a scan with the last exhausted `afterEventIds` vector, fixed inclusive `startTime`, and\nno `throughEventIds`; reset `pageAfterCursorId` to zero. The server captures and returns an immutable\n`throughEventIds` vector after proving FILL offsets and poison health through every shard bound. Continue\nwithin that snapshot by echoing both vectors and `startTime`, and pass `nextPageAfterCursorId`.\n\nFor each item shard s the predicate is `cursorId > max(through(afterEventIds[s]), pageAfterCursorId)` and\n`cursorId <= through(throughEventIds[s])`. Pages are ordered by cursorId within the frozen vector. A\nlimit-plus-one lookahead makes `hasMore` authoritative. Exhaustion, including an empty or exactly-full\npage, returns `nextPageAfterCursorId: null`; persist `throughEventIds` as the next scan's `afterEventIds`\nand reset the page cursor. Execution time is only the fixed lower eligibility floor, so a later settlement\nevent with an old-but-eligible fill time remains discoverable.\n\nAll returned rows are `SETTLEMENT_FINAL`: `FillProjection` creates persisted fill rows only from\n`SettlementTxSucceededEvent` after settlement success has been durably established.\n\nSuccessful and controller-originated error responses are explicitly non-cacheable so a cache cannot bypass\nthe initial request-time frontier capture or a continuation's current offset-and-poison validation.\n\n\n**Weight:** 20\n\nThis route also consumes one request from the shared correctness-critical\naccount/fill barrier pre-authentication IP bucket: **2 requests/second**\nwith a **5 request burst**. `GET /api/v1/account/reconciliationSnapshot` and `GET /api/v2/myTrades` use the same bucket,\nso alternating between them does not create additional database-barrier capacity.\n","operationId":"getMyTradesV2","parameters":[{"name":"symbol","in":"query","required":true,"schema":{"type":"string"}},{"name":"afterEventIds","in":"query","required":true,"schema":{"type":"string"}},{"name":"throughEventIds","in":"query","required":false,"schema":{"type":"string"}},{"name":"pageAfterCursorId","in":"query","required":false,"schema":{"type":"integer","format":"int64","default":0}},{"name":"startTime","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"endTime","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"fromId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"throughId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"afterCursorId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"throughCursorId","in":"query","required":false,"schema":{"type":"integer","format":"int64"}},{"name":"orderId","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","format":"int32"}}],"responses":{"200":{"description":"A bounded trade page, including valid empty snapshots","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MyTradesPageV2"}}}},"400":{"description":"Invalid durable cursor or unsupported legacy time/API-ID/order parameter","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Missing or invalid API credentials","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"description":"Malformed or impossible internal authority result","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"503":{"description":"FillProjection is unhealthy, does not catch up within the bounded initial-watermark wait, has unrepaired poison, or the account history contains an unsafe self-trade shape","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}}}}
```

## Get open orders

> Returns all \*\*open\*\* orders for the authenticated account.\
> \
> \*\*Rules\*\*\
> \- \`symbol\` is \*\*optional\*\*. When provided, results are filtered to that trading pair; otherwise all symbols are returned.\
> \- When there are no open orders, the server returns \*\*200\*\* with an empty array \`\[]\`.\
> \- Requests must be signed (global security requires \*\*XApiKey\*\* header AND \*\*Ed25519Sig\*\* query signature).\
> \
> \
> \*\*Weight:\*\* 6

```json
{"openapi":"3.1.0","info":{"title":"Lambdaplex API","version":"1.0"},"tags":[{"name":"Account","description":"Caller-scoped account endpoints"}],"servers":[{"url":"https://api.lambdaplex.io","description":"Generated server url"}],"security":[{"XApiKey":[],"Ed25519Sig":[]}],"components":{"securitySchemes":{"XApiKey":{"type":"apiKey","description":"API key identifier. For Ed25519 V2 operations, its exact header value is the second line of the canonical signing payload.","name":"X-API-KEY","in":"header"}},"schemas":{"OrderStatus":{"type":"object","description":"Detailed status of a single order","properties":{"symbol":{"type":"string","description":"Trading pair symbol","maxLength":33,"minLength":3,"pattern":"^[A-Z0-9_]+-[A-Z0-9_]+$"},"orderId":{"type":"string","format":"uuid","description":"Exchange-assigned order ID (UUID)"},"clientOrderId":{"type":"string","description":"Client-assigned order ID, if provided on placement (max 36 chars)","maxLength":36},"price":{"type":"number","description":"Price for LIMIT/*_LIMIT orders; null for MARKET/STOP orders"},"origQty":{"type":"number","description":"Original order quantity (base asset)"},"executedQty":{"type":"number","description":"Executed quantity (base asset)"},"cumulativeQuoteQty":{"type":"number","description":"Cumulative quote quantity (quote asset)"},"status":{"type":"string","description":"Order status","enum":["OPEN","CANCELED","FILLED","PARTIALLY_FILLED","EXPIRED","FAILED","ACTIVE"]},"timeInForce":{"type":"string","description":"Time in force for LIMIT/*_LIMIT orders; null otherwise","enum":["GTC","IOC","FOK","POST_ONLY","GTD","GTC","GTD","IOC","FOK","POST_ONLY"]},"type":{"type":"string","description":"Order type","enum":["LIMIT","MARKET","STOP_LIMIT","STOP_MARKET"]},"side":{"type":"string","description":"Order side","enum":["BUY","SELL"]},"stopPrice":{"type":"number","description":"Stop price for STOP/TAKE_PROFIT orders; null otherwise"},"time":{"type":"integer","format":"int64","description":"Creation time (ms since epoch)"},"updateTime":{"type":"integer","format":"int64","description":"Last update time (ms since epoch)"},"isWorking":{"type":"boolean","description":"Whether the order is currently working on the book"},"workingTime":{"type":"integer","format":"int64","description":"Time at which the book started working on the order"},"feeRegime":{"type":"string","description":"Actual small-notional fee regime across recorded fills","enum":["LEGACY_NORMAL","NORMAL","DUST"]},"appliedTakerBpsMin":{"type":"integer","format":"int32","description":"Minimum actual taker BPS across recorded fills"},"appliedTakerBpsMax":{"type":"integer","format":"int32","description":"Maximum actual taker BPS across recorded fills"},"acceptedMaxTakerBps":{"type":"integer","format":"int32","description":"User-accepted maximum taker BPS"},"postOnly":{"type":"boolean","description":"Whether the order is forbidden from taking liquidity"},"acceptedExpireTime":{"type":"integer","format":"int64","description":"Venue-normalized whole-second match deadline for GTD orders (ms since epoch)"}}},"ProblemDetail":{"type":"object","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","format":"int32"},"detail":{"type":"string"},"instance":{"type":"string","format":"uri"},"properties":{"type":"object","additionalProperties":{}}}}}},"paths":{"/api/v1/openOrders":{"get":{"tags":["Account"],"summary":"Get open orders","description":"Returns all **open** orders for the authenticated account.\n\n**Rules**\n- `symbol` is **optional**. When provided, results are filtered to that trading pair; otherwise all symbols are returned.\n- When there are no open orders, the server returns **200** with an empty array `[]`.\n- Requests must be signed (global security requires **XApiKey** header AND **Ed25519Sig** query signature).\n\n\n**Weight:** 6","operationId":"getOpenOrders","parameters":[{"name":"symbol","in":"query","description":"Trading pair symbol","required":true,"schema":{"type":"string","maxLength":33,"minLength":3,"pattern":"^[A-Z0-9_]+-[A-Z0-9_]+$"}}],"responses":{"200":{"description":"List of open orders","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OrderStatus"}}}}},"400":{"description":"Bad Request — invalid parameter (e.g., malformed `symbol`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized — missing/invalid API key or signature","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden — authenticated but not allowed to view these orders","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"Too Many Requests — rate limit exceeded","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"503":{"description":"Service Unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}}}}
```

## Get account trades

> Returns executed \*\*trades\*\* (fills) for the authenticated account.\
> \
> \*\*Rules\*\*\
> \- \`symbol\` is \*\*required\*\*.\
> \- If \`fromId\` is supplied, results include trades with \`id >= fromId\` and are returned in \*\*ascending\*\* \`id\` order; otherwise the \*\*most recent\*\* trades are returned.\
> \- \`cursorId\` is the durable fill identity and matches \`t\` on authenticated websocket \`orderUpdate\` trade events; use it to correlate or deduplicate fills across REST and websocket delivery.\
> \- \`limit\` defaults to \*\*500\*\* and is clamped to a maximum of \*\*1000\*\*.\
> \- When there are no trades, the server returns \*\*200\*\* with an empty array \`\[]\`.\
> \- \*\*Time window\*\*: \`startTime\` and \`endTime\` together must not exceed \*\*24 hours\*\*.\
> \- \*\*Supported parameter combinations\*\* (with \`symbol\` always present):\
> &#x20; \- \`symbol\`\
> &#x20; \- \`symbol\` + \`orderId\`\
> &#x20; \- \`symbol\` + \`startTime\`\
> &#x20; \- \`symbol\` + \`endTime\`\
> &#x20; \- \`symbol\` + \`fromId\`\
> &#x20; \- \`symbol\` + \`startTime\` + \`endTime\`\
> &#x20; \- \`symbol\` + \`orderId\` + \`fromId\`\
> \- Requests must be signed (global security requires \*\*XApiKey\*\* header AND \*\*Ed25519Sig\*\* query signature).\
> \- Data Source: \*\*Memory ⇒ Database\*\*.\
> \
> \
> \*\*Weight:\*\* 20

```json
{"openapi":"3.1.0","info":{"title":"Lambdaplex API","version":"1.0"},"tags":[{"name":"Account","description":"Caller-scoped account endpoints"}],"servers":[{"url":"https://api.lambdaplex.io","description":"Generated server url"}],"security":[{"XApiKey":[],"Ed25519Sig":[]}],"components":{"securitySchemes":{"XApiKey":{"type":"apiKey","description":"API key identifier. For Ed25519 V2 operations, its exact header value is the second line of the canonical signing payload.","name":"X-API-KEY","in":"header"}},"schemas":{"Trade":{"type":"object","description":"Details of an executed trade","properties":{"symbol":{"type":"string","description":"Trading pair symbol","maxLength":33,"minLength":3,"pattern":"^[A-Z0-9_]+-[A-Z0-9_]+$"},"id":{"type":"integer","format":"int64","description":"Read-model paging ID for legacy `/api/v1/myTrades`; `/api/v2/myTrades` pages and deduplicates by `cursorId`"},"cursorId":{"type":"integer","format":"int64","description":"Durable fill cursor ID; matches `t` on the authenticated websocket `orderUpdate` for this fill"},"projectionShard":{"type":"integer","format":"int32","description":"Durable source-event shard (0..63); use it to validate cursorId against the matching V2 frontier entries","maximum":63,"minimum":0},"orderId":{"type":"string","format":"uuid","description":"Exchange-assigned order ID (UUID)"},"price":{"type":"number","description":"The price the trade executed at"},"qty":{"type":"number","description":"The amount of base asset filled"},"quoteQty":{"type":"number","description":"The amount of quote asset exchanged"},"commission":{"type":"number","description":"The amount of commission paid by the creator of the referenced order"},"commissionAsset":{"type":"string","description":"Code for the commission asset","maxLength":24,"minLength":2,"pattern":"^[A-Z0-9_]+$"},"time":{"type":"integer","format":"int64","description":"Trade execution time (ms since epoch)"},"isBuyer":{"type":"boolean","description":"Whether the creator of the referenced order took the BUY side"},"isMaker":{"type":"boolean","description":"Whether the creator of the referenced order was the maker"},"feeRegime":{"type":"string","description":"Actual small-notional fee regime for this settlement","enum":["LEGACY_NORMAL","NORMAL","DUST"]},"appliedTakerBps":{"type":"integer","format":"int32","description":"Actual taker fee rate used for this settlement"},"acceptedMaxTakerBps":{"type":"integer","format":"int32","description":"User-accepted maximum taker fee rate"}}},"ProblemDetail":{"type":"object","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","format":"int32"},"detail":{"type":"string"},"instance":{"type":"string","format":"uri"},"properties":{"type":"object","additionalProperties":{}}}}}},"paths":{"/api/v1/myTrades":{"get":{"tags":["Account"],"summary":"Get account trades","description":"Returns executed **trades** (fills) for the authenticated account.\n\n**Rules**\n- `symbol` is **required**.\n- If `fromId` is supplied, results include trades with `id >= fromId` and are returned in **ascending** `id` order; otherwise the **most recent** trades are returned.\n- `cursorId` is the durable fill identity and matches `t` on authenticated websocket `orderUpdate` trade events; use it to correlate or deduplicate fills across REST and websocket delivery.\n- `limit` defaults to **500** and is clamped to a maximum of **1000**.\n- When there are no trades, the server returns **200** with an empty array `[]`.\n- **Time window**: `startTime` and `endTime` together must not exceed **24 hours**.\n- **Supported parameter combinations** (with `symbol` always present):\n  - `symbol`\n  - `symbol` + `orderId`\n  - `symbol` + `startTime`\n  - `symbol` + `endTime`\n  - `symbol` + `fromId`\n  - `symbol` + `startTime` + `endTime`\n  - `symbol` + `orderId` + `fromId`\n- Requests must be signed (global security requires **XApiKey** header AND **Ed25519Sig** query signature).\n- Data Source: **Memory ⇒ Database**.\n\n\n**Weight:** 20","operationId":"getMyTrades","parameters":[{"name":"symbol","in":"query","description":"Trading pair symbol","required":true,"schema":{"type":"string","maxLength":33,"minLength":3,"pattern":"^[A-Z0-9_]+-[A-Z0-9_]+$"}},{"name":"orderId","in":"query","description":"Exchange-assigned order ID (UUID). May be combined with `fromId`.","required":false,"schema":{"type":"string","format":"uuid"}},{"name":"startTime","in":"query","description":"Start of the time filter (ms since epoch). Can be used alone or with `endTime` (together ≤ 24h).","required":false,"schema":{"type":"string","format":"int64"}},{"name":"endTime","in":"query","description":"End of the time filter (ms since epoch). Can be used alone or with `startTime` (together ≤ 24h).","required":false,"schema":{"type":"string","format":"int64"}},{"name":"fromId","in":"query","description":"Inclusive trade id to start from (`id >= fromId`). May be used with `symbol` or with `symbol` + `orderId`.","required":false,"schema":{"type":"string","format":"int64","minimum":0}},{"name":"limit","in":"query","description":"Max number of trades to return. Default **500**; maximum **1000**. Out-of-range values are clamped.","required":false,"schema":{"type":"string","maximum":1000,"minimum":1}}],"responses":{"200":{"description":"List of account trades","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Trade"}}}}},"400":{"description":"Bad Request — invalid parameter (e.g., malformed `symbol`, unsupported combination, or `startTime..endTime` > 24h)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Unauthorized — missing/invalid API key or signature","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden — authenticated but not allowed to view these trades","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"Too Many Requests — rate limit exceeded","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"503":{"description":"Service Unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}}}}
```

## Get a reconciliable account order/fill snapshot

> Captures a source-event frontier after request initiation, waits for ORDER to cover it, then returns a\
> primary-database repeatable-read snapshot at a stable ORDER cut that FILL also covers. Both projections\
> are poison-free through the returned 64-shard vector. Events committed after the request-start frontier\
> may be outside this response. Consumers must require \`complete=true\` and the exact\
> \`ACCOUNT\_RECONCILIATION\_SNAPSHOT\_V1\` contract.\
> \
> \`snapshotEpoch\` is a deterministic identity of the returned vector, not a timestamp or a unique database\
> transaction ID. Successful and controller-originated error responses are explicitly non-cacheable so a\
> cache cannot bypass the request-time linearization.\
> \
> \
> \*\*Weight:\*\* 40\
> \
> This route also consumes one request from the shared correctness-critical\
> account/fill barrier pre-authentication IP bucket: \*\*2 requests/second\*\*\
> with a \*\*5 request burst\*\*. \`GET /api/v1/account/reconciliationSnapshot\` and \`GET /api/v2/myTrades\` use the same bucket,\
> so alternating between them does not create additional database-barrier capacity.<br>

```json
{"openapi":"3.1.0","info":{"title":"Lambdaplex API","version":"1.0"},"tags":[{"name":"Account","description":"Caller-scoped account endpoints"}],"servers":[{"url":"https://api.lambdaplex.io","description":"Generated server url"}],"security":[{"XApiKey":[],"Ed25519Sig":[]}],"components":{"securitySchemes":{"XApiKey":{"type":"apiKey","description":"API key identifier. For Ed25519 V2 operations, its exact header value is the second line of the canonical signing payload.","name":"X-API-KEY","in":"header"}},"schemas":{"AccountReconciliationSnapshotV1":{"type":"object","description":"One primary-database snapshot containing the complete open-order set and a shared order/fill source-event frontier","properties":{"symbol":{"type":"string","description":"Exact normalized market symbol bound to the signed request and every open-order row, including when the order set is empty","maxLength":33,"minLength":3,"pattern":"^[A-Z0-9_]+-[A-Z0-9_]+$"},"openOrders":{"type":"array","description":"The complete open-order set for the authenticated account and requested symbol in this snapshot","items":{"$ref":"#/components/schemas/OrderStatus","description":"The complete open-order set for the authenticated account and requested symbol in this snapshot","minItems":0},"minItems":0},"snapshotEpoch":{"type":"string","description":"Opaque deterministic identity of the returned 64-shard source-event frontier; equal values identify equal vectors, not wall-clock freshness","pattern":"^source-events-sha256:[0-9a-f]{64}$"},"fillThroughEventIds":{"type":"array","description":"Exact source-event frontier covered by both ORDER and FILL projections in shard order 0..63","items":{"type":"integer","format":"int64","minimum":0},"maxItems":64,"minItems":64},"complete":{"type":"boolean","description":"Always true in a successful response; incomplete authority is represented by a non-200 response","enum":["true"]},"contract":{"type":"string","description":"Exact response/proof contract discriminator","enum":["ACCOUNT_RECONCILIATION_SNAPSHOT_V1"]}}},"OrderStatus":{"type":"object","description":"Detailed status of a single order","properties":{"symbol":{"type":"string","description":"Trading pair symbol","maxLength":33,"minLength":3,"pattern":"^[A-Z0-9_]+-[A-Z0-9_]+$"},"orderId":{"type":"string","format":"uuid","description":"Exchange-assigned order ID (UUID)"},"clientOrderId":{"type":"string","description":"Client-assigned order ID, if provided on placement (max 36 chars)","maxLength":36},"price":{"type":"number","description":"Price for LIMIT/*_LIMIT orders; null for MARKET/STOP orders"},"origQty":{"type":"number","description":"Original order quantity (base asset)"},"executedQty":{"type":"number","description":"Executed quantity (base asset)"},"cumulativeQuoteQty":{"type":"number","description":"Cumulative quote quantity (quote asset)"},"status":{"type":"string","description":"Order status","enum":["OPEN","CANCELED","FILLED","PARTIALLY_FILLED","EXPIRED","FAILED","ACTIVE"]},"timeInForce":{"type":"string","description":"Time in force for LIMIT/*_LIMIT orders; null otherwise","enum":["GTC","IOC","FOK","POST_ONLY","GTD","GTC","GTD","IOC","FOK","POST_ONLY"]},"type":{"type":"string","description":"Order type","enum":["LIMIT","MARKET","STOP_LIMIT","STOP_MARKET"]},"side":{"type":"string","description":"Order side","enum":["BUY","SELL"]},"stopPrice":{"type":"number","description":"Stop price for STOP/TAKE_PROFIT orders; null otherwise"},"time":{"type":"integer","format":"int64","description":"Creation time (ms since epoch)"},"updateTime":{"type":"integer","format":"int64","description":"Last update time (ms since epoch)"},"isWorking":{"type":"boolean","description":"Whether the order is currently working on the book"},"workingTime":{"type":"integer","format":"int64","description":"Time at which the book started working on the order"},"feeRegime":{"type":"string","description":"Actual small-notional fee regime across recorded fills","enum":["LEGACY_NORMAL","NORMAL","DUST"]},"appliedTakerBpsMin":{"type":"integer","format":"int32","description":"Minimum actual taker BPS across recorded fills"},"appliedTakerBpsMax":{"type":"integer","format":"int32","description":"Maximum actual taker BPS across recorded fills"},"acceptedMaxTakerBps":{"type":"integer","format":"int32","description":"User-accepted maximum taker BPS"},"postOnly":{"type":"boolean","description":"Whether the order is forbidden from taking liquidity"},"acceptedExpireTime":{"type":"integer","format":"int64","description":"Venue-normalized whole-second match deadline for GTD orders (ms since epoch)"}}},"ProblemDetail":{"type":"object","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","format":"int32"},"detail":{"type":"string"},"instance":{"type":"string","format":"uri"},"properties":{"type":"object","additionalProperties":{}}}}}},"paths":{"/api/v1/account/reconciliationSnapshot":{"get":{"tags":["Account"],"summary":"Get a reconciliable account order/fill snapshot","description":"Captures a source-event frontier after request initiation, waits for ORDER to cover it, then returns a\nprimary-database repeatable-read snapshot at a stable ORDER cut that FILL also covers. Both projections\nare poison-free through the returned 64-shard vector. Events committed after the request-start frontier\nmay be outside this response. Consumers must require `complete=true` and the exact\n`ACCOUNT_RECONCILIATION_SNAPSHOT_V1` contract.\n\n`snapshotEpoch` is a deterministic identity of the returned vector, not a timestamp or a unique database\ntransaction ID. Successful and controller-originated error responses are explicitly non-cacheable so a\ncache cannot bypass the request-time linearization.\n\n\n**Weight:** 40\n\nThis route also consumes one request from the shared correctness-critical\naccount/fill barrier pre-authentication IP bucket: **2 requests/second**\nwith a **5 request burst**. `GET /api/v1/account/reconciliationSnapshot` and `GET /api/v2/myTrades` use the same bucket,\nso alternating between them does not create additional database-barrier capacity.\n","operationId":"getAccountReconciliationSnapshot","parameters":[{"name":"symbol","in":"query","description":"Trading pair symbol","required":true,"schema":{"type":"string","maxLength":33,"minLength":3,"pattern":"^[A-Z0-9_]+-[A-Z0-9_]+$"}}],"responses":{"200":{"description":"Complete account reconciliation snapshot","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountReconciliationSnapshotV1"}}}},"400":{"description":"Missing or invalid trading-pair symbol","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"401":{"description":"Missing or invalid API credentials/signature","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"Another reconciliation snapshot is already in progress; retry after one second","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"500":{"description":"Malformed or impossible internal authority result","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"503":{"description":"Projection lag, poison, or an unavailable common snapshot","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}}}}
```

## Get commission rates for the authenticated account

> Returns a particular symbol's maker and taker commission rates for the caller identified by the provided\
> credentials. Authentication uses the global requirement: \*\*XApiKey\*\* (header) AND \*\*Ed25519Sig\*\* (query).\
> \
> \
> \*\*Weight:\*\* 20

```json
{"openapi":"3.1.0","info":{"title":"Lambdaplex API","version":"1.0"},"tags":[{"name":"Account","description":"Caller-scoped account endpoints"}],"servers":[{"url":"https://api.lambdaplex.io","description":"Generated server url"}],"security":[{"XApiKey":[],"Ed25519Sig":[]}],"components":{"securitySchemes":{"XApiKey":{"type":"apiKey","description":"API key identifier. For Ed25519 V2 operations, its exact header value is the second line of the canonical signing payload.","name":"X-API-KEY","in":"header"}},"schemas":{"CommissionRates":{"type":"object","description":"Maker and taker commission rates for the authenticated account","properties":{"maker":{"type":"number","description":"Maker commission rate expressed as a decimal fraction"},"taker":{"type":"number","description":"Taker commission rate expressed as a decimal fraction"}}},"ProblemDetail":{"type":"object","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","format":"int32"},"detail":{"type":"string"},"instance":{"type":"string","format":"uri"},"properties":{"type":"object","additionalProperties":{}}}}}},"paths":{"/api/v1/account/commission":{"get":{"tags":["Account"],"summary":"Get commission rates for the authenticated account","description":"Returns a particular symbol's maker and taker commission rates for the caller identified by the provided\ncredentials. Authentication uses the global requirement: **XApiKey** (header) AND **Ed25519Sig** (query).\n\n\n**Weight:** 20","operationId":"getAccountCommissionRates","parameters":[{"name":"symbol","in":"query","description":"Trading pair symbol","required":true,"schema":{"type":"string","maxLength":33,"minLength":3,"pattern":"^[A-Z0-9_]+-[A-Z0-9_]+$"}}],"responses":{"200":{"description":"Commission rates for the authenticated caller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommissionRates"}}}},"401":{"description":"Unauthorized — missing or invalid credentials/signature","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden — credentials valid but not authorized for this resource","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"Too Many Requests — rate limit exceeded","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"503":{"description":"Service Unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}}}}
```

## Get commission rates and balances for the authenticated account

> Returns the commission rates and balances for the caller identified by the provided credentials.\
> Authentication uses the global requirement: \*\*XApiKey\*\* (header) AND \*\*Ed25519Sig\*\* (query).\
> \
> \
> \*\*Weight:\*\* 20

```json
{"openapi":"3.1.0","info":{"title":"Lambdaplex API","version":"1.0"},"tags":[{"name":"Account","description":"Caller-scoped account endpoints"}],"servers":[{"url":"https://api.lambdaplex.io","description":"Generated server url"}],"security":[{"XApiKey":[],"Ed25519Sig":[]}],"components":{"securitySchemes":{"XApiKey":{"type":"apiKey","description":"API key identifier. For Ed25519 V2 operations, its exact header value is the second line of the canonical signing payload.","name":"X-API-KEY","in":"header"}},"schemas":{"Account":{"type":"object","description":"Commission rates and balances for the authenticated account","properties":{"commissionRates":{"$ref":"#/components/schemas/CommissionRates","description":"Maker and taker commission rates applicable to this account"},"balances":{"type":"array","description":"Per-asset balances for this account","items":{"$ref":"#/components/schemas/Balance","description":"Per-asset balances for this account","minItems":0,"uniqueItems":true},"minItems":0,"uniqueItems":true}}},"CommissionRates":{"type":"object","description":"Maker and taker commission rates for the authenticated account","properties":{"maker":{"type":"number","description":"Maker commission rate expressed as a decimal fraction"},"taker":{"type":"number","description":"Taker commission rate expressed as a decimal fraction"}}},"Balance":{"type":"object","description":"Balances for a specific asset.","properties":{"asset":{"type":"string","description":"Asset code","maxLength":24,"minLength":2,"pattern":"^[A-Z0-9_]+$"},"free":{"type":"number","description":"Available amount","minimum":0},"locked":{"type":"number","description":"Locked amount (e.g., in open orders)","minimum":0}}},"ProblemDetail":{"type":"object","properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer","format":"int32"},"detail":{"type":"string"},"instance":{"type":"string","format":"uri"},"properties":{"type":"object","additionalProperties":{}}}}}},"paths":{"/api/v1/account":{"get":{"tags":["Account"],"summary":"Get commission rates and balances for the authenticated account","description":"Returns the commission rates and balances for the caller identified by the provided credentials.\nAuthentication uses the global requirement: **XApiKey** (header) AND **Ed25519Sig** (query).\n\n\n**Weight:** 20","operationId":"getAccount","parameters":[{"name":"omitZeroBalances","in":"query","description":"If true, omit any balances where both 'free' and 'locked' are zero","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Account balances for the authenticated caller","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"401":{"description":"Unauthorized — missing or invalid credentials/signature","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"403":{"description":"Forbidden — credentials valid but not authorized for this resource","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"Too Many Requests — rate limit exceeded","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"500":{"description":"Server error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"503":{"description":"Service Unavailable","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}}}}}}}
```
