The response body shown here is a static example, not live data. After you click Send, your live result appears in a separate panel headed 200 OK. The panel under the status-code tabs is a fixed sample from the spec — its field values (fees, prices, sizes, IDs, timestamps) are placeholders. Use Send, or call the endpoint, for current values.
Modify up to 100 open orders in a single request. Every row must share the same (address, accountIndex) — batch modifies are scoped to one subaccount. Requires address query parameter (or a uniform per-row address) matching the master Ethereum address for X-API-Key.Signed per modify. This endpoint requires the X-Signature header to be present (non-empty); its value is not verified — set it to any one element’s signature. Omitting it rejects every element with invalid order signature. Each element of modifies carries its own signature over the same typed canonical modify payload as a standalone modifyOrder, so the signed bytes are identical whether the modify is submitted alone or in a batch; the shared X-API-Key + X-Timestamp headers authenticate the batch.Failures are per-item. A row that fails validation or signature verification is returned with status: ERROR and an error message; the remaining rows still reach the matching engine. The whole batch is rejected only for envelope-level problems (empty/oversized array, mixed (address, accountIndex), bad auth).Speed-bump semantics match batchPlaceOrders: the batch is forwarded to the engine as one unit. If every modify targets a post-only (ALO) resting order the batch skips the taker speed bump entirely; if ANY modify targets a non-post-only order the whole batch is subject to it.All-ALO batches are prioritized like cancels. An all-ALO batch can only shrink or reprice maker orders — it can never take liquidity — so it is routed on the high-priority path ahead of order placements, the same as cancels. Like a cancel, it may therefore be processed ahead of earlier not-yet-sequenced placements (including its own targets, which would then reject as ORDER_NOT_FOUND_FOR_MODIFY). Such a rejected modify is also buffered briefly and applied when the target placement arrives, mirroring buffered-cancel behavior — see POST /v1/modifyOrder.
Response behavior
Asynchronous. Returns either 202 Accepted (the common case) or 200 OK (the gateway already had definitive per-row state). Each row echoes orderId / clientId so clients can correlate orders WebSocket channel events.
Authorizations
X-API-Key
string
header
required
Hex-encoded Ed25519 public key (64 chars). The public key IS the API key — register it via POST /createApiKey. Required on every authenticated request, both read-only and signed.
X-Timestamp
string
header
required
Unix time in nanoseconds as a decimal string (e.g. "1713825891591000000"). Millisecond or second epochs are rejected with 401 Unauthorized. Must be within ±30,000 ms of server wall-clock, or the request is rejected with 401 Unauthorized. Required on all mutating / credential-creating endpoints. This same value must appear as the ct field in the ordersign typed canonical payload (single-order endpoints) or in each element's ct field (batch endpoints).
Single-order endpoints (placeOrder, cancelOrder, modifyOrder, and other non-batch mutating routes) sign over the ordersign typed canonical payload — a compact, key-sorted JSON object built from parsed request fields using engine-native integer values:
placeOrder: {"ad":"0x…","ai":N,[,"c":"…"],"ct":N,"g":N,"m":N,"op":1,"p":N,"q":N,"r":0|1,"s":N,"t":N,"v":1} cancelOrder: {"ad":"0x…","ai":N,[,"c":"…"],"ct":N,[,"id":"…"],"m":N,"op":2,"v":1} modifyOrder: {"ad":"0x…","ai":N,[,"c":"…"],"ct":N,"g":N,[,"id":"…"],"m":N,"op":3,"p":N,"q":N,"r":0|1,"s":N,"t":N,"v":1} (exactly one of id / c)
ct must equal the X-Timestamp header value. Keys in brackets are conditional (omitted when empty). op values: 1=place, 2=cancel, 3=modify. See the ordersign package for field definitions and reference signing code.
Other signed routes (e.g. createApiKey) still use the legacy scheme: signing_message = X-Timestamp + ACTION + canonicalJSON(body), where ACTION is the camelCase final path segment.
Batch endpoints (batchPlaceOrders, batchCancelOrders, batchModifyOrders) do NOT use this header. They authenticate with per-element typed ordersign signatures embedded in the request body (see the global auth description and the per-field signature descriptions on OrderRequest / CancelOrderRequest / ModifyOrderRequest).
Read endpoints are authenticated by ?address= (and optionally X-API-Key) only — no signature is required, except for the signed affiliate reads (see the Referral tag), which require the full header triple; with no body their signing message is X-Timestamp + ACTION. canonicalJSON(body) is the JSON body with object keys sorted lexicographically at every level and no whitespace; the server canonicalizes the received body before verifying, so only the bytes signed over must be canonical. Required on all mutating / credential-creating endpoints.
Query Parameters
address
string
required
Master Ethereum address for this API key (must match address from POST /createApiKey for the same key). Required on REST for account-scoped reads and for place/cancel. Invalid hex → 400; mismatch with key → 403.
20-byte EVM address as hex: optional 0x or 0X prefix and exactly 40 hexadecimal digits. API responses normalize to lowercase a–f after 0x.
Pattern: ^(0x|0X)?[0-9a-fA-F]{40}$
Body
application/json
modifies
object[]
required
Array of 1-100 modify requests. Every row must share the same (address, accountIndex) — batch modifies are scoped to a single subaccount — and every row must carry its own signature field (see ModifyOrderRequest.signature).
Required array length: 1 - 100 elements
Show child attributes
Response
Batch modify processed and the gateway already has definitive state for the rows. Per-row status reflects that state. Treat as best-effort enrichment of the 202 path; the orders WebSocket channel is still the source of truth.
responses
object[]
required
One row per input modify, in request order. Failures are per-item: a row that fails validation or signature verification is returned with status: ERROR and an error message while the remaining rows still reach the matching engine.
Show child attributes
rateLimit
object
Per-subaccount order-pool rate-limit snapshot after charging the whole batch (one snapshot for the request, not per row). Omitted when rate limiting is not configured.
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Arcus Docs","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/arcus-11aecf6e/Pw2ZUiZemhLSrOMO/logo/light.svg?fit=max\u0026auto=format\u0026n=Pw2ZUiZemhLSrOMO\u0026q=85\u0026s=9bbd1de2de2a31d08c50e0d58bdac466","dark":"https://mintcdn.com/arcus-11aecf6e/Pw2ZUiZemhLSrOMO/logo/dark.svg?fit=max\u0026auto=format\u0026n=Pw2ZUiZemhLSrOMO\u0026q=85\u0026s=811a9395d1f3457230f9f5defa23c9d0"},"favicon":"https://mintcdn.com/arcus-11aecf6e/cwobDWFqGCQyNAqW/favicon.svg?fit=max\u0026auto=format\u0026n=cwobDWFqGCQyNAqW\u0026q=85\u0026s=c3d0e980a4a9fe344d7143e7f3c18caf","navbar":{"links":[{"href":"https://help.arcus.xyz","label":"Help Center"}],"primary":{"type":"button","label":"Go to Arcus","href":"https://app.arcus.xyz"}},"integrations":{"ga4":{"measurementId":"G-1232GKGLVQ"},"intercom":{"appId":"fdd72bam"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"arcus-11aecf6e","hasAudioNarration":false,"actualSubdomain":"arcus-11aecf6e","customDomains":["docs.arcus.xyz"],"gitSource":{"type":"github","owner":"dydxprotocol","repo":"v5-documentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af6b1f7aa6a9b02a8ca4e72","clientVersion":"0.0.4138","searchFilterCounts":[{"language":"default","tag":"API reference","count":99},{"language":"default","tag":"Endpoints","count":69},{"language":"default","tag":"Public","count":36},{"language":"default","tag":"WebSocket","count":22},{"language":"default","tag":"Concepts","count":20},{"language":"default","tag":"Referral","count":17},{"language":"default","tag":"Exchange","count":13},{"language":"default","tag":"Market data","count":11},{"language":"default","tag":"Guides","count":10},{"language":"default","tag":"Perpetuals","count":10}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"starterQuestions":[{"_id":"6a0c053228609ad420f986bc","deploymentId":"69f19afe69cb5ad533409b0a","questionText":"How do I place an order","status":"active","generatedBy":"manual","createdAt":"2026-05-19T06:37:38.436Z","updatedAt":"2026-05-19T06:37:38.436Z","__v":0}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/exchange/batch-modify-orders","slug":"/api-reference/exchange/batch-modify-orders","pageMetadata":{"title":"Batch modify orders","description":"Modify up to 100 open orders in a single request.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/batchModifyOrders","href":"/api-reference/exchange/batch-modify-orders","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Modify up to 100 open orders in a single request.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,p:`p`,strong:`strong`,..._provideComponents(),...props.components},{Heading,Note}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);return _jsxs(_Fragment,{children:[_jsxs(Note,{children:[_jsx(_components.strong,{children:`The response body shown here is a static example, not live data.`}),` After you click `,_jsx(_components.strong,{children:`Send`}),`, your live result appears in a separate panel headed `,_jsx(_components.strong,{children:`200 OK`}),`. The panel under the status-code tabs is a fixed sample from the spec — its field values (fees, prices, sizes, IDs, timestamps) are placeholders. Use `,_jsx(_components.strong,{children:`Send`}),`, or call the endpoint, for current values.`]}),`\n`,_jsxs(_components.p,{children:[`Modify up to 100 open orders in a single request. Every row must share the same `,_jsx(_components.code,{children:`(address, accountIndex)`}),` — batch modifies are scoped to one subaccount. Requires `,_jsx(_components.code,{children:`address`}),` query parameter (or a uniform per-row `,_jsx(_components.code,{children:`address`}),`) matching the master Ethereum address for `,_jsx(_components.code,{children:`X-API-Key`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Signed per modify.`}),` This endpoint requires the `,_jsx(_components.code,{children:`X-Signature`}),` header to be `,_jsx(_components.strong,{children:`present`}),` (non-empty); its value is not verified — set it to any one element’s signature. Omitting it rejects every element with `,_jsx(_components.code,{children:`invalid order signature`}),`. Each element of `,_jsx(_components.code,{children:`modifies`}),` carries its own `,_jsx(_components.code,{children:`signature`}),` over the same typed canonical modify payload as a standalone `,_jsx(_components.code,{children:`modifyOrder`}),`, so the signed bytes are identical whether the modify is submitted alone or in a batch; the shared `,_jsx(_components.code,{children:`X-API-Key`}),` + `,_jsx(_components.code,{children:`X-Timestamp`}),` headers authenticate the batch.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Failures are per-item.`}),` A row that fails validation or signature verification is returned with `,_jsx(_components.code,{children:`status: ERROR`}),` and an `,_jsx(_components.code,{children:`error`}),` message; the remaining rows still reach the matching engine. The whole batch is rejected only for envelope-level problems (empty/oversized array, mixed `,_jsx(_components.code,{children:`(address, accountIndex)`}),`, bad auth).`]}),`\n`,_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Speed-bump semantics match `,_jsx(_components.code,{children:`batchPlaceOrders`}),`:`]}),` the batch is forwarded to the engine as one unit. If every modify targets a post-only (ALO) resting order the batch skips the taker speed bump entirely; if ANY modify targets a non-post-only order the whole batch is subject to it.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`All-ALO batches are prioritized like cancels.`}),` An all-ALO batch can only shrink or reprice maker orders — it can never take liquidity — so it is routed on the high-priority path ahead of order placements, the same as cancels. Like a cancel, it may therefore be processed ahead of earlier not-yet-sequenced placements (including its own targets, which would then reject as `,_jsx(_components.code,{children:`ORDER_NOT_FOUND_FOR_MODIFY`}),`). Such a rejected modify is also buffered briefly and applied when the target placement arrives, mirroring buffered-cancel behavior — see `,_jsx(_components.code,{children:`POST /v1/modifyOrder`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`response-behavior`,children:`Response behavior`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Asynchronous.`}),` Returns either `,_jsx(_components.code,{children:`202 Accepted`}),` (the common case) or `,_jsx(_components.code,{children:`200 OK`}),` (the gateway already had definitive per-row state). Each row echoes `,_jsx(_components.code,{children:`orderId`}),` / `,_jsx(_components.code,{children:`clientId`}),` so clients can correlate `,_jsx(_components.code,{children:`orders`}),` WebSocket channel events.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Batch modify orders","description":"Modify up to 100 open orders in a single request.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/batchModifyOrders","href":"/api-reference/exchange/batch-modify-orders","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Response behavior","slug":"response-behavior","depth":3,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Batch modify orders","description":"Modify up to 100 open orders in a single request.","operationId":"batchModifyOrders","tags":["Exchange"],"security":["b039b90c-87ba-454c-8017-8fd979fca551","39cfa9d1-cc39-4320-8393-7fd64274e150"],"parameters":["c76e34de-c508-41aa-8fda-21037dd45bcd"],"requestBody":"562653e5-77e9-4397-afca-ca06e2eb0037","responses":{"200":"046024ea-eeca-420c-8078-af386d0437a2","202":"84c14a9e-0a49-4c43-9972-2bb2ea47e44a","400":"87fc2c8e-6cf2-480c-8094-c4e679d12166","401":"675608d5-ee99-412d-b7fd-e532eb14d673","403":"39061a2b-8a0d-4ec2-af4b-2cd2f88d7cc0","429":"7440ff51-cf83-4aee-80b5-f67074b2e7b4","500":"b8cd9a22-5075-4eee-abcc-e538ba7e2567","502":"690e523d-f867-4637-95e6-2d6ac73f0998","503":"8f03a2d1-cbe1-44b9-9c15-574abeebaf7e"},"x-mint":{"content":"\u003cNote>**The response body shown here is a static example, not live data.** After you click **Send**, your live result appears in a separate panel headed **200 OK**. The panel under the status-code tabs is a fixed sample from the spec — its field values (fees, prices, sizes, IDs, timestamps) are placeholders. Use **Send**, or call the endpoint, for current values.\u003c/Note>\n\nModify up to 100 open orders in a single request. Every row must share the same `(address, accountIndex)` — batch modifies are scoped to one subaccount. Requires `address` query parameter (or a uniform per-row `address`) matching the master Ethereum address for `X-API-Key`.\n\n**Signed per modify.** This endpoint requires the `X-Signature` header to be **present** (non-empty); its value is not verified — set it to any one element's signature. Omitting it rejects every element with `invalid order signature`. Each element of `modifies` carries its own `signature` over the same typed canonical modify payload as a standalone `modifyOrder`, so the signed bytes are identical whether the modify is submitted alone or in a batch; the shared `X-API-Key` + `X-Timestamp` headers authenticate the batch.\n\n**Failures are per-item.** A row that fails validation or signature verification is returned with `status: ERROR` and an `error` message; the remaining rows still reach the matching engine. The whole batch is rejected only for envelope-level problems (empty/oversized array, mixed `(address, accountIndex)`, bad auth).\n\n**Speed-bump semantics match `batchPlaceOrders`:** the batch is forwarded to the engine as one unit. If every modify targets a post-only (ALO) resting order the batch skips the taker speed bump entirely; if ANY modify targets a non-post-only order the whole batch is subject to it.\n\n**All-ALO batches are prioritized like cancels.** An all-ALO batch can only shrink or reprice maker orders — it can never take liquidity — so it is routed on the high-priority path ahead of order placements, the same as cancels. Like a cancel, it may therefore be processed ahead of earlier not-yet-sequenced placements (including its own targets, which would then reject as `ORDER_NOT_FOUND_FOR_MODIFY`). Such a rejected modify is also buffered briefly and applied when the target placement arrives, mirroring buffered-cancel behavior — see `POST /v1/modifyOrder`.\n\n### Response behavior\n\n**Asynchronous.** Returns either `202 Accepted` (the common case) or `200 OK` (the gateway already had definitive per-row state). Each row echoes `orderId` / `clientId` so clients can correlate `orders` WebSocket channel events."},"method":"post","type":"path","servers":["8bcbded4-ced7-41f7-9103-ef78afb86c4b","db341041-78f8-47d5-bb08-4c97d4cfedb3"],"path":"/v1/batchModifyOrders","baseUrlOptions":["https://api.arcus.xyz","https://api.testnet.arcus.xyz"],"title":"Batch modify orders","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"c76e34de-c508-41aa-8fda-21037dd45bcd":{"name":"address","in":"query","required":true,"schema":{"type":"string","pattern":"^(0x|0X)?[0-9a-fA-F]{40}$","description":"Master Ethereum address for this API key (must match `address` from `POST /createApiKey` for the same key). Required on REST for account-scoped reads and for place/cancel. Invalid hex → 400; mismatch with key → 403.\n\n20-byte EVM address as hex: optional `0x` or `0X` prefix and exactly 40 hexadecimal digits. API responses normalize to lowercase `a`–`f` after `0x`.\n","isRequired":true,"uniqueKey":"","typeLabel":"string"},"description":"Master Ethereum address for this API key (must match `address` from `POST /createApiKey` for the same key). Required on REST for account-scoped reads and for place/cancel. Invalid hex → 400; mismatch with key → 403.\n"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["modifies"],"properties":{"modifies":{"type":"array","description":"Array of 1-100 modify requests. Every row must share the same `(address, accountIndex)` — batch modifies are scoped to a single subaccount — and every row must carry its own `signature` field (see `ModifyOrderRequest.signature`).\n","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":false,"description":"Modify the price and/or size of a single open order.\n\nIdentify the order to modify by **exactly one** of `orderId` (the server-generated id) or `clientId` (resolved engine-side against the account's client-id index). Setting **both is rejected**, and so is setting **neither** — supply one or the other, never both.\n","required":["address","accountIndex","marketId","quantity","price","side","timeInForce","reduceOnly","goodTilTime"],"properties":{"address":{"type":"string","pattern":"^(0x|0X)?[0-9a-fA-F]{40}$","description":"Master Ethereum address for this API key (must match `POST /createApiKey` for the same key).","isRequired":true,"uniqueKey":"modifies.items.[INDEX].address","typeLabel":"string"},"accountIndex":{"type":"integer","minimum":0,"maximum":9,"description":"Account index (account index, 0–9). Identifies the account for orders, positions, fills, and API keys.","isRequired":true,"uniqueKey":"modifies.items.[INDEX].accountIndex","typeLabel":"integer"},"marketId":{"type":"integer","minimum":0,"maximum":65535,"description":"Perpetual market identifier (uint16). Map to display name via `GET /markets`. Used for orders, positions, funding, and market metadata.","isRequired":true,"uniqueKey":"modifies.items.[INDEX].marketId","typeLabel":"integer"},"goodTilTime":{"type":"string","minLength":1,"description":"The order's expiry as an epoch-**microsecond** timestamp (string). Required — echo the resting order's `goodTilTime` from placement, and it must be at least one month ahead of the current system timestamp. If it differs from the resting order's value, the order takes the new expiry. Covered by the Ed25519 request signature (`g` field of the canonical modify payload, in nanoseconds).\n","isRequired":true,"uniqueKey":"modifies.items.[INDEX].goodTilTime","typeLabel":"string"},"quantity":{"type":"string","minLength":1,"pattern":"^(0\\.[0-9]*[1-9][0-9]*|[1-9][0-9]*\\.?[0-9]*)$","description":"New size in human-readable base-asset units (e.g. \"0.5\" for 0.5 BTC), at most the market's `maxOrderSize` (reduce-only orders are **not** exempt).\n","isRequired":true,"uniqueKey":"modifies.items.[INDEX].quantity","typeLabel":"string"},"price":{"type":"string","minLength":1,"pattern":"^(0\\.[0-9]*[1-9][0-9]*|[1-9][0-9]*\\.?[0-9]*)$","description":"New price in human-readable USD (e.g. \"50000.5\").","isRequired":true,"uniqueKey":"modifies.items.[INDEX].price","typeLabel":"string"},"side":{"type":"string","enum":["BUY","SELL"],"isRequired":true,"uniqueKey":"modifies.items.[INDEX].side","typeLabel":"enum\u003cstring>"},"timeInForce":{"type":"string","enum":["GTT","IOC","FOK","ALO"],"description":"GTT = Good Till Time (rests until goodTilTime), IOC = Immediate or Cancel, FOK = Fill or Kill, ALO = Add Liquidity Only (post-only).\n\nSubmissions must use `GTT` for resting orders. Note: order reads (REST order queries and the `orders` WebSocket channel) currently report resting orders as `GTC` — the legacy name for the same bucket — for backward compatibility; see `TimeInForceResponse`.\n","isRequired":true,"uniqueKey":"modifies.items.[INDEX].timeInForce","typeLabel":"enum\u003cstring>"},"reduceOnly":{"type":"boolean","description":"Required — must be explicitly `true` or `false` (immutable; echo the resting order's value). Covered by the Ed25519 request signature. A missing or null value is rejected with `InvalidRequest`.\n","isRequired":true,"uniqueKey":"modifies.items.[INDEX].reduceOnly","typeLabel":"boolean"},"orderId":{"type":"string","minLength":1,"description":"Server-generated order ID to modify (hex string). Provide exactly one of `orderId` or `clientId`, never both.","uniqueKey":"modifies.items.[INDEX].orderId","typeLabel":"string"},"clientId":{"oneOf":[{"type":"string","maxLength":36,"pattern":"^[A-Za-z0-9_-]+$","description":"Identify the order to modify by its placement-time `clientId`. Subject to the same constraints as at placement: 1–36 characters, `[A-Za-z0-9_-]` only. The gateway resolves the value against the account's client-id index engine-side. Provide exactly one of `orderId` or `clientId`; supplying both is rejected with HTTP 400.\n","uniqueKey":"modifies.items.[INDEX].clientId.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":36,"pattern":"^[A-Za-z0-9_-]+$","description":"Identify the order to modify by its placement-time `clientId`. Subject to the same constraints as at placement: 1–36 characters, `[A-Za-z0-9_-]` only. The gateway resolves the value against the account's client-id index engine-side. Provide exactly one of `orderId` or `clientId`; supplying both is rejected with HTTP 400.\n","uniqueKey":"modifies.items.[INDEX].clientId.oneOf.1","typeLabel":"null"}],"uniqueKey":"modifies.items.[INDEX].clientId","typeLabel":"string | null"},"clientTime":{"oneOf":[{"type":"string","description":"Client-side timestamp as a string of **Unix nanoseconds** — this is the signed `ct` replay nonce and must equal the `X-Timestamp` header. A millisecond or second value is rejected with `401`.\n","uniqueKey":"modifies.items.[INDEX].clientTime.oneOf.0","typeLabel":"string"},{"type":"null","description":"Client-side timestamp as a string of **Unix nanoseconds** — this is the signed `ct` replay nonce and must equal the `X-Timestamp` header. A millisecond or second value is rejected with `401`.\n","uniqueKey":"modifies.items.[INDEX].clientTime.oneOf.1","typeLabel":"null"}],"uniqueKey":"modifies.items.[INDEX].clientTime","typeLabel":"string | null"},"signature":{"type":"string","description":"Per-modify Ed25519 signature, **required inside `POST /batchModifyOrders` only** (single `POST /modifyOrder` signs via the `X-Signature` header instead). Covers the same typed canonical modify payload as a standalone `modifyOrder` — the signed bytes are identical whether the modify is submitted alone or in a batch: `{\"ad\":\"0x…\",\"ai\":N,[,\"c\":\"…\"],\"ct\":N,\"g\":N,[,\"id\":\"…\"],\"m\":N,\"op\":3,\"p\":N,\"q\":N,\"r\":0|1,\"s\":N,\"t\":N,\"v\":1}`\n\nKeys in brackets are conditional (omitted when empty — exactly one of `id` or `c` must be present, matching the request's identity field).\n","uniqueKey":"modifies.items.[INDEX].signature","typeLabel":"string"}},"uniqueKey":"modifies.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"modifies","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"modifies":[{"address":"\u003cstring>","accountIndex":4,"marketId":32767,"goodTilTime":"\u003cstring>","quantity":"\u003cstring>","price":"\u003cstring>","reduceOnly":true,"orderId":"\u003cstring>","clientId":"\u003cstring>","clientTime":"\u003cstring>","signature":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"046024ea-eeca-420c-8078-af386d0437a2":{"description":"Batch modify processed and the gateway already has definitive state for the rows. Per-row `status` reflects that state. Treat as best-effort enrichment of the `202` path; the `orders` WebSocket channel is still the source of truth.\n","content":{"application/json":{"schema":{"type":"object","required":["responses"],"properties":{"responses":{"type":"array","description":"One row per input modify, in request order. Failures are per-item: a row that fails validation or signature verification is returned with `status: ERROR` and an `error` message while the remaining rows still reach the matching engine.\n","items":{"type":"object","required":["address","accountIndex","orderId","clientTime","marketId","marketDisplayName","status","updateTime"],"description":"Modify-order response. The HTTP call is asynchronous and may return either:\n\n- `202 Accepted` — common case. `status` is `ACK` and the body carries the replacement `orderId` for correlation; the `orders` WebSocket channel delivers the lifecycle.\n- `200 OK` — the gateway already had definitive state for the replacement order by the time it responded.\n","properties":{"address":{"type":"string","description":"Master Ethereum address of the account that modified the order.","examples":["0x1234567890abcdef1234567890abcdef12345678"],"isRequired":true,"uniqueKey":"responses.items.[INDEX].address","typeLabel":"string"},"accountIndex":{"type":"integer","minimum":0,"maximum":9,"description":"Account index (subaccount) that modified the order.","isRequired":true,"uniqueKey":"responses.items.[INDEX].accountIndex","typeLabel":"integer"},"clientTime":{"type":"integer","format":"int64","description":"Parsed `clientTime` from the request when provided as an integer-like string; otherwise `0`.\n","isRequired":true,"uniqueKey":"responses.items.[INDEX].clientTime","typeLabel":"integer\u003cint64>"},"orderId":{"type":"string","description":"Server-generated id of the replacement order created by the modify operation.","isRequired":true,"uniqueKey":"responses.items.[INDEX].orderId","typeLabel":"string"},"marketId":{"type":"integer","minimum":0,"maximum":65535,"description":"Perpetual market identifier (uint16). Map to display name via `GET /markets`. Used for orders, positions, funding, and market metadata.","isRequired":true,"uniqueKey":"responses.items.[INDEX].marketId","typeLabel":"integer"},"marketDisplayName":{"type":"string","description":"Market symbol (e.g. BTC-USD).","examples":["BTC-USD"],"isRequired":true,"uniqueKey":"responses.items.[INDEX].marketDisplayName","typeLabel":"string"},"status":{"type":"string","description":"`ACK` on the `202` path. On the `200` path, the definitive state.","enum":["PENDING","OPEN","PARTIALLY_FILLED","FILLED","CANCELED","MARGIN_CANCELED","REJECTED","UNTRIGGERED","TPSL_PLACED","TPSL_TRIGGERED","TPSL_CANCELED","LIQUIDATED","ADL","ACK","CANCEL_ACKNOWLEDGED","CANCEL_ALL_ACKNOWLEDGED","CANCEL_PENDING","ERROR"],"examples":["ACK"],"isRequired":true,"uniqueKey":"responses.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"updateTime":{"type":"integer","format":"int64","description":"Gateway clock (epoch microseconds) at the moment the modify was forwarded to the matching engine.","isRequired":true,"uniqueKey":"responses.items.[INDEX].updateTime","typeLabel":"integer\u003cint64>"},"clientId":{"type":"string","description":"Echo of the client id attached to the replacement order, when provided.","uniqueKey":"responses.items.[INDEX].clientId","typeLabel":"string"},"timeInForce":{"type":"string","enum":["GTT","IOC","FOK","ALO"],"description":"Echo of the time-in-force from the modify request.","uniqueKey":"responses.items.[INDEX].timeInForce","typeLabel":"enum\u003cstring>"},"goodTilTime":{"type":"string","description":"The resting order's expiration timestamp in epoch microseconds (as string). Populated once the matching engine confirms the modify. Present only on the `200` path for GTT/ALO orders; absent on `202` and for IOC/FOK orders.\n","uniqueKey":"responses.items.[INDEX].goodTilTime","typeLabel":"string"},"remainingSize":{"type":"string","description":"Unfilled size of the replacement order. Populated only on the `200` path.","uniqueKey":"responses.items.[INDEX].remainingSize","typeLabel":"string"},"filledSize":{"type":"string","description":"Cumulative filled size of the replacement order. Populated only on the `200` path.","uniqueKey":"responses.items.[INDEX].filledSize","typeLabel":"string"},"rejectionReason":{"type":"string","description":"Populated when `status` is `REJECTED` on the `200` path.","enum":["POST_ONLY_WOULD_CROSS","SELF_TRADE","UNDERCOLLATERALIZED","COULD_NOT_FILL","IOC_CANCELED","FOK_FAILED","REDUCE_ONLY_WOULD_INCREASE","TOO_MANY_CLIENT_IDS","DUPLICATE_CLIENT_ID","POSITION_TPSL_ALREADY_EXISTS","ENTRY_TPSL_CANNOT_BE_POSITION_TPSL","ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT","ORDER_NOT_FOUND_FOR_MODIFY","MODIFY_CHANGED_IMMUTABLE_FIELD","MODIFY_ZERO_SIZE","PRICE_WILL_EXCEED_MAXIMUM_OUTSIDE_RTH_TRADING_BOUND","MODIFY_WOULD_CROSS_OUTSIDE_RTH_TRADING_BOUNDARY","FILL_WILL_EXCEED_TRADING_BOUND","OPEN_INTEREST_CAP_EXCEEDED","POSITION_SIZE_CAP_EXCEEDED","MODIFY_TPSL_NOT_SUPPORTED","MODIFY_SUPERSEDED_BY_CANCEL","MODIFY_SIZE_ALREADY_FILLED","ORDER_NOT_FOUND","OPEN_ORDER_CAP_EXCEEDED","EXPIRED"],"x-enum-descriptions":["Post-only order would have crossed the book and taken liquidity.","Order would have matched against the account's own resting order; blocked by self-trade prevention.","Insufficient free collateral / margin to support the order.","Generic \"could not fill\" outcome. Legacy — prefer IOC_CANCELED / FOK_FAILED for time-in-force cancels.","IMMEDIATE_OR_CANCEL order produced zero fills and was canceled.","FILL_OR_KILL order could not be fully filled at submission and was canceled.","reduceOnly order would have opened or increased a position instead of reducing it.","Account already has 10,000 live clientIds (per-account maximum); cancel an existing order or let one reach a terminal state to free a slot.","Account already has an open order with the same clientId; reusable after the prior order terminates, or change the existing order in place via modifyOrder.","A position-level TPSL of the same trigger class (TP or SL) already exists for this account+market; at most one TP and one SL position-level TPSL is allowed per market.","A TPSL linked to an entry order (parentOrderId set) cannot also be a position-level TPSL; entry-linked TPSLs are sized partial legs.","Deprecated — no longer emitted; replaced by FILL_WILL_EXCEED_TRADING_BOUND. Seen only on historical orders.","modifyOrder targeted an order not on the regular orderbook (missing, filled, canceled, owned by another account, or a clientId that does not resolve under the account); TPSL and untriggered orders cannot be modified. The rejected modify is also buffered briefly and applied if the target placement arrives shortly after.","modifyOrder attempted to change an immutable field (side, timeInForce, reduceOnly, or orderType); only price and size may be modified.","modifyOrder specified a new size of zero or less; use cancelOrder instead of modifying to zero.","Deprecated — no longer emitted; replaced by FILL_WILL_EXCEED_TRADING_BOUND. Seen only on historical orders.","Deprecated — no longer emitted; replaced by FILL_WILL_EXCEED_TRADING_BOUND. Seen only on historical orders.","Outside regular trading hours, the order would fill at or beyond the active off-hours trading bound; per-order rejection covering crossing takers, modify replacements (the original order is removed), triggered TPSLs, and dangerous placements. In-band trading continues; the bound widens only via sustained resting liquidity or RTH re-entry.","Market is at its operator-set open-interest cap and the order's next fill would have increased open interest; matching halted and the order (or its unfilled remainder) was rejected. OI-neutral and OI-reducing orders still match.","The order, modify, or resulting fill would exceed the per-market position notional cap. Distinct from UNDERCOLLATERALIZED — the account may be fully funded; the size is the problem.","modifyOrder targeted an untriggered TPSL order; TPSL trigger parameters cannot be changed via modifyOrder. A live TPSL survives unchanged; a buffered modify that meets an arriving TPSL placement cancels that placement as a precaution.","modifyOrder was discarded because a cancelOrder for the same order is pending; cancels always dominate modifies and the order's final state is canceled.","Under total-size modify semantics, modifyOrder's new size (the order's new TOTAL size, filled quantity included) is at or below the quantity already filled, leaving nothing to rest; the original order is canceled and this rejection follows.","cancelOrder/batchCancelOrders matched no live order for the account (already filled, canceled, never existed, or an unrecognised clientId); no account state change. Modify uses ORDER_NOT_FOUND_FOR_MODIFY instead.","placeOrder rejected because the account is already at its simultaneous open-order maximum; cancel an order or let one reach a terminal state to free a slot. No account state change.","Resting good-til-time order removed because its goodTilTime had elapsed; never filled, reported REJECTED to the owner. No account state change."],"uniqueKey":"responses.items.[INDEX].rejectionReason","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Present when `status` is `ERROR` — a per-row failure inside `POST /batchModifyOrders` (validation, signature, or immutable-field mismatch). Never set on single `POST /modifyOrder` responses, which report failures at the HTTP level instead.\n","uniqueKey":"responses.items.[INDEX].error","typeLabel":"string"},"rateLimit":{"type":"object","required":["pool","remaining"],"description":"Per-subaccount order-pool rate-limit snapshot after this modify. Omitted when rate limiting is not configured.\n","properties":{"pool":{"type":"string","enum":["order","cancel"],"description":"Which per-subaccount pool this request charged: `order` for place/modify/batchPlace, `cancel` for cancel/batchCancel/cancelAll.\n","isRequired":true,"uniqueKey":"responses.items.[INDEX].rateLimit.pool","typeLabel":"enum\u003cstring>"},"remaining":{"type":"integer","format":"int64","description":"Remaining tokens in the charged pool after this request (`floor(cap - consumed)`). Can be `0` or negative while the request still succeeds when the account is on the drip throttle (pool exhausted, one action allowed per drip period). A value of `-1` is a sentinel meaning the account layer was not enforced for this request.\n","examples":[9958],"isRequired":true,"uniqueKey":"responses.items.[INDEX].rateLimit.remaining","typeLabel":"integer\u003cint64>"}},"uniqueKey":"responses.items.[INDEX].rateLimit","typeLabel":"object"}},"uniqueKey":"responses.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"responses","typeLabel":"object[]"},"rateLimit":{"type":"object","required":["pool","remaining"],"description":"Per-subaccount order-pool rate-limit snapshot after charging the whole batch (one snapshot for the request, not per row). Omitted when rate limiting is not configured.\n","properties":{"pool":{"type":"string","enum":["order","cancel"],"description":"Which per-subaccount pool this request charged: `order` for place/modify/batchPlace, `cancel` for cancel/batchCancel/cancelAll.\n","isRequired":true,"uniqueKey":"rateLimit.pool","typeLabel":"enum\u003cstring>"},"remaining":{"type":"integer","format":"int64","description":"Remaining tokens in the charged pool after this request (`floor(cap - consumed)`). Can be `0` or negative while the request still succeeds when the account is on the drip throttle (pool exhausted, one action allowed per drip period). A value of `-1` is a sentinel meaning the account layer was not enforced for this request.\n","examples":[9958],"isRequired":true,"uniqueKey":"rateLimit.remaining","typeLabel":"integer\u003cint64>"}},"uniqueKey":"rateLimit","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"responses":[{"address":"0x1234567890abcdef1234567890abcdef12345678","accountIndex":4,"clientTime":123,"orderId":"\u003cstring>","marketId":32767,"marketDisplayName":"BTC-USD","status":"ACK","updateTime":123,"clientId":"\u003cstring>","timeInForce":"GTT","goodTilTime":"\u003cstring>","remainingSize":"\u003cstring>","filledSize":"\u003cstring>","rejectionReason":"POST_ONLY_WOULD_CROSS","error":"\u003cstring>","rateLimit":{"pool":"order","remaining":9958}}],"rateLimit":{"pool":"order","remaining":9958}}}},"exampleType":"generated"}},"exampleType":"generated"},"84c14a9e-0a49-4c43-9972-2bb2ea47e44a":{"description":"Batch modify accepted by the gateway and forwarded to the matching engine. Definitive per-order state is delivered via the `orders` WebSocket channel, which clients must subscribe to.\n","content":{"application/json":{"schema":{"type":"object","required":["responses"],"properties":{"responses":{"type":"array","description":"One row per input modify, in request order. Failures are per-item: a row that fails validation or signature verification is returned with `status: ERROR` and an `error` message while the remaining rows still reach the matching engine.\n","items":{"type":"object","required":["address","accountIndex","orderId","clientTime","marketId","marketDisplayName","status","updateTime"],"description":"Modify-order response. The HTTP call is asynchronous and may return either:\n\n- `202 Accepted` — common case. `status` is `ACK` and the body carries the replacement `orderId` for correlation; the `orders` WebSocket channel delivers the lifecycle.\n- `200 OK` — the gateway already had definitive state for the replacement order by the time it responded.\n","properties":{"address":{"type":"string","description":"Master Ethereum address of the account that modified the order.","examples":["0x1234567890abcdef1234567890abcdef12345678"],"isRequired":true,"uniqueKey":"responses.items.[INDEX].address","typeLabel":"string"},"accountIndex":{"type":"integer","minimum":0,"maximum":9,"description":"Account index (subaccount) that modified the order.","isRequired":true,"uniqueKey":"responses.items.[INDEX].accountIndex","typeLabel":"integer"},"clientTime":{"type":"integer","format":"int64","description":"Parsed `clientTime` from the request when provided as an integer-like string; otherwise `0`.\n","isRequired":true,"uniqueKey":"responses.items.[INDEX].clientTime","typeLabel":"integer\u003cint64>"},"orderId":{"type":"string","description":"Server-generated id of the replacement order created by the modify operation.","isRequired":true,"uniqueKey":"responses.items.[INDEX].orderId","typeLabel":"string"},"marketId":{"type":"integer","minimum":0,"maximum":65535,"description":"Perpetual market identifier (uint16). Map to display name via `GET /markets`. Used for orders, positions, funding, and market metadata.","isRequired":true,"uniqueKey":"responses.items.[INDEX].marketId","typeLabel":"integer"},"marketDisplayName":{"type":"string","description":"Market symbol (e.g. BTC-USD).","examples":["BTC-USD"],"isRequired":true,"uniqueKey":"responses.items.[INDEX].marketDisplayName","typeLabel":"string"},"status":{"type":"string","description":"`ACK` on the `202` path. On the `200` path, the definitive state.","enum":["PENDING","OPEN","PARTIALLY_FILLED","FILLED","CANCELED","MARGIN_CANCELED","REJECTED","UNTRIGGERED","TPSL_PLACED","TPSL_TRIGGERED","TPSL_CANCELED","LIQUIDATED","ADL","ACK","CANCEL_ACKNOWLEDGED","CANCEL_ALL_ACKNOWLEDGED","CANCEL_PENDING","ERROR"],"examples":["ACK"],"isRequired":true,"uniqueKey":"responses.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"updateTime":{"type":"integer","format":"int64","description":"Gateway clock (epoch microseconds) at the moment the modify was forwarded to the matching engine.","isRequired":true,"uniqueKey":"responses.items.[INDEX].updateTime","typeLabel":"integer\u003cint64>"},"clientId":{"type":"string","description":"Echo of the client id attached to the replacement order, when provided.","uniqueKey":"responses.items.[INDEX].clientId","typeLabel":"string"},"timeInForce":{"type":"string","enum":["GTT","IOC","FOK","ALO"],"description":"Echo of the time-in-force from the modify request.","uniqueKey":"responses.items.[INDEX].timeInForce","typeLabel":"enum\u003cstring>"},"goodTilTime":{"type":"string","description":"The resting order's expiration timestamp in epoch microseconds (as string). Populated once the matching engine confirms the modify. Present only on the `200` path for GTT/ALO orders; absent on `202` and for IOC/FOK orders.\n","uniqueKey":"responses.items.[INDEX].goodTilTime","typeLabel":"string"},"remainingSize":{"type":"string","description":"Unfilled size of the replacement order. Populated only on the `200` path.","uniqueKey":"responses.items.[INDEX].remainingSize","typeLabel":"string"},"filledSize":{"type":"string","description":"Cumulative filled size of the replacement order. Populated only on the `200` path.","uniqueKey":"responses.items.[INDEX].filledSize","typeLabel":"string"},"rejectionReason":{"type":"string","description":"Populated when `status` is `REJECTED` on the `200` path.","enum":["POST_ONLY_WOULD_CROSS","SELF_TRADE","UNDERCOLLATERALIZED","COULD_NOT_FILL","IOC_CANCELED","FOK_FAILED","REDUCE_ONLY_WOULD_INCREASE","TOO_MANY_CLIENT_IDS","DUPLICATE_CLIENT_ID","POSITION_TPSL_ALREADY_EXISTS","ENTRY_TPSL_CANNOT_BE_POSITION_TPSL","ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT","ORDER_NOT_FOUND_FOR_MODIFY","MODIFY_CHANGED_IMMUTABLE_FIELD","MODIFY_ZERO_SIZE","PRICE_WILL_EXCEED_MAXIMUM_OUTSIDE_RTH_TRADING_BOUND","MODIFY_WOULD_CROSS_OUTSIDE_RTH_TRADING_BOUNDARY","FILL_WILL_EXCEED_TRADING_BOUND","OPEN_INTEREST_CAP_EXCEEDED","POSITION_SIZE_CAP_EXCEEDED","MODIFY_TPSL_NOT_SUPPORTED","MODIFY_SUPERSEDED_BY_CANCEL","MODIFY_SIZE_ALREADY_FILLED","ORDER_NOT_FOUND","OPEN_ORDER_CAP_EXCEEDED","EXPIRED"],"x-enum-descriptions":["Post-only order would have crossed the book and taken liquidity.","Order would have matched against the account's own resting order; blocked by self-trade prevention.","Insufficient free collateral / margin to support the order.","Generic \"could not fill\" outcome. Legacy — prefer IOC_CANCELED / FOK_FAILED for time-in-force cancels.","IMMEDIATE_OR_CANCEL order produced zero fills and was canceled.","FILL_OR_KILL order could not be fully filled at submission and was canceled.","reduceOnly order would have opened or increased a position instead of reducing it.","Account already has 10,000 live clientIds (per-account maximum); cancel an existing order or let one reach a terminal state to free a slot.","Account already has an open order with the same clientId; reusable after the prior order terminates, or change the existing order in place via modifyOrder.","A position-level TPSL of the same trigger class (TP or SL) already exists for this account+market; at most one TP and one SL position-level TPSL is allowed per market.","A TPSL linked to an entry order (parentOrderId set) cannot also be a position-level TPSL; entry-linked TPSLs are sized partial legs.","Deprecated — no longer emitted; replaced by FILL_WILL_EXCEED_TRADING_BOUND. Seen only on historical orders.","modifyOrder targeted an order not on the regular orderbook (missing, filled, canceled, owned by another account, or a clientId that does not resolve under the account); TPSL and untriggered orders cannot be modified. The rejected modify is also buffered briefly and applied if the target placement arrives shortly after.","modifyOrder attempted to change an immutable field (side, timeInForce, reduceOnly, or orderType); only price and size may be modified.","modifyOrder specified a new size of zero or less; use cancelOrder instead of modifying to zero.","Deprecated — no longer emitted; replaced by FILL_WILL_EXCEED_TRADING_BOUND. Seen only on historical orders.","Deprecated — no longer emitted; replaced by FILL_WILL_EXCEED_TRADING_BOUND. Seen only on historical orders.","Outside regular trading hours, the order would fill at or beyond the active off-hours trading bound; per-order rejection covering crossing takers, modify replacements (the original order is removed), triggered TPSLs, and dangerous placements. In-band trading continues; the bound widens only via sustained resting liquidity or RTH re-entry.","Market is at its operator-set open-interest cap and the order's next fill would have increased open interest; matching halted and the order (or its unfilled remainder) was rejected. OI-neutral and OI-reducing orders still match.","The order, modify, or resulting fill would exceed the per-market position notional cap. Distinct from UNDERCOLLATERALIZED — the account may be fully funded; the size is the problem.","modifyOrder targeted an untriggered TPSL order; TPSL trigger parameters cannot be changed via modifyOrder. A live TPSL survives unchanged; a buffered modify that meets an arriving TPSL placement cancels that placement as a precaution.","modifyOrder was discarded because a cancelOrder for the same order is pending; cancels always dominate modifies and the order's final state is canceled.","Under total-size modify semantics, modifyOrder's new size (the order's new TOTAL size, filled quantity included) is at or below the quantity already filled, leaving nothing to rest; the original order is canceled and this rejection follows.","cancelOrder/batchCancelOrders matched no live order for the account (already filled, canceled, never existed, or an unrecognised clientId); no account state change. Modify uses ORDER_NOT_FOUND_FOR_MODIFY instead.","placeOrder rejected because the account is already at its simultaneous open-order maximum; cancel an order or let one reach a terminal state to free a slot. No account state change.","Resting good-til-time order removed because its goodTilTime had elapsed; never filled, reported REJECTED to the owner. No account state change."],"uniqueKey":"responses.items.[INDEX].rejectionReason","typeLabel":"enum\u003cstring>"},"error":{"type":"string","description":"Present when `status` is `ERROR` — a per-row failure inside `POST /batchModifyOrders` (validation, signature, or immutable-field mismatch). Never set on single `POST /modifyOrder` responses, which report failures at the HTTP level instead.\n","uniqueKey":"responses.items.[INDEX].error","typeLabel":"string"},"rateLimit":{"type":"object","required":["pool","remaining"],"description":"Per-subaccount order-pool rate-limit snapshot after this modify. Omitted when rate limiting is not configured.\n","properties":{"pool":{"type":"string","enum":["order","cancel"],"description":"Which per-subaccount pool this request charged: `order` for place/modify/batchPlace, `cancel` for cancel/batchCancel/cancelAll.\n","isRequired":true,"uniqueKey":"responses.items.[INDEX].rateLimit.pool","typeLabel":"enum\u003cstring>"},"remaining":{"type":"integer","format":"int64","description":"Remaining tokens in the charged pool after this request (`floor(cap - consumed)`). Can be `0` or negative while the request still succeeds when the account is on the drip throttle (pool exhausted, one action allowed per drip period). A value of `-1` is a sentinel meaning the account layer was not enforced for this request.\n","examples":[9958],"isRequired":true,"uniqueKey":"responses.items.[INDEX].rateLimit.remaining","typeLabel":"integer\u003cint64>"}},"uniqueKey":"responses.items.[INDEX].rateLimit","typeLabel":"object"}},"uniqueKey":"responses.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"responses","typeLabel":"object[]"},"rateLimit":{"type":"object","required":["pool","remaining"],"description":"Per-subaccount order-pool rate-limit snapshot after charging the whole batch (one snapshot for the request, not per row). Omitted when rate limiting is not configured.\n","properties":{"pool":{"type":"string","enum":["order","cancel"],"description":"Which per-subaccount pool this request charged: `order` for place/modify/batchPlace, `cancel` for cancel/batchCancel/cancelAll.\n","isRequired":true,"uniqueKey":"rateLimit.pool","typeLabel":"enum\u003cstring>"},"remaining":{"type":"integer","format":"int64","description":"Remaining tokens in the charged pool after this request (`floor(cap - consumed)`). Can be `0` or negative while the request still succeeds when the account is on the drip throttle (pool exhausted, one action allowed per drip period). A value of `-1` is a sentinel meaning the account layer was not enforced for this request.\n","examples":[9958],"isRequired":true,"uniqueKey":"rateLimit.remaining","typeLabel":"integer\u003cint64>"}},"uniqueKey":"rateLimit","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"responses":[{"address":"0x1234567890abcdef1234567890abcdef12345678","accountIndex":4,"clientTime":123,"orderId":"\u003cstring>","marketId":32767,"marketDisplayName":"BTC-USD","status":"ACK","updateTime":123,"clientId":"\u003cstring>","timeInForce":"GTT","goodTilTime":"\u003cstring>","remainingSize":"\u003cstring>","filledSize":"\u003cstring>","rejectionReason":"POST_ONLY_WOULD_CROSS","error":"\u003cstring>","rateLimit":{"pool":"order","remaining":9958}}],"rateLimit":{"pool":"order","remaining":9958}}}},"exampleType":"generated"}},"exampleType":"generated"},"87fc2c8e-6cf2-480c-8094-c4e679d12166":{"description":"Validation error, mixed `(address, accountIndex)` across rows, or missing/invalid `address`.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","examples":["Invalid request body"],"isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code for generic (non-order) rejections. Present on geo-restriction blocks; clients should key product-availability UI off this rather than the human `error` string.\n\n| Value | Meaning |\n|------------------|---------|\n| `GEO_RESTRICTED` | The action is not available from the caller's country/region for this product (perps and/or spot). Reads remain available; only state-changing actions are blocked. |\n","enum":["GEO_RESTRICTED"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"errorSource":{"type":"string","description":"Scopes the failure to a specific operation. Present on structured order errors (place / cancel / modify flows); absent on generic HTTP errors.\n","enum":["Order","Cancel"],"uniqueKey":"errorSource","typeLabel":"enum\u003cstring>"},"errorType":{"type":"string","description":"Machine-readable reason for the API-layer rejection. Present alongside `errorSource` on structured order errors; absent on generic HTTP errors.\n\n| Value | Meaning |\n|-------------------|---------|\n| `Tick` | Price or size does not align to the market's tick size / step size. |\n| `InvalidRequest` | A request field failed validation (bad address, unknown market, invalid enum, etc.). TPSL-specific causes: `stopPrice` required when `tpslType` is set; `tpslType` must be `STOP_LOSS` or `TAKE_PROFIT`; `reduceOnly` must be `true` for TPSL orders; trigger price must not sit on the wrong side of the current mark (would fire immediately); batch grouping/shape constraints violated (wrong order count, missing or duplicate `tpslType` legs). |\n| `OracleDeviation` | The order's price deviates from the current oracle price by more than the allowed threshold. Adjust the price closer to the oracle and resubmit. |\n| `ReduceOnly` | A reduce-only order was rejected because filling it would open or increase the account's position rather than reduce it. |\n| `Unavailable` | The requested operation (place / cancel) is temporarily disabled. |\n| `Unauthorized` | API key or trading-identity check failed. |\n| `Forbidden` | The authenticated key is not permitted to perform the requested operation. |\n| `NotImplemented` | The requested capability is not yet available on this path (e.g. TPSL over WebSocket). |\n| `Transmission` | The gateway accepted and validated the request but could not deliver it to the matching engine. Retry. |\n| `Internal` | Unexpected gateway-side failure unrelated to transmission. |\n","enum":["Tick","InvalidRequest","OracleDeviation","ReduceOnly","Unavailable","Unauthorized","Forbidden","NotImplemented","Transmission","Internal"],"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"rejectionReason":{"type":"string","description":"Machine-readable engine-level rejection code. Present on `OrderResponse` / `BatchOrderItemResponse` when `status` is `REJECTED` on the synchronous `200` path (i.e. the gateway already had a definitive engine reject before responding). Absent on `202` responses and on HTTP error bodies — in those cases rejection reasons are delivered asynchronously via the `orders` WebSocket channel.\n\n| Value | Meaning |\n|------------------------------------|---------|\n| `POST_ONLY_WOULD_CROSS` | Post-only order would have crossed the book and taken liquidity. |\n| `SELF_TRADE` | Order would match against the account's own resting order; blocked by self-trade prevention. |\n| `UNDERCOLLATERALIZED` | Account has insufficient free collateral / margin to support the order. |\n| `COULD_NOT_FILL` | Generic \"could not fill\" (legacy; prefer `IOC_CANCELED` / `FOK_FAILED`). |\n| `IOC_CANCELED` | IOC order produced zero fills and was canceled. |\n| `FOK_FAILED` | FOK order could not be fully filled at submission. |\n| `REDUCE_ONLY_WOULD_INCREASE` | reduce-only order would have opened or increased the position. |\n| `TOO_MANY_CLIENT_IDS` | Account already has 10,000 live `clientId`s (the per-account maximum). Cancel or let existing orders reach a terminal state to free slots before placing new ones with distinct `clientId`s. |\n| `DUPLICATE_CLIENT_ID` | Account already has an open order with the same `clientId`. |\n| `POSITION_TPSL_ALREADY_EXISTS` | A position-level TPSL of the same trigger class (TP or SL) already exists for this account+market. At most one TP and one SL per market. |\n| `ENTRY_TPSL_CANNOT_BE_POSITION_TPSL` | A TPSL bound to an entry order (`parentOrderId` set) cannot also be a position-level TPSL; entry-linked TPSLs are sized partial legs. |\n| `OPEN_ORDER_CAP_EXCEEDED` | Account has reached its per-account open-order cap; cancel a resting order or let one reach a terminal state before placing another. |\n| `FILL_WILL_EXCEED_TRADING_BOUND` | Outside regular trading hours, the order would fill at or beyond the active off-hours trading bound. Per-order rejection; in-band trading continues. |\n| `OPEN_INTEREST_CAP_EXCEEDED` | Market is at its operator-set open-interest cap and the order's next fill would have increased open interest. OI-neutral and OI-reducing orders still match. |\n| `ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT` | Deprecated — no longer emitted; replaced by `FILL_WILL_EXCEED_TRADING_BOUND`. |\n| `ORDER_NOT_FOUND` | `cancelOrder` referenced an order not on the orderbook (already filled, canceled, never placed, or owned by another account). |\n| `ORDER_NOT_FOUND_FOR_MODIFY` | `modifyOrder` referenced an order not on the regular orderbook; TPSL and untriggered orders cannot be modified. The rejected modify is also buffered briefly and applied if the target placement arrives shortly after. |\n| `MODIFY_CHANGED_IMMUTABLE_FIELD` | `modifyOrder` attempted to change an immutable field (`side`, `timeInForce`, `reduceOnly`, or `orderType`). |\n| `MODIFY_ZERO_SIZE` | `modifyOrder` specified a new size of zero or less. |\n| `POSITION_SIZE_CAP_EXCEEDED` | The order, modify, or resulting fill would exceed the per-market position notional cap. Distinct from `UNDERCOLLATERALIZED`: the account may be fully funded — the size is the problem. |\n| `MODIFY_TPSL_NOT_SUPPORTED` | `modifyOrder` targeted an untriggered TPSL order; TPSL trigger parameters cannot be changed via modify. A live TPSL survives unchanged; a buffered modify that meets an arriving TPSL placement cancels that placement as a precaution. |\n| `MODIFY_SUPERSEDED_BY_CANCEL` | `modifyOrder` was discarded because a `cancelOrder` for the same order is pending; cancels always dominate modifies and the order's final state is canceled. |\n| `MODIFY_SIZE_ALREADY_FILLED` | Under total-size modify semantics, `modifyOrder`'s new size (the order's new TOTAL size) is at or below the quantity already filled, leaving nothing to rest. The original order is canceled (a `CANCELED` update precedes this rejection). |\n","enum":["POST_ONLY_WOULD_CROSS","SELF_TRADE","UNDERCOLLATERALIZED","COULD_NOT_FILL","IOC_CANCELED","FOK_FAILED","REDUCE_ONLY_WOULD_INCREASE","TOO_MANY_CLIENT_IDS","DUPLICATE_CLIENT_ID","POSITION_TPSL_ALREADY_EXISTS","ENTRY_TPSL_CANNOT_BE_POSITION_TPSL","OPEN_ORDER_CAP_EXCEEDED","ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT","ORDER_NOT_FOUND","ORDER_NOT_FOUND_FOR_MODIFY","MODIFY_CHANGED_IMMUTABLE_FIELD","MODIFY_ZERO_SIZE","FILL_WILL_EXCEED_TRADING_BOUND","OPEN_INTEREST_CAP_EXCEEDED","POSITION_SIZE_CAP_EXCEEDED","MODIFY_TPSL_NOT_SUPPORTED","MODIFY_SUPERSEDED_BY_CANCEL","MODIFY_SIZE_ALREADY_FILLED"],"uniqueKey":"rejectionReason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid request body","code":"GEO_RESTRICTED","errorSource":"Order","errorType":"Tick","rejectionReason":"POST_ONLY_WOULD_CROSS"}}},"exampleType":"generated"}},"exampleType":"generated"},"675608d5-ee99-412d-b7fd-e532eb14d673":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","examples":["Invalid request body"],"isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code for generic (non-order) rejections. Present on geo-restriction blocks; clients should key product-availability UI off this rather than the human `error` string.\n\n| Value | Meaning |\n|------------------|---------|\n| `GEO_RESTRICTED` | The action is not available from the caller's country/region for this product (perps and/or spot). Reads remain available; only state-changing actions are blocked. |\n","enum":["GEO_RESTRICTED"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"errorSource":{"type":"string","description":"Scopes the failure to a specific operation. Present on structured order errors (place / cancel / modify flows); absent on generic HTTP errors.\n","enum":["Order","Cancel"],"uniqueKey":"errorSource","typeLabel":"enum\u003cstring>"},"errorType":{"type":"string","description":"Machine-readable reason for the API-layer rejection. Present alongside `errorSource` on structured order errors; absent on generic HTTP errors.\n\n| Value | Meaning |\n|-------------------|---------|\n| `Tick` | Price or size does not align to the market's tick size / step size. |\n| `InvalidRequest` | A request field failed validation (bad address, unknown market, invalid enum, etc.). TPSL-specific causes: `stopPrice` required when `tpslType` is set; `tpslType` must be `STOP_LOSS` or `TAKE_PROFIT`; `reduceOnly` must be `true` for TPSL orders; trigger price must not sit on the wrong side of the current mark (would fire immediately); batch grouping/shape constraints violated (wrong order count, missing or duplicate `tpslType` legs). |\n| `OracleDeviation` | The order's price deviates from the current oracle price by more than the allowed threshold. Adjust the price closer to the oracle and resubmit. |\n| `ReduceOnly` | A reduce-only order was rejected because filling it would open or increase the account's position rather than reduce it. |\n| `Unavailable` | The requested operation (place / cancel) is temporarily disabled. |\n| `Unauthorized` | API key or trading-identity check failed. |\n| `Forbidden` | The authenticated key is not permitted to perform the requested operation. |\n| `NotImplemented` | The requested capability is not yet available on this path (e.g. TPSL over WebSocket). |\n| `Transmission` | The gateway accepted and validated the request but could not deliver it to the matching engine. Retry. |\n| `Internal` | Unexpected gateway-side failure unrelated to transmission. |\n","enum":["Tick","InvalidRequest","OracleDeviation","ReduceOnly","Unavailable","Unauthorized","Forbidden","NotImplemented","Transmission","Internal"],"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"rejectionReason":{"type":"string","description":"Machine-readable engine-level rejection code. Present on `OrderResponse` / `BatchOrderItemResponse` when `status` is `REJECTED` on the synchronous `200` path (i.e. the gateway already had a definitive engine reject before responding). Absent on `202` responses and on HTTP error bodies — in those cases rejection reasons are delivered asynchronously via the `orders` WebSocket channel.\n\n| Value | Meaning |\n|------------------------------------|---------|\n| `POST_ONLY_WOULD_CROSS` | Post-only order would have crossed the book and taken liquidity. |\n| `SELF_TRADE` | Order would match against the account's own resting order; blocked by self-trade prevention. |\n| `UNDERCOLLATERALIZED` | Account has insufficient free collateral / margin to support the order. |\n| `COULD_NOT_FILL` | Generic \"could not fill\" (legacy; prefer `IOC_CANCELED` / `FOK_FAILED`). |\n| `IOC_CANCELED` | IOC order produced zero fills and was canceled. |\n| `FOK_FAILED` | FOK order could not be fully filled at submission. |\n| `REDUCE_ONLY_WOULD_INCREASE` | reduce-only order would have opened or increased the position. |\n| `TOO_MANY_CLIENT_IDS` | Account already has 10,000 live `clientId`s (the per-account maximum). Cancel or let existing orders reach a terminal state to free slots before placing new ones with distinct `clientId`s. |\n| `DUPLICATE_CLIENT_ID` | Account already has an open order with the same `clientId`. |\n| `POSITION_TPSL_ALREADY_EXISTS` | A position-level TPSL of the same trigger class (TP or SL) already exists for this account+market. At most one TP and one SL per market. |\n| `ENTRY_TPSL_CANNOT_BE_POSITION_TPSL` | A TPSL bound to an entry order (`parentOrderId` set) cannot also be a position-level TPSL; entry-linked TPSLs are sized partial legs. |\n| `OPEN_ORDER_CAP_EXCEEDED` | Account has reached its per-account open-order cap; cancel a resting order or let one reach a terminal state before placing another. |\n| `FILL_WILL_EXCEED_TRADING_BOUND` | Outside regular trading hours, the order would fill at or beyond the active off-hours trading bound. Per-order rejection; in-band trading continues. |\n| `OPEN_INTEREST_CAP_EXCEEDED` | Market is at its operator-set open-interest cap and the order's next fill would have increased open interest. OI-neutral and OI-reducing orders still match. |\n| `ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT` | Deprecated — no longer emitted; replaced by `FILL_WILL_EXCEED_TRADING_BOUND`. |\n| `ORDER_NOT_FOUND` | `cancelOrder` referenced an order not on the orderbook (already filled, canceled, never placed, or owned by another account). |\n| `ORDER_NOT_FOUND_FOR_MODIFY` | `modifyOrder` referenced an order not on the regular orderbook; TPSL and untriggered orders cannot be modified. The rejected modify is also buffered briefly and applied if the target placement arrives shortly after. |\n| `MODIFY_CHANGED_IMMUTABLE_FIELD` | `modifyOrder` attempted to change an immutable field (`side`, `timeInForce`, `reduceOnly`, or `orderType`). |\n| `MODIFY_ZERO_SIZE` | `modifyOrder` specified a new size of zero or less. |\n| `POSITION_SIZE_CAP_EXCEEDED` | The order, modify, or resulting fill would exceed the per-market position notional cap. Distinct from `UNDERCOLLATERALIZED`: the account may be fully funded — the size is the problem. |\n| `MODIFY_TPSL_NOT_SUPPORTED` | `modifyOrder` targeted an untriggered TPSL order; TPSL trigger parameters cannot be changed via modify. A live TPSL survives unchanged; a buffered modify that meets an arriving TPSL placement cancels that placement as a precaution. |\n| `MODIFY_SUPERSEDED_BY_CANCEL` | `modifyOrder` was discarded because a `cancelOrder` for the same order is pending; cancels always dominate modifies and the order's final state is canceled. |\n| `MODIFY_SIZE_ALREADY_FILLED` | Under total-size modify semantics, `modifyOrder`'s new size (the order's new TOTAL size) is at or below the quantity already filled, leaving nothing to rest. The original order is canceled (a `CANCELED` update precedes this rejection). |\n","enum":["POST_ONLY_WOULD_CROSS","SELF_TRADE","UNDERCOLLATERALIZED","COULD_NOT_FILL","IOC_CANCELED","FOK_FAILED","REDUCE_ONLY_WOULD_INCREASE","TOO_MANY_CLIENT_IDS","DUPLICATE_CLIENT_ID","POSITION_TPSL_ALREADY_EXISTS","ENTRY_TPSL_CANNOT_BE_POSITION_TPSL","OPEN_ORDER_CAP_EXCEEDED","ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT","ORDER_NOT_FOUND","ORDER_NOT_FOUND_FOR_MODIFY","MODIFY_CHANGED_IMMUTABLE_FIELD","MODIFY_ZERO_SIZE","FILL_WILL_EXCEED_TRADING_BOUND","OPEN_INTEREST_CAP_EXCEEDED","POSITION_SIZE_CAP_EXCEEDED","MODIFY_TPSL_NOT_SUPPORTED","MODIFY_SUPERSEDED_BY_CANCEL","MODIFY_SIZE_ALREADY_FILLED"],"uniqueKey":"rejectionReason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid request body","code":"GEO_RESTRICTED","errorSource":"Order","errorType":"Tick","rejectionReason":"POST_ONLY_WOULD_CROSS"}}},"exampleType":"generated"}},"exampleType":"generated"},"39061a2b-8a0d-4ec2-af4b-2cd2f88d7cc0":{"description":"`address` does not match the API key's account, or `accountIndex` does not match the API key's authorized subaccount.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","examples":["Invalid request body"],"isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code for generic (non-order) rejections. Present on geo-restriction blocks; clients should key product-availability UI off this rather than the human `error` string.\n\n| Value | Meaning |\n|------------------|---------|\n| `GEO_RESTRICTED` | The action is not available from the caller's country/region for this product (perps and/or spot). Reads remain available; only state-changing actions are blocked. |\n","enum":["GEO_RESTRICTED"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"errorSource":{"type":"string","description":"Scopes the failure to a specific operation. Present on structured order errors (place / cancel / modify flows); absent on generic HTTP errors.\n","enum":["Order","Cancel"],"uniqueKey":"errorSource","typeLabel":"enum\u003cstring>"},"errorType":{"type":"string","description":"Machine-readable reason for the API-layer rejection. Present alongside `errorSource` on structured order errors; absent on generic HTTP errors.\n\n| Value | Meaning |\n|-------------------|---------|\n| `Tick` | Price or size does not align to the market's tick size / step size. |\n| `InvalidRequest` | A request field failed validation (bad address, unknown market, invalid enum, etc.). TPSL-specific causes: `stopPrice` required when `tpslType` is set; `tpslType` must be `STOP_LOSS` or `TAKE_PROFIT`; `reduceOnly` must be `true` for TPSL orders; trigger price must not sit on the wrong side of the current mark (would fire immediately); batch grouping/shape constraints violated (wrong order count, missing or duplicate `tpslType` legs). |\n| `OracleDeviation` | The order's price deviates from the current oracle price by more than the allowed threshold. Adjust the price closer to the oracle and resubmit. |\n| `ReduceOnly` | A reduce-only order was rejected because filling it would open or increase the account's position rather than reduce it. |\n| `Unavailable` | The requested operation (place / cancel) is temporarily disabled. |\n| `Unauthorized` | API key or trading-identity check failed. |\n| `Forbidden` | The authenticated key is not permitted to perform the requested operation. |\n| `NotImplemented` | The requested capability is not yet available on this path (e.g. TPSL over WebSocket). |\n| `Transmission` | The gateway accepted and validated the request but could not deliver it to the matching engine. Retry. |\n| `Internal` | Unexpected gateway-side failure unrelated to transmission. |\n","enum":["Tick","InvalidRequest","OracleDeviation","ReduceOnly","Unavailable","Unauthorized","Forbidden","NotImplemented","Transmission","Internal"],"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"rejectionReason":{"type":"string","description":"Machine-readable engine-level rejection code. Present on `OrderResponse` / `BatchOrderItemResponse` when `status` is `REJECTED` on the synchronous `200` path (i.e. the gateway already had a definitive engine reject before responding). Absent on `202` responses and on HTTP error bodies — in those cases rejection reasons are delivered asynchronously via the `orders` WebSocket channel.\n\n| Value | Meaning |\n|------------------------------------|---------|\n| `POST_ONLY_WOULD_CROSS` | Post-only order would have crossed the book and taken liquidity. |\n| `SELF_TRADE` | Order would match against the account's own resting order; blocked by self-trade prevention. |\n| `UNDERCOLLATERALIZED` | Account has insufficient free collateral / margin to support the order. |\n| `COULD_NOT_FILL` | Generic \"could not fill\" (legacy; prefer `IOC_CANCELED` / `FOK_FAILED`). |\n| `IOC_CANCELED` | IOC order produced zero fills and was canceled. |\n| `FOK_FAILED` | FOK order could not be fully filled at submission. |\n| `REDUCE_ONLY_WOULD_INCREASE` | reduce-only order would have opened or increased the position. |\n| `TOO_MANY_CLIENT_IDS` | Account already has 10,000 live `clientId`s (the per-account maximum). Cancel or let existing orders reach a terminal state to free slots before placing new ones with distinct `clientId`s. |\n| `DUPLICATE_CLIENT_ID` | Account already has an open order with the same `clientId`. |\n| `POSITION_TPSL_ALREADY_EXISTS` | A position-level TPSL of the same trigger class (TP or SL) already exists for this account+market. At most one TP and one SL per market. |\n| `ENTRY_TPSL_CANNOT_BE_POSITION_TPSL` | A TPSL bound to an entry order (`parentOrderId` set) cannot also be a position-level TPSL; entry-linked TPSLs are sized partial legs. |\n| `OPEN_ORDER_CAP_EXCEEDED` | Account has reached its per-account open-order cap; cancel a resting order or let one reach a terminal state before placing another. |\n| `FILL_WILL_EXCEED_TRADING_BOUND` | Outside regular trading hours, the order would fill at or beyond the active off-hours trading bound. Per-order rejection; in-band trading continues. |\n| `OPEN_INTEREST_CAP_EXCEEDED` | Market is at its operator-set open-interest cap and the order's next fill would have increased open interest. OI-neutral and OI-reducing orders still match. |\n| `ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT` | Deprecated — no longer emitted; replaced by `FILL_WILL_EXCEED_TRADING_BOUND`. |\n| `ORDER_NOT_FOUND` | `cancelOrder` referenced an order not on the orderbook (already filled, canceled, never placed, or owned by another account). |\n| `ORDER_NOT_FOUND_FOR_MODIFY` | `modifyOrder` referenced an order not on the regular orderbook; TPSL and untriggered orders cannot be modified. The rejected modify is also buffered briefly and applied if the target placement arrives shortly after. |\n| `MODIFY_CHANGED_IMMUTABLE_FIELD` | `modifyOrder` attempted to change an immutable field (`side`, `timeInForce`, `reduceOnly`, or `orderType`). |\n| `MODIFY_ZERO_SIZE` | `modifyOrder` specified a new size of zero or less. |\n| `POSITION_SIZE_CAP_EXCEEDED` | The order, modify, or resulting fill would exceed the per-market position notional cap. Distinct from `UNDERCOLLATERALIZED`: the account may be fully funded — the size is the problem. |\n| `MODIFY_TPSL_NOT_SUPPORTED` | `modifyOrder` targeted an untriggered TPSL order; TPSL trigger parameters cannot be changed via modify. A live TPSL survives unchanged; a buffered modify that meets an arriving TPSL placement cancels that placement as a precaution. |\n| `MODIFY_SUPERSEDED_BY_CANCEL` | `modifyOrder` was discarded because a `cancelOrder` for the same order is pending; cancels always dominate modifies and the order's final state is canceled. |\n| `MODIFY_SIZE_ALREADY_FILLED` | Under total-size modify semantics, `modifyOrder`'s new size (the order's new TOTAL size) is at or below the quantity already filled, leaving nothing to rest. The original order is canceled (a `CANCELED` update precedes this rejection). |\n","enum":["POST_ONLY_WOULD_CROSS","SELF_TRADE","UNDERCOLLATERALIZED","COULD_NOT_FILL","IOC_CANCELED","FOK_FAILED","REDUCE_ONLY_WOULD_INCREASE","TOO_MANY_CLIENT_IDS","DUPLICATE_CLIENT_ID","POSITION_TPSL_ALREADY_EXISTS","ENTRY_TPSL_CANNOT_BE_POSITION_TPSL","OPEN_ORDER_CAP_EXCEEDED","ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT","ORDER_NOT_FOUND","ORDER_NOT_FOUND_FOR_MODIFY","MODIFY_CHANGED_IMMUTABLE_FIELD","MODIFY_ZERO_SIZE","FILL_WILL_EXCEED_TRADING_BOUND","OPEN_INTEREST_CAP_EXCEEDED","POSITION_SIZE_CAP_EXCEEDED","MODIFY_TPSL_NOT_SUPPORTED","MODIFY_SUPERSEDED_BY_CANCEL","MODIFY_SIZE_ALREADY_FILLED"],"uniqueKey":"rejectionReason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid request body","code":"GEO_RESTRICTED","errorSource":"Order","errorType":"Tick","rejectionReason":"POST_ONLY_WOULD_CROSS"}}},"exampleType":"generated"}},"exampleType":"generated"},"7440ff51-cf83-4aee-80b5-f67074b2e7b4":{"description":"Rate limit exceeded. Two signals are returned, designed to coexist with both naive HTTP clients and rate-limit-aware SDK clients:\n\n- `Retry-After` header (integer seconds, RFC 7231 compliant). Rounds up — clients that obey this header sleep at least as long as required. Safe for generic HTTP libraries to read.\n- JSON body `retryAfterMs` (precise milliseconds, matches the server's internal computation). Sophisticated clients should prefer this over the header to avoid the round-up overshoot.\n- JSON body `reason` indicates which rate-limit layer rejected: `ip` (per-IP weight bucket), `account_empty` (per-subaccount pool fully exhausted, in drip throttle), `account_partial` (pool has some credit but not enough for this batch — split the request smaller to drain), or `unknown` (defensive fallback).\n- JSON body `clientId` (single-order endpoints) or `clientIds` (batch endpoints) echoes the request's client-supplied order identifier(s) so the client can correlate the rejection to a specific order request.\n","headers":{"Retry-After":{"description":"Seconds the client should wait before retrying the request.","schema":{"type":"integer","minimum":1,"example":1}}},"content":{"application/json":{"schema":{"description":"429 response body shape. Extends the generic `Error` with two rate-limit-specific fields:\n\n- `reason` — which limiter rejected the request. Stable string enum; new values may be added in future versions, so clients should treat unknown values as opaque.\n- `retryAfterMs` — precise milliseconds the client should wait before retrying. The HTTP `Retry-After` header carries the same information rounded up to whole seconds (RFC 7231); prefer this field when sub-second precision matters.\n","type":"object","required":["error"],"properties":{"error":{"type":"string","example":"rate limited","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"reason":{"type":"string","enum":["ip","account_empty","account_partial","unknown"],"description":"Layer that rejected the request:\n * `ip` — per-IP weight bucket exhausted.\n * `account_empty` — per-subaccount pool fully exhausted; the\n drip-throttle has no token available either.\n * `account_partial` — pool has some credit but not enough\n for this batch. Split the request into smaller chunks to\n drain the remaining headroom.\n * `unknown` — defensive fallback; clients should retry per\n `retryAfterMs` and report the occurrence.\n","uniqueKey":"reason","typeLabel":"enum\u003cstring>"},"retryAfterMs":{"type":"integer","format":"int64","minimum":0,"description":"Milliseconds to wait before retrying. Matches the precise wait the rate limiter computed (the `Retry-After` header rounds up to the next whole second).","uniqueKey":"retryAfterMs","typeLabel":"integer\u003cint64>"},"clientId":{"type":"string","description":"Echo of the request's client-supplied `clientId`, so the client can correlate the rejection to a specific order request. Present only on single-order endpoints (placeOrder, modifyOrder, cancelOrder) when the request carried a `clientId`. Omitted on batch endpoints (see `clientIds`) and when the request had none.\n","uniqueKey":"clientId","typeLabel":"string"},"clientIds":{"type":"array","items":{"type":"string","uniqueKey":"clientIds.items.[INDEX]","typeLabel":"string"},"description":"Echo of every client-supplied `clientId` in a batch request (batchPlaceOrders, batchCancelOrders), positionally aligned with the submitted `orders` / `cancels` array. A batch is rejected all-or-nothing, so every listed order was rejected; the echo lets a client submitting multiple batches concurrently correlate the 429 to a specific batch. An entry is empty when that element carried no `clientId` (e.g. a cancel-by-orderId). Omitted on single-order endpoints (see `clientId`).\n","uniqueKey":"clientIds","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":"rate limited","reason":"account_empty","retryAfterMs":850,"clientId":"my-order-42"},"examples":{"Example":{"title":"Example","value":{"error":"rate limited","reason":"account_empty","retryAfterMs":850,"clientId":"my-order-42"}}},"exampleType":"examples"}},"exampleType":"examples"},"b8cd9a22-5075-4eee-abcc-e538ba7e2567":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","examples":["Invalid request body"],"isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code for generic (non-order) rejections. Present on geo-restriction blocks; clients should key product-availability UI off this rather than the human `error` string.\n\n| Value | Meaning |\n|------------------|---------|\n| `GEO_RESTRICTED` | The action is not available from the caller's country/region for this product (perps and/or spot). Reads remain available; only state-changing actions are blocked. |\n","enum":["GEO_RESTRICTED"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"errorSource":{"type":"string","description":"Scopes the failure to a specific operation. Present on structured order errors (place / cancel / modify flows); absent on generic HTTP errors.\n","enum":["Order","Cancel"],"uniqueKey":"errorSource","typeLabel":"enum\u003cstring>"},"errorType":{"type":"string","description":"Machine-readable reason for the API-layer rejection. Present alongside `errorSource` on structured order errors; absent on generic HTTP errors.\n\n| Value | Meaning |\n|-------------------|---------|\n| `Tick` | Price or size does not align to the market's tick size / step size. |\n| `InvalidRequest` | A request field failed validation (bad address, unknown market, invalid enum, etc.). TPSL-specific causes: `stopPrice` required when `tpslType` is set; `tpslType` must be `STOP_LOSS` or `TAKE_PROFIT`; `reduceOnly` must be `true` for TPSL orders; trigger price must not sit on the wrong side of the current mark (would fire immediately); batch grouping/shape constraints violated (wrong order count, missing or duplicate `tpslType` legs). |\n| `OracleDeviation` | The order's price deviates from the current oracle price by more than the allowed threshold. Adjust the price closer to the oracle and resubmit. |\n| `ReduceOnly` | A reduce-only order was rejected because filling it would open or increase the account's position rather than reduce it. |\n| `Unavailable` | The requested operation (place / cancel) is temporarily disabled. |\n| `Unauthorized` | API key or trading-identity check failed. |\n| `Forbidden` | The authenticated key is not permitted to perform the requested operation. |\n| `NotImplemented` | The requested capability is not yet available on this path (e.g. TPSL over WebSocket). |\n| `Transmission` | The gateway accepted and validated the request but could not deliver it to the matching engine. Retry. |\n| `Internal` | Unexpected gateway-side failure unrelated to transmission. |\n","enum":["Tick","InvalidRequest","OracleDeviation","ReduceOnly","Unavailable","Unauthorized","Forbidden","NotImplemented","Transmission","Internal"],"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"rejectionReason":{"type":"string","description":"Machine-readable engine-level rejection code. Present on `OrderResponse` / `BatchOrderItemResponse` when `status` is `REJECTED` on the synchronous `200` path (i.e. the gateway already had a definitive engine reject before responding). Absent on `202` responses and on HTTP error bodies — in those cases rejection reasons are delivered asynchronously via the `orders` WebSocket channel.\n\n| Value | Meaning |\n|------------------------------------|---------|\n| `POST_ONLY_WOULD_CROSS` | Post-only order would have crossed the book and taken liquidity. |\n| `SELF_TRADE` | Order would match against the account's own resting order; blocked by self-trade prevention. |\n| `UNDERCOLLATERALIZED` | Account has insufficient free collateral / margin to support the order. |\n| `COULD_NOT_FILL` | Generic \"could not fill\" (legacy; prefer `IOC_CANCELED` / `FOK_FAILED`). |\n| `IOC_CANCELED` | IOC order produced zero fills and was canceled. |\n| `FOK_FAILED` | FOK order could not be fully filled at submission. |\n| `REDUCE_ONLY_WOULD_INCREASE` | reduce-only order would have opened or increased the position. |\n| `TOO_MANY_CLIENT_IDS` | Account already has 10,000 live `clientId`s (the per-account maximum). Cancel or let existing orders reach a terminal state to free slots before placing new ones with distinct `clientId`s. |\n| `DUPLICATE_CLIENT_ID` | Account already has an open order with the same `clientId`. |\n| `POSITION_TPSL_ALREADY_EXISTS` | A position-level TPSL of the same trigger class (TP or SL) already exists for this account+market. At most one TP and one SL per market. |\n| `ENTRY_TPSL_CANNOT_BE_POSITION_TPSL` | A TPSL bound to an entry order (`parentOrderId` set) cannot also be a position-level TPSL; entry-linked TPSLs are sized partial legs. |\n| `OPEN_ORDER_CAP_EXCEEDED` | Account has reached its per-account open-order cap; cancel a resting order or let one reach a terminal state before placing another. |\n| `FILL_WILL_EXCEED_TRADING_BOUND` | Outside regular trading hours, the order would fill at or beyond the active off-hours trading bound. Per-order rejection; in-band trading continues. |\n| `OPEN_INTEREST_CAP_EXCEEDED` | Market is at its operator-set open-interest cap and the order's next fill would have increased open interest. OI-neutral and OI-reducing orders still match. |\n| `ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT` | Deprecated — no longer emitted; replaced by `FILL_WILL_EXCEED_TRADING_BOUND`. |\n| `ORDER_NOT_FOUND` | `cancelOrder` referenced an order not on the orderbook (already filled, canceled, never placed, or owned by another account). |\n| `ORDER_NOT_FOUND_FOR_MODIFY` | `modifyOrder` referenced an order not on the regular orderbook; TPSL and untriggered orders cannot be modified. The rejected modify is also buffered briefly and applied if the target placement arrives shortly after. |\n| `MODIFY_CHANGED_IMMUTABLE_FIELD` | `modifyOrder` attempted to change an immutable field (`side`, `timeInForce`, `reduceOnly`, or `orderType`). |\n| `MODIFY_ZERO_SIZE` | `modifyOrder` specified a new size of zero or less. |\n| `POSITION_SIZE_CAP_EXCEEDED` | The order, modify, or resulting fill would exceed the per-market position notional cap. Distinct from `UNDERCOLLATERALIZED`: the account may be fully funded — the size is the problem. |\n| `MODIFY_TPSL_NOT_SUPPORTED` | `modifyOrder` targeted an untriggered TPSL order; TPSL trigger parameters cannot be changed via modify. A live TPSL survives unchanged; a buffered modify that meets an arriving TPSL placement cancels that placement as a precaution. |\n| `MODIFY_SUPERSEDED_BY_CANCEL` | `modifyOrder` was discarded because a `cancelOrder` for the same order is pending; cancels always dominate modifies and the order's final state is canceled. |\n| `MODIFY_SIZE_ALREADY_FILLED` | Under total-size modify semantics, `modifyOrder`'s new size (the order's new TOTAL size) is at or below the quantity already filled, leaving nothing to rest. The original order is canceled (a `CANCELED` update precedes this rejection). |\n","enum":["POST_ONLY_WOULD_CROSS","SELF_TRADE","UNDERCOLLATERALIZED","COULD_NOT_FILL","IOC_CANCELED","FOK_FAILED","REDUCE_ONLY_WOULD_INCREASE","TOO_MANY_CLIENT_IDS","DUPLICATE_CLIENT_ID","POSITION_TPSL_ALREADY_EXISTS","ENTRY_TPSL_CANNOT_BE_POSITION_TPSL","OPEN_ORDER_CAP_EXCEEDED","ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT","ORDER_NOT_FOUND","ORDER_NOT_FOUND_FOR_MODIFY","MODIFY_CHANGED_IMMUTABLE_FIELD","MODIFY_ZERO_SIZE","FILL_WILL_EXCEED_TRADING_BOUND","OPEN_INTEREST_CAP_EXCEEDED","POSITION_SIZE_CAP_EXCEEDED","MODIFY_TPSL_NOT_SUPPORTED","MODIFY_SUPERSEDED_BY_CANCEL","MODIFY_SIZE_ALREADY_FILLED"],"uniqueKey":"rejectionReason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid request body","code":"GEO_RESTRICTED","errorSource":"Order","errorType":"Tick","rejectionReason":"POST_ONLY_WOULD_CROSS"}}},"exampleType":"generated"}},"exampleType":"generated"},"690e523d-f867-4637-95e6-2d6ac73f0998":{"description":"The request passed validation and authentication and the gateway built the order, but a transient internal failure prevented it from being delivered to the matching engine. The order was **not** submitted — it did not rest, fill, or change any account state — so the operation is safe to retry: resubmit the identical request. `errorType` is `Transmission`.\n","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","examples":["Invalid request body"],"isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code for generic (non-order) rejections. Present on geo-restriction blocks; clients should key product-availability UI off this rather than the human `error` string.\n\n| Value | Meaning |\n|------------------|---------|\n| `GEO_RESTRICTED` | The action is not available from the caller's country/region for this product (perps and/or spot). Reads remain available; only state-changing actions are blocked. |\n","enum":["GEO_RESTRICTED"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"errorSource":{"type":"string","description":"Scopes the failure to a specific operation. Present on structured order errors (place / cancel / modify flows); absent on generic HTTP errors.\n","enum":["Order","Cancel"],"uniqueKey":"errorSource","typeLabel":"enum\u003cstring>"},"errorType":{"type":"string","description":"Machine-readable reason for the API-layer rejection. Present alongside `errorSource` on structured order errors; absent on generic HTTP errors.\n\n| Value | Meaning |\n|-------------------|---------|\n| `Tick` | Price or size does not align to the market's tick size / step size. |\n| `InvalidRequest` | A request field failed validation (bad address, unknown market, invalid enum, etc.). TPSL-specific causes: `stopPrice` required when `tpslType` is set; `tpslType` must be `STOP_LOSS` or `TAKE_PROFIT`; `reduceOnly` must be `true` for TPSL orders; trigger price must not sit on the wrong side of the current mark (would fire immediately); batch grouping/shape constraints violated (wrong order count, missing or duplicate `tpslType` legs). |\n| `OracleDeviation` | The order's price deviates from the current oracle price by more than the allowed threshold. Adjust the price closer to the oracle and resubmit. |\n| `ReduceOnly` | A reduce-only order was rejected because filling it would open or increase the account's position rather than reduce it. |\n| `Unavailable` | The requested operation (place / cancel) is temporarily disabled. |\n| `Unauthorized` | API key or trading-identity check failed. |\n| `Forbidden` | The authenticated key is not permitted to perform the requested operation. |\n| `NotImplemented` | The requested capability is not yet available on this path (e.g. TPSL over WebSocket). |\n| `Transmission` | The gateway accepted and validated the request but could not deliver it to the matching engine. Retry. |\n| `Internal` | Unexpected gateway-side failure unrelated to transmission. |\n","enum":["Tick","InvalidRequest","OracleDeviation","ReduceOnly","Unavailable","Unauthorized","Forbidden","NotImplemented","Transmission","Internal"],"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"rejectionReason":{"type":"string","description":"Machine-readable engine-level rejection code. Present on `OrderResponse` / `BatchOrderItemResponse` when `status` is `REJECTED` on the synchronous `200` path (i.e. the gateway already had a definitive engine reject before responding). Absent on `202` responses and on HTTP error bodies — in those cases rejection reasons are delivered asynchronously via the `orders` WebSocket channel.\n\n| Value | Meaning |\n|------------------------------------|---------|\n| `POST_ONLY_WOULD_CROSS` | Post-only order would have crossed the book and taken liquidity. |\n| `SELF_TRADE` | Order would match against the account's own resting order; blocked by self-trade prevention. |\n| `UNDERCOLLATERALIZED` | Account has insufficient free collateral / margin to support the order. |\n| `COULD_NOT_FILL` | Generic \"could not fill\" (legacy; prefer `IOC_CANCELED` / `FOK_FAILED`). |\n| `IOC_CANCELED` | IOC order produced zero fills and was canceled. |\n| `FOK_FAILED` | FOK order could not be fully filled at submission. |\n| `REDUCE_ONLY_WOULD_INCREASE` | reduce-only order would have opened or increased the position. |\n| `TOO_MANY_CLIENT_IDS` | Account already has 10,000 live `clientId`s (the per-account maximum). Cancel or let existing orders reach a terminal state to free slots before placing new ones with distinct `clientId`s. |\n| `DUPLICATE_CLIENT_ID` | Account already has an open order with the same `clientId`. |\n| `POSITION_TPSL_ALREADY_EXISTS` | A position-level TPSL of the same trigger class (TP or SL) already exists for this account+market. At most one TP and one SL per market. |\n| `ENTRY_TPSL_CANNOT_BE_POSITION_TPSL` | A TPSL bound to an entry order (`parentOrderId` set) cannot also be a position-level TPSL; entry-linked TPSLs are sized partial legs. |\n| `OPEN_ORDER_CAP_EXCEEDED` | Account has reached its per-account open-order cap; cancel a resting order or let one reach a terminal state before placing another. |\n| `FILL_WILL_EXCEED_TRADING_BOUND` | Outside regular trading hours, the order would fill at or beyond the active off-hours trading bound. Per-order rejection; in-band trading continues. |\n| `OPEN_INTEREST_CAP_EXCEEDED` | Market is at its operator-set open-interest cap and the order's next fill would have increased open interest. OI-neutral and OI-reducing orders still match. |\n| `ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT` | Deprecated — no longer emitted; replaced by `FILL_WILL_EXCEED_TRADING_BOUND`. |\n| `ORDER_NOT_FOUND` | `cancelOrder` referenced an order not on the orderbook (already filled, canceled, never placed, or owned by another account). |\n| `ORDER_NOT_FOUND_FOR_MODIFY` | `modifyOrder` referenced an order not on the regular orderbook; TPSL and untriggered orders cannot be modified. The rejected modify is also buffered briefly and applied if the target placement arrives shortly after. |\n| `MODIFY_CHANGED_IMMUTABLE_FIELD` | `modifyOrder` attempted to change an immutable field (`side`, `timeInForce`, `reduceOnly`, or `orderType`). |\n| `MODIFY_ZERO_SIZE` | `modifyOrder` specified a new size of zero or less. |\n| `POSITION_SIZE_CAP_EXCEEDED` | The order, modify, or resulting fill would exceed the per-market position notional cap. Distinct from `UNDERCOLLATERALIZED`: the account may be fully funded — the size is the problem. |\n| `MODIFY_TPSL_NOT_SUPPORTED` | `modifyOrder` targeted an untriggered TPSL order; TPSL trigger parameters cannot be changed via modify. A live TPSL survives unchanged; a buffered modify that meets an arriving TPSL placement cancels that placement as a precaution. |\n| `MODIFY_SUPERSEDED_BY_CANCEL` | `modifyOrder` was discarded because a `cancelOrder` for the same order is pending; cancels always dominate modifies and the order's final state is canceled. |\n| `MODIFY_SIZE_ALREADY_FILLED` | Under total-size modify semantics, `modifyOrder`'s new size (the order's new TOTAL size) is at or below the quantity already filled, leaving nothing to rest. The original order is canceled (a `CANCELED` update precedes this rejection). |\n","enum":["POST_ONLY_WOULD_CROSS","SELF_TRADE","UNDERCOLLATERALIZED","COULD_NOT_FILL","IOC_CANCELED","FOK_FAILED","REDUCE_ONLY_WOULD_INCREASE","TOO_MANY_CLIENT_IDS","DUPLICATE_CLIENT_ID","POSITION_TPSL_ALREADY_EXISTS","ENTRY_TPSL_CANNOT_BE_POSITION_TPSL","OPEN_ORDER_CAP_EXCEEDED","ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT","ORDER_NOT_FOUND","ORDER_NOT_FOUND_FOR_MODIFY","MODIFY_CHANGED_IMMUTABLE_FIELD","MODIFY_ZERO_SIZE","FILL_WILL_EXCEED_TRADING_BOUND","OPEN_INTEREST_CAP_EXCEEDED","POSITION_SIZE_CAP_EXCEEDED","MODIFY_TPSL_NOT_SUPPORTED","MODIFY_SUPERSEDED_BY_CANCEL","MODIFY_SIZE_ALREADY_FILLED"],"uniqueKey":"rejectionReason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid request body","code":"GEO_RESTRICTED","errorSource":"Order","errorType":"Tick","rejectionReason":"POST_ONLY_WOULD_CROSS"}}},"exampleType":"generated"}},"exampleType":"generated"},"8f03a2d1-cbe1-44b9-9c15-574abeebaf7e":{"description":"Modify orders temporarily disabled.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","examples":["Invalid request body"],"isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code for generic (non-order) rejections. Present on geo-restriction blocks; clients should key product-availability UI off this rather than the human `error` string.\n\n| Value | Meaning |\n|------------------|---------|\n| `GEO_RESTRICTED` | The action is not available from the caller's country/region for this product (perps and/or spot). Reads remain available; only state-changing actions are blocked. |\n","enum":["GEO_RESTRICTED"],"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"errorSource":{"type":"string","description":"Scopes the failure to a specific operation. Present on structured order errors (place / cancel / modify flows); absent on generic HTTP errors.\n","enum":["Order","Cancel"],"uniqueKey":"errorSource","typeLabel":"enum\u003cstring>"},"errorType":{"type":"string","description":"Machine-readable reason for the API-layer rejection. Present alongside `errorSource` on structured order errors; absent on generic HTTP errors.\n\n| Value | Meaning |\n|-------------------|---------|\n| `Tick` | Price or size does not align to the market's tick size / step size. |\n| `InvalidRequest` | A request field failed validation (bad address, unknown market, invalid enum, etc.). TPSL-specific causes: `stopPrice` required when `tpslType` is set; `tpslType` must be `STOP_LOSS` or `TAKE_PROFIT`; `reduceOnly` must be `true` for TPSL orders; trigger price must not sit on the wrong side of the current mark (would fire immediately); batch grouping/shape constraints violated (wrong order count, missing or duplicate `tpslType` legs). |\n| `OracleDeviation` | The order's price deviates from the current oracle price by more than the allowed threshold. Adjust the price closer to the oracle and resubmit. |\n| `ReduceOnly` | A reduce-only order was rejected because filling it would open or increase the account's position rather than reduce it. |\n| `Unavailable` | The requested operation (place / cancel) is temporarily disabled. |\n| `Unauthorized` | API key or trading-identity check failed. |\n| `Forbidden` | The authenticated key is not permitted to perform the requested operation. |\n| `NotImplemented` | The requested capability is not yet available on this path (e.g. TPSL over WebSocket). |\n| `Transmission` | The gateway accepted and validated the request but could not deliver it to the matching engine. Retry. |\n| `Internal` | Unexpected gateway-side failure unrelated to transmission. |\n","enum":["Tick","InvalidRequest","OracleDeviation","ReduceOnly","Unavailable","Unauthorized","Forbidden","NotImplemented","Transmission","Internal"],"uniqueKey":"errorType","typeLabel":"enum\u003cstring>"},"rejectionReason":{"type":"string","description":"Machine-readable engine-level rejection code. Present on `OrderResponse` / `BatchOrderItemResponse` when `status` is `REJECTED` on the synchronous `200` path (i.e. the gateway already had a definitive engine reject before responding). Absent on `202` responses and on HTTP error bodies — in those cases rejection reasons are delivered asynchronously via the `orders` WebSocket channel.\n\n| Value | Meaning |\n|------------------------------------|---------|\n| `POST_ONLY_WOULD_CROSS` | Post-only order would have crossed the book and taken liquidity. |\n| `SELF_TRADE` | Order would match against the account's own resting order; blocked by self-trade prevention. |\n| `UNDERCOLLATERALIZED` | Account has insufficient free collateral / margin to support the order. |\n| `COULD_NOT_FILL` | Generic \"could not fill\" (legacy; prefer `IOC_CANCELED` / `FOK_FAILED`). |\n| `IOC_CANCELED` | IOC order produced zero fills and was canceled. |\n| `FOK_FAILED` | FOK order could not be fully filled at submission. |\n| `REDUCE_ONLY_WOULD_INCREASE` | reduce-only order would have opened or increased the position. |\n| `TOO_MANY_CLIENT_IDS` | Account already has 10,000 live `clientId`s (the per-account maximum). Cancel or let existing orders reach a terminal state to free slots before placing new ones with distinct `clientId`s. |\n| `DUPLICATE_CLIENT_ID` | Account already has an open order with the same `clientId`. |\n| `POSITION_TPSL_ALREADY_EXISTS` | A position-level TPSL of the same trigger class (TP or SL) already exists for this account+market. At most one TP and one SL per market. |\n| `ENTRY_TPSL_CANNOT_BE_POSITION_TPSL` | A TPSL bound to an entry order (`parentOrderId` set) cannot also be a position-level TPSL; entry-linked TPSLs are sized partial legs. |\n| `OPEN_ORDER_CAP_EXCEEDED` | Account has reached its per-account open-order cap; cancel a resting order or let one reach a terminal state before placing another. |\n| `FILL_WILL_EXCEED_TRADING_BOUND` | Outside regular trading hours, the order would fill at or beyond the active off-hours trading bound. Per-order rejection; in-band trading continues. |\n| `OPEN_INTEREST_CAP_EXCEEDED` | Market is at its operator-set open-interest cap and the order's next fill would have increased open interest. OI-neutral and OI-reducing orders still match. |\n| `ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT` | Deprecated — no longer emitted; replaced by `FILL_WILL_EXCEED_TRADING_BOUND`. |\n| `ORDER_NOT_FOUND` | `cancelOrder` referenced an order not on the orderbook (already filled, canceled, never placed, or owned by another account). |\n| `ORDER_NOT_FOUND_FOR_MODIFY` | `modifyOrder` referenced an order not on the regular orderbook; TPSL and untriggered orders cannot be modified. The rejected modify is also buffered briefly and applied if the target placement arrives shortly after. |\n| `MODIFY_CHANGED_IMMUTABLE_FIELD` | `modifyOrder` attempted to change an immutable field (`side`, `timeInForce`, `reduceOnly`, or `orderType`). |\n| `MODIFY_ZERO_SIZE` | `modifyOrder` specified a new size of zero or less. |\n| `POSITION_SIZE_CAP_EXCEEDED` | The order, modify, or resulting fill would exceed the per-market position notional cap. Distinct from `UNDERCOLLATERALIZED`: the account may be fully funded — the size is the problem. |\n| `MODIFY_TPSL_NOT_SUPPORTED` | `modifyOrder` targeted an untriggered TPSL order; TPSL trigger parameters cannot be changed via modify. A live TPSL survives unchanged; a buffered modify that meets an arriving TPSL placement cancels that placement as a precaution. |\n| `MODIFY_SUPERSEDED_BY_CANCEL` | `modifyOrder` was discarded because a `cancelOrder` for the same order is pending; cancels always dominate modifies and the order's final state is canceled. |\n| `MODIFY_SIZE_ALREADY_FILLED` | Under total-size modify semantics, `modifyOrder`'s new size (the order's new TOTAL size) is at or below the quantity already filled, leaving nothing to rest. The original order is canceled (a `CANCELED` update precedes this rejection). |\n","enum":["POST_ONLY_WOULD_CROSS","SELF_TRADE","UNDERCOLLATERALIZED","COULD_NOT_FILL","IOC_CANCELED","FOK_FAILED","REDUCE_ONLY_WOULD_INCREASE","TOO_MANY_CLIENT_IDS","DUPLICATE_CLIENT_ID","POSITION_TPSL_ALREADY_EXISTS","ENTRY_TPSL_CANNOT_BE_POSITION_TPSL","OPEN_ORDER_CAP_EXCEEDED","ORDER_WILL_TAKE_LIQUIDITY_DURING_MARKET_HALT","ORDER_NOT_FOUND","ORDER_NOT_FOUND_FOR_MODIFY","MODIFY_CHANGED_IMMUTABLE_FIELD","MODIFY_ZERO_SIZE","FILL_WILL_EXCEED_TRADING_BOUND","OPEN_INTEREST_CAP_EXCEEDED","POSITION_SIZE_CAP_EXCEEDED","MODIFY_TPSL_NOT_SUPPORTED","MODIFY_SUPERSEDED_BY_CANCEL","MODIFY_SIZE_ALREADY_FILLED"],"uniqueKey":"rejectionReason","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"Invalid request body","code":"GEO_RESTRICTED","errorSource":"Order","errorType":"Tick","rejectionReason":"POST_ONLY_WOULD_CROSS"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"b039b90c-87ba-454c-8017-8fd979fca551":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Hex-encoded Ed25519 public key (64 chars). The public key IS the API key — register it via `POST /createApiKey`. Required on every authenticated request, both read-only and signed.\n","scopes":[],"schemeName":"apiKey"},"timestamp":{"type":"apiKey","in":"header","name":"X-Timestamp","description":"Unix time in **nanoseconds** as a decimal string (e.g. `\"1713825891591000000\"`). Millisecond or second epochs are rejected with `401 Unauthorized`. Must be within ±30,000 ms of server wall-clock, or the request is rejected with `401 Unauthorized`. Required on all mutating / credential-creating endpoints. This same value must appear as the `ct` field in the ordersign typed canonical payload (single-order endpoints) or in each element's `ct` field (batch endpoints).\n","scopes":[],"schemeName":"timestamp"},"signature":{"type":"apiKey","in":"header","name":"X-Signature","description":"Lowercase hex-encoded Ed25519 signature (128 chars).\n\n**Single-order endpoints** (`placeOrder`, `cancelOrder`, `modifyOrder`, and other non-batch mutating routes) sign over the **ordersign typed canonical payload** — a compact, key-sorted JSON object built from parsed request fields using engine-native integer values:\n\n```\nplaceOrder: {\"ad\":\"0x…\",\"ai\":N,[,\"c\":\"…\"],\"ct\":N,\"g\":N,\"m\":N,\"op\":1,\"p\":N,\"q\":N,\"r\":0|1,\"s\":N,\"t\":N,\"v\":1}\ncancelOrder: {\"ad\":\"0x…\",\"ai\":N,[,\"c\":\"…\"],\"ct\":N,[,\"id\":\"…\"],\"m\":N,\"op\":2,\"v\":1}\nmodifyOrder: {\"ad\":\"0x…\",\"ai\":N,[,\"c\":\"…\"],\"ct\":N,\"g\":N,[,\"id\":\"…\"],\"m\":N,\"op\":3,\"p\":N,\"q\":N,\"r\":0|1,\"s\":N,\"t\":N,\"v\":1} (exactly one of id / c)\n```\n\n`ct` must equal the `X-Timestamp` header value. Keys in brackets are conditional (omitted when empty). `op` values: `1`=place, `2`=cancel, `3`=modify. See the `ordersign` package for field definitions and reference signing code.\n\nOther signed routes (e.g. `createApiKey`) still use the legacy scheme: `signing_message = X-Timestamp + ACTION + canonicalJSON(body)`, where `ACTION` is the camelCase final path segment.\n\n**Batch endpoints (`batchPlaceOrders`, `batchCancelOrders`, `batchModifyOrders`) do NOT use this header.** They authenticate with per-element typed ordersign signatures embedded in the request body (see the global auth description and the per-field `signature` descriptions on `OrderRequest` / `CancelOrderRequest` / `ModifyOrderRequest`).\n\nRead endpoints are authenticated by `?address=` (and optionally `X-API-Key`) only — no signature is required, except for the signed affiliate reads (see the Referral tag), which require the full header triple; with no body their signing message is `X-Timestamp + ACTION`. `canonicalJSON(body)` is the JSON body with object keys sorted lexicographically at every level and no whitespace; the server canonicalizes the received body before verifying, so only the bytes signed over must be canonical. Required on all mutating / credential-creating endpoints.\n","scopes":[],"schemeName":"signature"}},"39cfa9d1-cc39-4320-8393-7fd64274e150":{}},"servers":{"8bcbded4-ced7-41f7-9103-ef78afb86c4b":{"url":"https://api.arcus.xyz","description":"Mainnet"},"db341041-78f8-47d5-bb08-4c97d4cfedb3":{"url":"https://api.testnet.arcus.xyz","description":"Testnet"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Hex-encoded Ed25519 public key (64 chars). The public key IS the API key — register it via `POST /createApiKey`. Required on every authenticated request, both read-only and signed.\n","scopes":[],"schemeName":"apiKey"},"schema":{"title":"X-API-Key","type":"string","description":"Hex-encoded Ed25519 public key (64 chars). The public key IS the API key — register it via `POST /createApiKey`. Required on every authenticated request, both read-only and signed.\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKey","name":"X-API-Key"},{"scheme":{"type":"apiKey","in":"header","name":"X-Timestamp","description":"Unix time in **nanoseconds** as a decimal string (e.g. `\"1713825891591000000\"`). Millisecond or second epochs are rejected with `401 Unauthorized`. Must be within ±30,000 ms of server wall-clock, or the request is rejected with `401 Unauthorized`. Required on all mutating / credential-creating endpoints. This same value must appear as the `ct` field in the ordersign typed canonical payload (single-order endpoints) or in each element's `ct` field (batch endpoints).\n","scopes":[],"schemeName":"timestamp"},"schema":{"title":"X-Timestamp","type":"string","description":"Unix time in **nanoseconds** as a decimal string (e.g. `\"1713825891591000000\"`). Millisecond or second epochs are rejected with `401 Unauthorized`. Must be within ±30,000 ms of server wall-clock, or the request is rejected with `401 Unauthorized`. Required on all mutating / credential-creating endpoints. This same value must appear as the `ct` field in the ordersign typed canonical payload (single-order endpoints) or in each element's `ct` field (batch endpoints).\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"timestamp","name":"X-Timestamp"},{"scheme":{"type":"apiKey","in":"header","name":"X-Signature","description":"Lowercase hex-encoded Ed25519 signature (128 chars).\n\n**Single-order endpoints** (`placeOrder`, `cancelOrder`, `modifyOrder`, and other non-batch mutating routes) sign over the **ordersign typed canonical payload** — a compact, key-sorted JSON object built from parsed request fields using engine-native integer values:\n\n```\nplaceOrder: {\"ad\":\"0x…\",\"ai\":N,[,\"c\":\"…\"],\"ct\":N,\"g\":N,\"m\":N,\"op\":1,\"p\":N,\"q\":N,\"r\":0|1,\"s\":N,\"t\":N,\"v\":1}\ncancelOrder: {\"ad\":\"0x…\",\"ai\":N,[,\"c\":\"…\"],\"ct\":N,[,\"id\":\"…\"],\"m\":N,\"op\":2,\"v\":1}\nmodifyOrder: {\"ad\":\"0x…\",\"ai\":N,[,\"c\":\"…\"],\"ct\":N,\"g\":N,[,\"id\":\"…\"],\"m\":N,\"op\":3,\"p\":N,\"q\":N,\"r\":0|1,\"s\":N,\"t\":N,\"v\":1} (exactly one of id / c)\n```\n\n`ct` must equal the `X-Timestamp` header value. Keys in brackets are conditional (omitted when empty). `op` values: `1`=place, `2`=cancel, `3`=modify. See the `ordersign` package for field definitions and reference signing code.\n\nOther signed routes (e.g. `createApiKey`) still use the legacy scheme: `signing_message = X-Timestamp + ACTION + canonicalJSON(body)`, where `ACTION` is the camelCase final path segment.\n\n**Batch endpoints (`batchPlaceOrders`, `batchCancelOrders`, `batchModifyOrders`) do NOT use this header.** They authenticate with per-element typed ordersign signatures embedded in the request body (see the global auth description and the per-field `signature` descriptions on `OrderRequest` / `CancelOrderRequest` / `ModifyOrderRequest`).\n\nRead endpoints are authenticated by `?address=` (and optionally `X-API-Key`) only — no signature is required, except for the signed affiliate reads (see the Referral tag), which require the full header triple; with no body their signing message is `X-Timestamp + ACTION`. `canonicalJSON(body)` is the JSON body with object keys sorted lexicographically at every level and no whitespace; the server canonicalizes the received body before verifying, so only the bytes signed over must be canonical. Required on all mutating / credential-creating endpoints.\n","scopes":[],"schemeName":"signature"},"schema":{"title":"X-Signature","type":"string","description":"Lowercase hex-encoded Ed25519 signature (128 chars).\n\n**Single-order endpoints** (`placeOrder`, `cancelOrder`, `modifyOrder`, and other non-batch mutating routes) sign over the **ordersign typed canonical payload** — a compact, key-sorted JSON object built from parsed request fields using engine-native integer values:\n\n```\nplaceOrder: {\"ad\":\"0x…\",\"ai\":N,[,\"c\":\"…\"],\"ct\":N,\"g\":N,\"m\":N,\"op\":1,\"p\":N,\"q\":N,\"r\":0|1,\"s\":N,\"t\":N,\"v\":1}\ncancelOrder: {\"ad\":\"0x…\",\"ai\":N,[,\"c\":\"…\"],\"ct\":N,[,\"id\":\"…\"],\"m\":N,\"op\":2,\"v\":1}\nmodifyOrder: {\"ad\":\"0x…\",\"ai\":N,[,\"c\":\"…\"],\"ct\":N,\"g\":N,[,\"id\":\"…\"],\"m\":N,\"op\":3,\"p\":N,\"q\":N,\"r\":0|1,\"s\":N,\"t\":N,\"v\":1} (exactly one of id / c)\n```\n\n`ct` must equal the `X-Timestamp` header value. Keys in brackets are conditional (omitted when empty). `op` values: `1`=place, `2`=cancel, `3`=modify. See the `ordersign` package for field definitions and reference signing code.\n\nOther signed routes (e.g. `createApiKey`) still use the legacy scheme: `signing_message = X-Timestamp + ACTION + canonicalJSON(body)`, where `ACTION` is the camelCase final path segment.\n\n**Batch endpoints (`batchPlaceOrders`, `batchCancelOrders`, `batchModifyOrders`) do NOT use this header.** They authenticate with per-element typed ordersign signatures embedded in the request body (see the global auth description and the per-field `signature` descriptions on `OrderRequest` / `CancelOrderRequest` / `ModifyOrderRequest`).\n\nRead endpoints are authenticated by `?address=` (and optionally `X-API-Key`) only — no signature is required, except for the signed affiliate reads (see the Referral tag), which require the full header triple; with no body their signing message is `X-Timestamp + ACTION`. `canonicalJSON(body)` is the JSON body with object keys sorted lexicographically at every level and no whitespace; the server canonicalizes the received body before verifying, so only the bytes signed over must be canonical. Required on all mutating / credential-creating endpoints.\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"signature","name":"X-Signature"}],"title":"apiKey \u0026 timestamp \u0026 signature"}]},"originalFileLocation":"api-reference/openapi.yml"},"subdomain":"arcus-11aecf6e","siteName":"Arcus Docs","title":"Batch modify orders - Arcus Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-12T03:48:06.437Z","originalFileLocation":"api-reference/exchange/batch-modify-orders.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Modify up to 100 open orders in a single request.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Arcus Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Batch modify orders - Arcus Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Modify up to 100 open orders in a single request.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Arcus Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.arcus.xyz/api-reference/exchange/batch-modify-orders\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://arcus-11aecf6e.mintlify.site/_mintlify/api/og/v2?division=Exchange\u0026amp;title=Batch+modify+orders\u0026amp;description=Modify+up+to+100+open+orders+in+a+single+request.\u0026amp;theme=8f431044d56cd21a41b03f79\u0026amp;signature=48613f36ac12166d47fa24bedb0823e198af4d161d3789264ba16a5bdc514dba\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Batch modify orders - Arcus Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Modify up to 100 open orders in a single request.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://arcus-11aecf6e.mintlify.site/_mintlify/api/og/v2?division=Exchange\u0026amp;title=Batch+modify+orders\u0026amp;description=Modify+up+to+100+open+orders+in+a+single+request.\u0026amp;theme=8f431044d56cd21a41b03f79\u0026amp;signature=48613f36ac12166d47fa24bedb0823e198af4d161d3789264ba16a5bdc514dba\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/arcus-11aecf6e/zluNDxrkwkprdXlm/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Arcus Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.arcus.xyz/api-reference/exchange/batch-modify-orders\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/exchange/batch-modify-orders.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.arcus.xyz/#organization\",\"name\":\"Arcus Docs\",\"url\":\"https://docs.arcus.xyz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/arcus-11aecf6e/Pw2ZUiZemhLSrOMO/logo/light.svg?fit=max\u0026auto=format\u0026n=Pw2ZUiZemhLSrOMO\u0026q=85\u0026s=9bbd1de2de2a31d08c50e0d58bdac466\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.arcus.xyz#website\",\"name\":\"Arcus Docs\",\"url\":\"https://docs.arcus.xyz\",\"publisher\":{\"@id\":\"https://docs.arcus.xyz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.arcus.xyz/api-reference/exchange/batch-modify-orders#webpage\",\"url\":\"https://docs.arcus.xyz/api-reference/exchange/batch-modify-orders\",\"name\":\"Batch modify orders\",\"description\":\"Modify up to 100 open orders in a single request.\",\"dateModified\":\"2026-11-12T03:48:06.437Z\",\"isPartOf\":{\"@id\":\"https://docs.arcus.xyz#website\"},\"breadcrumb\":{\"@id\":\"https://docs.arcus.xyz/api-reference/exchange/batch-modify-orders#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.arcus.xyz/api-reference/exchange/batch-modify-orders#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.arcus.xyz/api-reference/public/service-info\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Exchange\",\"item\":\"https://docs.arcus.xyz/api-reference/exchange/place-order\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Batch modify orders\",\"item\":\"https://docs.arcus.xyz/api-reference/exchange/batch-modify-orders\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.arcus.xyz/api-reference/exchange/batch-modify-orders#apireference\",\"headline\":\"Batch modify orders\",\"name\":\"Batch modify orders\",\"description\":\"Modify up to 100 open orders in a single request.\",\"url\":\"https://docs.arcus.xyz/api-reference/exchange/batch-modify-orders\",\"mainEntityOfPage\":{\"@id\":\"https://docs.arcus.xyz/api-reference/exchange/batch-modify-orders#webpage\"},\"dateModified\":\"2026-11-12T03:48:06.437Z\",\"publisher\":{\"@id\":\"https://docs.arcus.xyz/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.arcus.xyz#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Arcus Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Arcus Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/exchange/batch-modify-orders.md","siteName":"Arcus Docs","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/fund-testnet-account"}]},{"tab":"Concepts","pages":[{"title":"Concepts","href":"/concepts/onboarding"}]},{"tab":"API reference","groups":[{"group":"API documentation","pages":[{"title":"Introduction","href":"/api-reference/introduction"},{"title":"Authentication","href":"/api-reference/authentication"},{"title":"WebSocket","href":"/api-reference/websocket"},{"title":"Rate limits","href":"/api-reference/rate-limits"}]},{"group":"Endpoints","pages":[{"group":"Public","pages":[{"title":"Service info","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /","href":"/api-reference/public/service-info"},{"title":"Health check","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /health","href":"/api-reference/public/health-check"},{"title":"Get L2 orderbook snapshot","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/l2OrderBook/{market}","href":"/api-reference/public/get-l2-orderbook-snapshot"},{"title":"Get Best Bid Offer (BBO)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/bbo/{market}","href":"/api-reference/public/get-best-bid-offer-bbo"},{"title":"Get current server time","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/time","href":"/api-reference/public/get-current-server-time"},{"title":"Get all mid prices","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/mids","href":"/api-reference/public/get-all-mid-prices"},{"title":"Get live prices for all markets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/prices","href":"/api-reference/public/get-live-prices-for-all-markets"},{"title":"Get fee tier table","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/feetiers","href":"/api-reference/public/get-fee-tier-table"},{"title":"Get referral commission rate schedule","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/commissionrates","href":"/api-reference/public/get-referral-commission-rate-schedule"},{"title":"Get markets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/markets","href":"/api-reference/public/get-markets"},{"title":"Get market fee schedules","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/markets/feeSchedules","href":"/api-reference/public/get-market-fee-schedules"},{"title":"Get corporate actions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/corporateActions","href":"/api-reference/public/get-corporate-actions"},{"title":"Get corporate actions for a market","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/corporateActions/{market_id}","href":"/api-reference/public/get-corporate-actions-for-a-market"},{"title":"Get spot collateral assets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/spotAssets","href":"/api-reference/public/get-spot-collateral-assets"},{"title":"Get global lending attributes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/lendingAttributes","href":"/api-reference/public/get-global-lending-attributes"},{"title":"Get recent public trades","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/trades","href":"/api-reference/public/get-recent-public-trades"},{"title":"Get a single trade by ID","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/trade/{tradeId}","href":"/api-reference/public/get-a-single-trade-by-id"},{"title":"Get OHLCV candles","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/candles","href":"/api-reference/public/get-ohlcv-candles"},{"title":"Get open orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/openOrders","href":"/api-reference/public/get-open-orders"},{"title":"Get order history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/orders","href":"/api-reference/public/get-order-history"},{"title":"Get fills","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/fills","href":"/api-reference/public/get-fills"},{"title":"Get spot fills","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/spotFills","href":"/api-reference/public/get-spot-fills"},{"title":"Get fill by ID","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/fill/{tradeId}","href":"/api-reference/public/get-fill-by-id"},{"title":"Get account transfer updates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/accountTransferUpdates","href":"/api-reference/public/get-account-transfer-updates"},{"title":"Get funding payments","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/funding","href":"/api-reference/public/get-funding-payments"},{"title":"Get interest payments","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/interest","href":"/api-reference/public/get-interest-payments"},{"title":"Get market funding rates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/fundingRates","href":"/api-reference/public/get-market-funding-rates"},{"title":"Get portfolio history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/portfolio","href":"/api-reference/public/get-portfolio-history"},{"title":"Get current rate-limit usage","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/rateLimit","href":"/api-reference/public/get-current-rate-limit-usage"},{"title":"Get positions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/positions","href":"/api-reference/public/get-positions"},{"title":"Get spot positions","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/spotPositions","href":"/api-reference/public/get-spot-positions"},{"title":"Get account","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/account","href":"/api-reference/public/get-account"},{"title":"Get account stats","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/account/stats","href":"/api-reference/public/get-account-stats"},{"title":"Get order status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/order/{orderId}","href":"/api-reference/public/get-order-status"},{"title":"Get leverage and margin mode for an account across all markets","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/leverages","href":"/api-reference/public/get-leverage-and-margin-mode-for-an-account-across-all-markets"},{"title":"Get the all-traders leaderboard","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/leaderboard","href":"/api-reference/public/get-the-all-traders-leaderboard"}]},{"group":"Exchange","pages":[{"title":"Place order","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/placeOrder","href":"/api-reference/exchange/place-order"},{"title":"Place batch orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/batchPlaceOrders","href":"/api-reference/exchange/place-batch-orders"},{"title":"Cancel order","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/cancelOrder","href":"/api-reference/exchange/cancel-order"},{"title":"Batch cancel orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/batchCancelOrders","href":"/api-reference/exchange/batch-cancel-orders"},{"title":"Schedule cancel-all (dead man's switch)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/scheduleCancel","href":"/api-reference/exchange/schedule-cancel-all-dead-mans-switch"},{"title":"Cancel all open orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/cancelAllOrders","href":"/api-reference/exchange/cancel-all-open-orders"},{"title":"Modify order","description":"Modify the price and/or quantity of an open order.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/modifyOrder","href":"/api-reference/exchange/modify-order"},{"title":"Batch modify orders","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/batchModifyOrders","href":"/api-reference/exchange/batch-modify-orders"},{"title":"Set leverage for a market","description":"Set per-(account, market) leverage.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/setLeverage","href":"/api-reference/exchange/set-leverage-for-a-market"},{"title":"Add or remove margin on an isolated-mode position","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/adjustIsolatedMargin","href":"/api-reference/exchange/add-or-remove-margin-on-an-isolated-mode-position"},{"title":"Sell spot collateral to settle the account's loan","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/settleLoan","href":"/api-reference/exchange/sell-spot-collateral-to-settle-the-accounts-loan"},{"title":"Submit withdrawal","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/withdraw","href":"/api-reference/exchange/submit-withdrawal"},{"title":"Submit internal transfer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/transfer","href":"/api-reference/exchange/submit-internal-transfer"}]},{"group":"Onboarding","pages":[{"title":"Get API keys","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/apiKeys","href":"/api-reference/onboarding/get-api-keys"},{"title":"Create API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/createApiKey","href":"/api-reference/onboarding/create-api-key"},{"title":"Revoke API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/revokeApiKey","href":"/api-reference/onboarding/revoke-api-key"}]},{"group":"Referral","pages":[{"title":"Create referral code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/createCode","href":"/api-reference/referral/create-referral-code"},{"title":"Register as referee","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/registerAffiliate","href":"/api-reference/referral/register-as-referee"},{"title":"Update kickback rate","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/kickback","href":"/api-reference/referral/update-kickback-rate"},{"title":"Revoke referral code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/revokeCode","href":"/api-reference/referral/revoke-referral-code"},{"title":"Rename referral code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/modifyCode","href":"/api-reference/referral/rename-referral-code"},{"title":"Claim accrued commission","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/claim","href":"/api-reference/referral/claim-accrued-commission"},{"title":"Get affiliate info","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/info","href":"/api-reference/referral/get-affiliate-info"},{"title":"Get the caller's referral code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/code","href":"/api-reference/referral/get-the-callers-referral-code"},{"title":"Get referees","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/referees","href":"/api-reference/referral/get-referees"},{"title":"Get my referrer","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/myReferrer","href":"/api-reference/referral/get-my-referrer"},{"title":"Get affiliate leaderboard","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/leaderboard","href":"/api-reference/referral/get-affiliate-leaderboard"},{"title":"Get affiliate commission history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/commissions","href":"/api-reference/referral/get-affiliate-commission-history"},{"title":"Get affiliate claim history","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/claims","href":"/api-reference/referral/get-affiliate-claim-history"},{"title":"Look up a single claim","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/claimStatus","href":"/api-reference/referral/look-up-a-single-claim"},{"title":"Check whether a referral code is available","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/codeAvailable","href":"/api-reference/referral/check-whether-a-referral-code-is-available"},{"title":"List the caller's invite codes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml get /v1/affiliate/inviteCodes","href":"/api-reference/referral/list-the-callers-invite-codes"},{"title":"Redeem an invite code","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yml post /v1/affiliate/redeemInvite","href":"/api-reference/referral/redeem-an-invite-code"}]}]},{"group":"WebSocket","pages":[{"group":"Market data","pages":[{"asyncapi":"api-reference/asyncapi.yaml l2Orderbook","href":"/api-reference/market-data/l2orderbook","title":"L2 orderbook","version":null},{"asyncapi":"api-reference/asyncapi.yaml l2OrderbookUpdates","href":"/api-reference/market-data/l2orderbookupdates","title":"L2 orderbook updates","version":null},{"asyncapi":"api-reference/asyncapi.yaml trades","href":"/api-reference/market-data/trades","title":"Trades","version":null},{"asyncapi":"api-reference/asyncapi.yaml markets","href":"/api-reference/market-data/markets","title":"Markets","version":null},{"asyncapi":"api-reference/asyncapi.yaml oraclePrices","href":"/api-reference/market-data/oracleprices","title":"Oracle prices","version":null},{"asyncapi":"api-reference/asyncapi.yaml bbo","href":"/api-reference/market-data/bbo","title":"Bbo","version":null},{"asyncapi":"api-reference/asyncapi.yaml lendingRates","href":"/api-reference/market-data/lendingrates","title":"Lending rates","version":null},{"asyncapi":"api-reference/asyncapi.yaml predictedFunding","href":"/api-reference/market-data/predictedfunding","title":"Predicted funding","version":null},{"asyncapi":"api-reference/asyncapi.yaml exchangeAttributeUpdates","href":"/api-reference/market-data/exchangeattributeupdates","title":"Exchange attribute updates","version":null},{"asyncapi":"api-reference/asyncapi.yaml marketAttributes","href":"/api-reference/market-data/marketattributes","title":"Market attributes","version":null},{"asyncapi":"api-reference/asyncapi.yaml candles","href":"/api-reference/market-data/candles","title":"Candles","version":null}]},{"group":"Account","pages":[{"asyncapi":"api-reference/asyncapi.yaml account","href":"/api-reference/account/account","title":"Account","version":null},{"asyncapi":"api-reference/asyncapi.yaml positions","href":"/api-reference/account/positions","title":"Positions","version":null},{"asyncapi":"api-reference/asyncapi.yaml spotPositions","href":"/api-reference/account/spotpositions","title":"Spot positions","version":null},{"asyncapi":"api-reference/asyncapi.yaml userFills","href":"/api-reference/account/userfills","title":"User fills","version":null},{"asyncapi":"api-reference/asyncapi.yaml spotFills","href":"/api-reference/account/spotfills","title":"Spot fills","version":null},{"asyncapi":"api-reference/asyncapi.yaml settleLoanResults","href":"/api-reference/account/settleloanresults","title":"Settle loan results","version":null},{"asyncapi":"api-reference/asyncapi.yaml orders","href":"/api-reference/account/orders","title":"Orders","version":null},{"asyncapi":"api-reference/asyncapi.yaml funding","href":"/api-reference/account/funding","title":"Funding","version":null},{"asyncapi":"api-reference/asyncapi.yaml accountTransferUpdates","href":"/api-reference/account/accounttransferupdates","title":"Account transfer updates","version":null},{"asyncapi":"api-reference/asyncapi.yaml accountAttributeUpdates","href":"/api-reference/account/accountattributeupdates","title":"Account attribute updates","version":null}]},{"group":"Trading","pages":[{"asyncapi":"api-reference/asyncapi.yaml orderOperations","href":"/api-reference/trading/orderoperations","title":"Order operations","version":null}]}]},{"group":"Changelog","pages":[{"title":"Changelog API (Mainnet)","href":"/changelog"},{"title":"Upcoming mainnet release","href":"/changelog/upcoming"},{"title":"Changelog API (Testnet)","href":"/changelog/testnet"},{"title":"Arcus Changelog","href":"/changelog/frontend"}]}]}]},"basePath":"","title":"Batch modify orders - Arcus Docs","buildId":"dpl_715YoAgvjTGBDdo8RtXmHKM22b5p","deploymentId":"dpl_715YoAgvjTGBDdo8RtXmHKM22b5p","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-BvKnMd7F.js","utils-BMt52org.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CGXZuDGO.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dl57XWH2.js","snippetPresets-CWd8CxSk.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BR-Wkc_D.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-YMmi08aZ.js","shallow-DBC1OB78.js","getApiPlaygroundDisplay-Be7mmEzP.js","CodeSnippet-B14o1TgQ.js","CodeSnippets-CJ2q3fTq.js","Page-Chgj7sZe.js","getPastedJson-DnpLXm8x.js","icon-BpkSFtdK.js","MethodPill-BO3zPf-g.js","DuplicateIcon-Bib3qwfw.js","createIcon-CY2noFo3.js","DynamicMarkdown-TAXIW2vN.js","SectionHeading-Dfs3Fmfw.js","axios-vUo_bRtp.js","Markdown-CGAo_eqA.js","clsx-BNa-H6W6.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-r2tNEC1n.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-B7oWe6jc.js"]}