> 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. An order placed as GTC or POST_ONLY is answered as GTD, with postOnly true for POST_ONLY. Only a GTC or POST_ONLY order placed before the venue had GTD is answered as GTC","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":"Time of the order's last fill (ms since epoch); 0 if it has had none. A cancel or an expiry does not change it. The order-scoped fills response gives the time of the order's last event in its own updateTime"},"isWorking":{"type":"boolean","description":"Whether status is OPEN; false for every other status, including PARTIALLY_FILLED. It does not say whether the order is on the book"},"workingTime":{"type":"integer","format":"int64","description":"Always 0: the server records no working time for the bot and vault accounts that API keys act for"},"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)"},"renewalProtocolVersion":{"type":"integer","format":"int32"},"renewalGeneration":{"type":"integer","format":"int64"},"settlementExpireTime":{"type":"integer","format":"int64"}}},"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: \*\*100 requests/second\*\*\
> with a \*\*500 request burst\*\*. \`GET /api/v1/account/reconciliationSnapshot\`, \`GET /api/v1/account/balanceCut\`, \`GET /api/v2/myTrades\`, and \`GET /api/v2/order/fills\` 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"},"settlementTransactionId":{"type":"string","description":"Persisted successful-settlement transaction identity, shared by all fills in the settlement. On-chain settlements use the Hedera transaction ID; play-money settlements use play-settlement:<UUID>, which is not on-chain evidence. Not a fill deduplication key."}}},"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":"Rounded burst capacity minus remaining verified API-key tokens (when authenticated accounting ran)","schema":{}},"Retry-After":{"description":"Whole seconds to wait before retrying (ceiling of the computed delay)","schema":{}},"X-PLEX-ORDER-COUNT":{"description":"Rounded order burst capacity minus remaining verified API-key order tokens (when order accounting ran)","schema":{}},"X-PLEX-USED-WEIGHT-IP":{"description":"Rounded burst capacity minus remaining IP tokens; on rejection, describes the rejecting bucket","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: **100 requests/second**\nwith a **500 request burst**. `GET /api/v1/account/reconciliationSnapshot`, `GET /api/v1/account/balanceCut`, `GET /api/v2/myTrades`, and `GET /api/v2/order/fills` 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. An order placed as GTC or POST_ONLY is answered as GTD, with postOnly true for POST_ONLY. Only a GTC or POST_ONLY order placed before the venue had GTD is answered as GTC","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":"Time of the order's last fill (ms since epoch); 0 if it has had none. A cancel or an expiry does not change it. The order-scoped fills response gives the time of the order's last event in its own updateTime"},"isWorking":{"type":"boolean","description":"Whether status is OPEN; false for every other status, including PARTIALLY_FILLED. It does not say whether the order is on the book"},"workingTime":{"type":"integer","format":"int64","description":"Always 0: the server records no working time for the bot and vault accounts that API keys act for"},"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)"},"renewalProtocolVersion":{"type":"integer","format":"int32"},"renewalGeneration":{"type":"integer","format":"int64"},"settlementExpireTime":{"type":"integer","format":"int64"}}},"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"},"settlementTransactionId":{"type":"string","description":"Persisted successful-settlement transaction identity, shared by all fills in the settlement. On-chain settlements use the Hedera transaction ID; play-money settlements use play-settlement:<UUID>, which is not on-chain evidence. Not a fill deduplication key."}}},"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: \*\*100 requests/second\*\*\
> with a \*\*500 request burst\*\*. \`GET /api/v1/account/reconciliationSnapshot\`, \`GET /api/v1/account/balanceCut\`, \`GET /api/v2/myTrades\`, and \`GET /api/v2/order/fills\` 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. An order placed as GTC or POST_ONLY is answered as GTD, with postOnly true for POST_ONLY. Only a GTC or POST_ONLY order placed before the venue had GTD is answered as GTC","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":"Time of the order's last fill (ms since epoch); 0 if it has had none. A cancel or an expiry does not change it. The order-scoped fills response gives the time of the order's last event in its own updateTime"},"isWorking":{"type":"boolean","description":"Whether status is OPEN; false for every other status, including PARTIALLY_FILLED. It does not say whether the order is on the book"},"workingTime":{"type":"integer","format":"int64","description":"Always 0: the server records no working time for the bot and vault accounts that API keys act for"},"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)"},"renewalProtocolVersion":{"type":"integer","format":"int32"},"renewalGeneration":{"type":"integer","format":"int64"},"settlementExpireTime":{"type":"integer","format":"int64"}}},"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: **100 requests/second**\nwith a **500 request burst**. `GET /api/v1/account/reconciliationSnapshot`, `GET /api/v1/account/balanceCut`, `GET /api/v2/myTrades`, and `GET /api/v2/order/fills` 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 a coherent BALANCE projection cut for one market's two custody assets

> Returns the authenticated VAULT account's exact BASE and QUOTE custody totals together with verifiable\
> BALANCE projection coverage in one \`ACCOUNT\_BALANCE\_CUT\_V1\` response. The server captures a finite\
> writer frontier for exactly the two selected balance aggregates, waits for the BALANCE projection to\
> durably cover it, and then reads both rows, their event ids, the actual durable offsets, identity, and\
> selected-pair poison in one fresh primary repeatable-read view. Later events may be included; the\
> returned coverage is never required to equal the captured target.\
> \
> Totals are exact \`balances.balance\` atoms only. Locks, free balance, reservations, and spendability are\
> outside this contract, as is any claim of fresh Hedera ingestion. Optional\
> \`baseMutationEventId\`/\`quoteMutationEventId\` (both or neither, in the signed query) name the exact guarded\
> accounting mutations; the server verifies each against the immutable event and proves clean inclusion.\
> \
> Authentication uses the ordinary V1 signed query with \*\*XApiKey\*\*; V2 signing does not accept query\
> parameters and is not supported here. \`VAULT\_HEDGE\_ONLY\` credentials cannot use this route. Every\
> response on this route family is non-cacheable.\
> \
> \
> \*\*Weight:\*\* 40\
> \
> This route also consumes one request from the shared correctness-critical\
> account/fill barrier pre-authentication IP bucket: \*\*100 requests/second\*\*\
> with a \*\*500 request burst\*\*. \`GET /api/v1/account/reconciliationSnapshot\`, \`GET /api/v1/account/balanceCut\`, \`GET /api/v2/myTrades\`, and \`GET /api/v2/order/fills\` 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":{"AccountBalanceCutV1":{"type":"object","properties":{"contract":{"type":"string","enum":["ACCOUNT_BALANCE_CUT_V1"]},"complete":{"type":"boolean","description":"Always true in a successful response; there is no partial successful shape"},"cutId":{"type":"string","description":"Per-request correlation id; never a frontier or an ordered version"},"symbol":{"type":"string","description":"Exact requested venue market symbol"},"subject":{"$ref":"#/components/schemas/Subject"},"serverStartedAt":{"type":"string","description":"RFC 3339 UTC server clock diagnostic at request start"},"serverCompletedAt":{"type":"string","description":"RFC 3339 UTC server clock diagnostic after every check passed"},"proofScope":{"type":"string","enum":["LOCAL_BALANCE_PROJECTION_V1"]},"authorityScope":{"type":"string","description":"Immutable writer-published BALANCE authority scope"},"projection":{"type":"string","enum":["BALANCE"]},"projectionGeneration":{"type":"string","description":"Opaque process/owner/replay generation identity; equality only"},"sourceShardCount":{"type":"integer","format":"int32","description":"Durable event-log shard count"},"sourceTargets":{"type":"array","items":{"$ref":"#/components/schemas/SourceTarget"},"maxItems":2,"minItems":2},"balanceFrontier":{"type":"array","items":{"$ref":"#/components/schemas/FrontierEntry"},"maxItems":2,"minItems":1},"assets":{"type":"array","items":{"$ref":"#/components/schemas/Asset"},"maxItems":2,"minItems":2},"requiredMutations":{"type":"array","items":{"$ref":"#/components/schemas/RequiredMutation"},"maxItems":2,"minItems":0}}},"Subject":{"type":"object","properties":{"type":{"type":"string","enum":["VAULT"]},"subjectId":{"type":"string","description":"Authenticated subject user id"},"accountId":{"type":"string","description":"Canonical decimal Hedera account number"},"chainId":{"type":"string","description":"Canonical decimal EVM chain id from server configuration"}}},"SourceTarget":{"type":"object","properties":{"role":{"type":"string","enum":["BASE","QUOTE"]},"aggregateId":{"type":"string","description":"Deterministic balance aggregate UUID from BalanceIds.idFrom"},"shard":{"type":"integer","format":"int32","description":"Durable source shard of the aggregate"},"throughEventId":{"type":"string","description":"Finite request coverage floor for this pair"}}},"FrontierEntry":{"type":"object","properties":{"shard":{"type":"integer","format":"int32","description":"Selected durable shard"},"throughEventId":{"type":"string","description":"Actual durable BALANCE coverage read in the final view"}}},"Asset":{"type":"object","properties":{"role":{"type":"string","enum":["BASE","QUOTE"]},"tokenId":{"type":"string","description":"Canonical token id; native HBAR is 0"},"symbol":{"type":"string","description":"Human-readable label; never an identity"},"decimals":{"type":"integer","format":"int32"},"aggregateId":{"type":"string"},"totalAtoms":{"type":"string","description":"Exact balances.balance total in atoms"},"lastAppliedEventId":{"type":"string","description":"The row's last applied source event id"},"associated":{"type":"boolean"}}},"RequiredMutation":{"type":"object","properties":{"role":{"type":"string","enum":["BASE","QUOTE"]},"tokenId":{"type":"string"},"aggregateId":{"type":"string"},"eventId":{"type":"string"},"eventType":{"type":"string","enum":["BALANCE_SET","BALANCE_INIT"]},"consensusNs":{"type":"string"},"payloadSha256":{"type":"string","description":"SHA-256 of the persisted event_details_proto bytes"},"postBalanceAtoms":{"type":"string","description":"Historical post-balance carried by the event"},"included":{"type":"boolean"}}},"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/balanceCut":{"get":{"tags":["Account"],"summary":"Get a coherent BALANCE projection cut for one market's two custody assets","description":"Returns the authenticated VAULT account's exact BASE and QUOTE custody totals together with verifiable\nBALANCE projection coverage in one `ACCOUNT_BALANCE_CUT_V1` response. The server captures a finite\nwriter frontier for exactly the two selected balance aggregates, waits for the BALANCE projection to\ndurably cover it, and then reads both rows, their event ids, the actual durable offsets, identity, and\nselected-pair poison in one fresh primary repeatable-read view. Later events may be included; the\nreturned coverage is never required to equal the captured target.\n\nTotals are exact `balances.balance` atoms only. Locks, free balance, reservations, and spendability are\noutside this contract, as is any claim of fresh Hedera ingestion. Optional\n`baseMutationEventId`/`quoteMutationEventId` (both or neither, in the signed query) name the exact guarded\naccounting mutations; the server verifies each against the immutable event and proves clean inclusion.\n\nAuthentication uses the ordinary V1 signed query with **XApiKey**; V2 signing does not accept query\nparameters and is not supported here. `VAULT_HEDGE_ONLY` credentials cannot use this route. Every\nresponse on this route family is non-cacheable.\n\n\n**Weight:** 40\n\nThis route also consumes one request from the shared correctness-critical\naccount/fill barrier pre-authentication IP bucket: **100 requests/second**\nwith a **500 request burst**. `GET /api/v1/account/reconciliationSnapshot`, `GET /api/v1/account/balanceCut`, `GET /api/v2/myTrades`, and `GET /api/v2/order/fills` use the same bucket,\nso alternating between them does not create additional database-barrier capacity.\n","operationId":"getAccountBalanceCut","parameters":[{"name":"symbol","in":"query","description":"Exact venue trading pair symbol","required":true,"schema":{"type":"string","maxLength":33,"minLength":3,"pattern":"^[A-Za-z0-9_]{1,16}-[A-Za-z0-9_]{1,16}$"}},{"name":"baseMutationEventId","in":"query","description":"Canonical positive decimal event id of the BASE balance mutation; required together with quoteMutationEventId","required":false,"schema":{"type":"string","pattern":"^[1-9][0-9]*$"}},{"name":"quoteMutationEventId","in":"query","description":"Canonical positive decimal event id of the QUOTE balance mutation; required together with baseMutationEventId","required":false,"schema":{"type":"string","pattern":"^[1-9][0-9]*$"}}],"responses":{"200":{"description":"Complete account balance cut","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountBalanceCutV1"}}}},"400":{"description":"INVALID_ACCOUNT_BALANCE_CUT_REQUEST: malformed or duplicate query, partial witness pair, unknown symbol or parameter","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"}}}},"403":{"description":"ACCOUNT_BALANCE_CUT_SUBJECT_UNSUPPORTED or a guarded-only credential profile","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"409":{"description":"ACCOUNT_BALANCE_CUT_IDENTITY_CHANGED (retry after rereading identity) or ACCOUNT_BALANCE_CUT_WITNESS_INVALID","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"429":{"description":"ACCOUNT_BALANCE_CUT_BUSY: bounded per-process cut capacity; honor Retry-After","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"500":{"description":"ACCOUNT_BALANCE_CUT_INVARIANT_FAILED: malformed or impossible authority result","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/ProblemDetail"}}}},"503":{"description":"ACCOUNT_BALANCE_CUT_BALANCE_UNAVAILABLE, ACCOUNT_BALANCE_CUT_NOT_READY, ACCOUNT_BALANCE_CUT_TIMEOUT, or ACCOUNT_BALANCE_CUT_POISONED","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.\
> The complete UTF-8 JSON response is limited to 2 MiB, including live capital evidence.\
> An oversized response returns 503 ACCOUNT\_RESPONSE\_TOO\_LARGE without a partial response or proof.\
> 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},"capitalCut":{"$ref":"#/components/schemas/CapitalCut","description":"Optional exact capital-history binding for the returned current balance versions"}}},"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}}},"CapitalCut":{"type":"object","properties":{"contract":{"type":"string"},"chainId":{"type":"string"},"accountId":{"type":"string"},"baseAssetId":{"type":"string"},"baseDecimals":{"type":"integer","format":"int32"},"quoteAssetId":{"type":"string"},"quoteDecimals":{"type":"integer","format":"int32"},"historyGeneration":{"type":"string"},"cutId":{"type":"string"},"throughSequence":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"continuityGeneration":{"type":"string"},"verifiedThroughSequence":{"type":"string"},"verifiedThroughObservedAt":{"type":"string","format":"date-time"},"disposition":{"type":"string"},"liveRevision":{"type":"string"},"liveThroughSequence":{"type":"string"},"liveObservedAt":{"type":"string","format":"date-time"},"custodyBaseDeltaAtoms":{"type":"string"},"custodyQuoteDeltaAtoms":{"type":"string"},"principalBaseDeltaAtoms":{"type":"string"},"principalQuoteDeltaAtoms":{"type":"string"},"pendingBaseDebitAtoms":{"type":"string"},"pendingQuoteDebitAtoms":{"type":"string"},"pendingBaseCreditAtoms":{"type":"string"},"pendingQuoteCreditAtoms":{"type":"string"},"unclassifiedBaseDebitAtoms":{"type":"string"},"unclassifiedQuoteDebitAtoms":{"type":"string"},"safeBaseAtoms":{"type":"string"},"safeQuoteAtoms":{"type":"string"},"liveMovements":{"type":"array","items":{"$ref":"#/components/schemas/Movement"}},"tradingFamilies":{"type":"array","items":{"$ref":"#/components/schemas/TradingFamily"}},"pendingFamilies":{"type":"array","items":{"type":"string"}},"priorTradingBaseDeltaAtoms":{"type":"string"},"priorTradingQuoteDeltaAtoms":{"type":"string"},"priorTradingThroughSequence":{"type":"string"},"priorTradingObservedAt":{"type":"string","format":"date-time"},"priorTradingDigest":{"type":"string"},"pendingPrincipalMovementIds":{"type":"array","items":{"type":"string"}},"amendmentRevision":{"type":"string"}}},"Movement":{"type":"object","properties":{"transactionHash":{"type":"string"},"logIndex":{"type":"integer","format":"int32"},"consensusTimestamp":{"type":"string"},"depositor":{"type":"string"},"depositId":{"type":"string"},"type":{"type":"string"},"baseAtoms":{"type":"string"},"quoteAtoms":{"type":"string"},"sharesAtoms":{"type":"string"}}},"TradingFamily":{"type":"object","properties":{"transactionId":{"type":"string"},"settlementId":{"type":"string"},"matchEventId":{"type":"string"},"baseDeltaAtoms":{"type":"string"},"quoteDeltaAtoms":{"type":"string"},"throughSequence":{"type":"string"},"observedAt":{"type":"string","format":"date-time"},"legs":{"type":"array","items":{"$ref":"#/components/schemas/TradingLeg"}},"hedgeIdentity":{"$ref":"#/components/schemas/HedgeIdentity"}}},"TradingLeg":{"type":"object","properties":{"orderId":{"type":"string"},"makerSide":{"type":"string"},"baseDeltaAtoms":{"type":"string"},"quoteDeltaAtoms":{"type":"string"}}},"HedgeIdentity":{"type":"object","properties":{"operationId":{"type":"string"},"physicalAttempt":{"type":"integer","format":"int32"},"accountingProofHash":{"type":"string"}}},"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.\nThe complete UTF-8 JSON response is limited to 2 MiB, including live capital evidence.\nAn oversized response returns 503 ACCOUNT_RESPONSE_TOO_LARGE without a partial response or proof.\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"}}}}}}}}}
```
