Places a market, limit, stop or stop-limit order, optionally with a bracket: up to three take profits and three stop losses, written as exits. trdrs lays the bracket out as pairs along the position, nearest the entry first, each pair’s take profit and stop loss cancelling each other. It records the bracket before it sends the entry, then rests each pair once the part of the position the pair protects has filled, or hands the pairs to the provider with the entry where the provider holds them (bracket.attached). A stop loss that moves itself, to breakeven or trailing, is moved by trdrs on every provider that holds a bracket.
clientOrderId is the idempotency key, so retry an order with the same id and it is never placed twice. Call GET /api/trading/actions first to learn whether the order would be refused, and why. On the paper book an order waits, at most 5 seconds, for a price of its instrument that has not arrived yet, for that price to reach the account’s risk check on an instrument the account does not hold yet, and for the risk check to process the account’s latest change, so the answer can take that long. A reduce-only order carries no exits: it opens no position for them to protect, and is refused with 400.
Required key: Trading API key. A Connect app’s backend can also send it with the app’s API key, and a venue’s backend with its Venue key, which carries trader:trade, each naming one of its own traders in x-trdrs-trader: it then runs on that trader’s own accounts.
The Trading API key (trdrs_sk_…), for market data, orders and account state on the accounts its owner holds. Use it server-to-server, and keep it on your server. Its scope is named trading in the API.
Close only: the order can shrink the position and never open or add to it. It carries no exits.
Response
The order is placed. bracket is the bracket placed with it, or null. The account stream carries the whole bracket at the same revision, with its ladders and the orders resting for it.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"trdrs Engine API","description":"Market data, trading and venue infrastructure: programmatic trading and business integrations through one documented API.","colors":{"primary":"#0a0a0a","light":"#fafafa","dark":"#0a0a0a"},"logo":{"light":"https://mintcdn.com/trdrs/VlyBylpRulgoNVYk/logo.svg?fit=max\u0026auto=format\u0026n=VlyBylpRulgoNVYk\u0026q=85\u0026s=0725a6173d2c03859de4fc3b0a99ea50","dark":"https://mintcdn.com/trdrs/VlyBylpRulgoNVYk/logo.svg?fit=max\u0026auto=format\u0026n=VlyBylpRulgoNVYk\u0026q=85\u0026s=0725a6173d2c03859de4fc3b0a99ea50"},"favicon":"https://mintcdn.com/trdrs/VlyBylpRulgoNVYk/logo.svg?fit=max\u0026auto=format\u0026n=VlyBylpRulgoNVYk\u0026q=85\u0026s=0725a6173d2c03859de4fc3b0a99ea50","api":{"playground":{"display":"simple"}},"appearance":{"default":"dark","strict":false},"background":{"color":{"light":"#ffffff","dark":"#0f0f0f"}},"navbar":{"links":[{"href":"https://trdrs.co/developers","label":"Developers"},{"href":"https://sandbox.trdrs.co/settings/api","label":"Sandbox"}],"primary":{"type":"button","label":"Get started","href":"/build"}},"fonts":{"family":"Inter"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"trdrs","hasAudioNarration":false,"actualSubdomain":"trdrs","customDomains":["docs.trdrs.co"],"gitSource":{"type":"github","owner":"trdrsco","repo":"trdrs-engine","deployBranch":"main","contentDirectory":"packages/developer-docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6adec344531268f76f8b6d66","collectionId":"2db9c8d8-38fd-48da-8905-eb1da164d506","liveDeploymentHistoryId":"6adec344531268f76f8b6d66","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6adec344531268f76f8b6d66","clientVersion":"0.0.3969","searchFilterCounts":[{"language":"default","tag":"API reference","count":163},{"language":"default","tag":"Endpoints","count":162},{"language":"default","tag":"Venues","count":117},{"language":"default","tag":"Guides","count":47},{"language":"default","tag":"Trading","count":46},{"language":"default","tag":"Connect","count":21},{"language":"default","tag":"Get started","count":20},{"language":"default","tag":"Venue accounts","count":20},{"language":"default","tag":"Market data","count":18},{"language":"default","tag":"Orders","count":18}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"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":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","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":"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":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"html{font-size:90%}"}],"page":{"pagePath":"api-reference/trading/place-an-order","slug":"/api-reference/trading/place-an-order","pageMetadata":{"title":"Place an order","description":"Places a market, limit, stop or stop-limit order, optionally with a bracket: up to three take profits and three stop losses, written as `exits`. trdrs lays the bracket out as pairs along the position, nearest the entry first, each pair's take profit and stop loss cancelling each other. It records the bracket before it sends the entry, then rests each pair once the part of the position the pair protects has filled, or hands the pairs to the provider with the entry where the provider holds them (`bracket.attached`). A stop loss that moves itself, to breakeven or trailing, is moved by trdrs on every provider that holds a bracket.\n\n`clientOrderId` is the idempotency key, so retry an order with the same id and it is never placed twice. Call `GET /api/trading/actions` first to learn whether the order would be refused, and why. On the paper book an order waits, at most 5 seconds, for a price of its instrument that has not arrived yet, for that price to reach the account's risk check on an instrument the account does not hold yet, and for the risk check to process the account's latest change, so the answer can take that long. A reduce-only order carries no exits: it opens no position for them to protect, and is refused with 400.\n\nRequired key: Trading API key. A Connect app's backend can also send it with the app's API key, and a venue's backend with its Venue key, which carries `trader:trade`, each naming one of its own traders in `x-trdrs-trader`: it then runs on that trader's own accounts.","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/order","href":"/api-reference/trading/place-an-order","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Places a market, limit, stop or stop-limit order, optionally with a bracket: up to three take profits and three stop losses, written as \", _jsx(_components.code, {\n children: \"exits\"\n }), \". trdrs lays the bracket out as pairs along the position, nearest the entry first, each pair’s take profit and stop loss cancelling each other. It records the bracket before it sends the entry, then rests each pair once the part of the position the pair protects has filled, or hands the pairs to the provider with the entry where the provider holds them (\", _jsx(_components.code, {\n children: \"bracket.attached\"\n }), \"). A stop loss that moves itself, to breakeven or trailing, is moved by trdrs on every provider that holds a bracket.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"clientOrderId\"\n }), \" is the idempotency key, so retry an order with the same id and it is never placed twice. Call \", _jsx(_components.code, {\n children: \"GET /api/trading/actions\"\n }), \" first to learn whether the order would be refused, and why. On the paper book an order waits, at most 5 seconds, for a price of its instrument that has not arrived yet, for that price to reach the account’s risk check on an instrument the account does not hold yet, and for the risk check to process the account’s latest change, so the answer can take that long. A reduce-only order carries no exits: it opens no position for them to protect, and is refused with 400.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Required key: Trading API key. A Connect app’s backend can also send it with the app’s API key, and a venue’s backend with its Venue key, which carries \", _jsx(_components.code, {\n children: \"trader:trade\"\n }), \", each naming one of its own traders in \", _jsx(_components.code, {\n children: \"x-trdrs-trader\"\n }), \": it then runs on that trader’s own accounts.\"]\n })]\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}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Place an order","description":"Places a market, limit, stop or stop-limit order, optionally with a bracket: up to three take profits and three stop losses, written as `exits`. trdrs lays the bracket out as pairs along the position, nearest the entry first, each pair's take profit and stop loss cancelling each other. It records the bracket before it sends the entry, then rests each pair once the part of the position the pair protects has filled, or hands the pairs to the provider with the entry where the provider holds them (`bracket.attached`). A stop loss that moves itself, to breakeven or trailing, is moved by trdrs on every provider that holds a bracket.\n\n`clientOrderId` is the idempotency key, so retry an order with the same id and it is never placed twice. Call `GET /api/trading/actions` first to learn whether the order would be refused, and why. On the paper book an order waits, at most 5 seconds, for a price of its instrument that has not arrived yet, for that price to reach the account's risk check on an instrument the account does not hold yet, and for the risk check to process the account's latest change, so the answer can take that long. A reduce-only order carries no exits: it opens no position for them to protect, and is refused with 400.\n\nRequired key: Trading API key. A Connect app's backend can also send it with the app's API key, and a venue's backend with its Venue key, which carries `trader:trade`, each naming one of its own traders in `x-trdrs-trader`: it then runs on that trader's own accounts.","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/order","href":"/api-reference/trading/place-an-order","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Trading"],"summary":"Place an order","description":"Places a market, limit, stop or stop-limit order, optionally with a bracket: up to three take profits and three stop losses, written as `exits`. trdrs lays the bracket out as pairs along the position, nearest the entry first, each pair's take profit and stop loss cancelling each other. It records the bracket before it sends the entry, then rests each pair once the part of the position the pair protects has filled, or hands the pairs to the provider with the entry where the provider holds them (`bracket.attached`). A stop loss that moves itself, to breakeven or trailing, is moved by trdrs on every provider that holds a bracket.\n\n`clientOrderId` is the idempotency key, so retry an order with the same id and it is never placed twice. Call `GET /api/trading/actions` first to learn whether the order would be refused, and why. On the paper book an order waits, at most 5 seconds, for a price of its instrument that has not arrived yet, for that price to reach the account's risk check on an instrument the account does not hold yet, and for the risk check to process the account's latest change, so the answer can take that long. A reduce-only order carries no exits: it opens no position for them to protect, and is refused with 400.\n\nRequired key: Trading API key. A Connect app's backend can also send it with the app's API key, and a venue's backend with its Venue key, which carries `trader:trade`, each naming one of its own traders in `x-trdrs-trader`: it then runs on that trader's own accounts.","security":["701f4ed1-d5a5-48a9-a390-e4c341b780f4","fea18f5e-8e9c-4303-9c3b-00489ff07107","ca2f234e-8da4-42bc-bbd7-4e67714a989c"],"parameters":["a0041b32-f592-4f04-8fb5-bbaf3781f475","9f439853-58ec-46f0-a99a-5d35f03d57b8"],"requestBody":"cfb2f2ae-c294-4382-bf9a-70493f849d27","responses":{"200":"bdea2d71-30cc-49ea-b9c5-da001c1829c4","400":"23030045-d233-4d04-8dd4-55dd060b3f25","401":"17644a68-88ac-435c-b551-371d744d837c","403":"52b8e22e-c649-475e-9641-862d4ec2d40b","409":"0f9ae432-bc7c-4dfc-a33e-843c170cc038","422":"e2d9b774-55ae-4f20-89ef-5cd71b415a09","423":"da6b63bf-1c01-428c-96a5-fa3372c32496","503":"f58de498-93cf-42bd-b52b-c9a374cd4bd6"},"x-codeSamples":[{"lang":"javascript","label":"TypeScript","source":"const res = await fetch('https://app.trdrs.co/api/trading/order', {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n Authorization: `Bearer ${process.env.TRDRS_API_KEY}`,\n },\n body: JSON.stringify({\n \"instrument\": \"ESU6\",\n \"side\": \"buy\",\n \"qty\": 2,\n \"clientOrderId\": \"a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d\",\n \"orderType\": \"limit\",\n \"limitPrice\": 6480.5,\n \"exits\": {\n \"unit\": \"ticks\",\n \"takeProfits\": [\n {\n \"share\": 50,\n \"distance\": 20\n }\n ],\n \"stopLosses\": [\n {\n \"share\": 100,\n \"distance\": 12,\n \"breakeven\": {\n \"trigger\": 8,\n \"plus\": 0\n },\n \"trail\": [\n {\n \"trigger\": 16,\n \"distance\": 8,\n \"frequencyTicks\": 2\n }\n ]\n }\n ]\n },\n \"tif\": \"day\"\n }),\n})\nconst data = await res.json()"},{"lang":"shell","label":"cURL","source":"curl -X POST 'https://app.trdrs.co/api/trading/order' \\\n -H \"Authorization: Bearer $TRDRS_API_KEY\" \\\n -H 'content-type: application/json' \\\n -d '{\"instrument\":\"ESU6\",\"side\":\"buy\",\"qty\":2,\"clientOrderId\":\"a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d\",\"orderType\":\"limit\",\"limitPrice\":6480.5,\"exits\":{\"unit\":\"ticks\",\"takeProfits\":[{\"share\":50,\"distance\":20}],\"stopLosses\":[{\"share\":100,\"distance\":12,\"breakeven\":{\"trigger\":8,\"plus\":0},\"trail\":[{\"trigger\":16,\"distance\":8,\"frequencyTicks\":2}]}]},\"tif\":\"day\"}'"}],"method":"post","type":"path","servers":["deea1f89-6e7f-4694-a35b-0824c194126c","3a3d6625-9250-40d2-9464-92c2f83e4ef6"],"path":"/api/trading/order","baseUrlOptions":["https://app.trdrs.co","/"],"title":"Place an order","codeSamples":[{"label":"TypeScript","lang":"javascript","source":"const res = await fetch('https://app.trdrs.co/api/trading/order', {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n Authorization: `Bearer ${process.env.TRDRS_API_KEY}`,\n },\n body: JSON.stringify({\n \"instrument\": \"ESU6\",\n \"side\": \"buy\",\n \"qty\": 2,\n \"clientOrderId\": \"a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d\",\n \"orderType\": \"limit\",\n \"limitPrice\": 6480.5,\n \"exits\": {\n \"unit\": \"ticks\",\n \"takeProfits\": [\n {\n \"share\": 50,\n \"distance\": 20\n }\n ],\n \"stopLosses\": [\n {\n \"share\": 100,\n \"distance\": 12,\n \"breakeven\": {\n \"trigger\": 8,\n \"plus\": 0\n },\n \"trail\": [\n {\n \"trigger\": 16,\n \"distance\": 8,\n \"frequencyTicks\": 2\n }\n ]\n }\n ]\n },\n \"tif\": \"day\"\n }),\n})\nconst data = await res.json()"},{"label":"cURL","lang":"shell","source":"curl -X POST 'https://app.trdrs.co/api/trading/order' \\\n -H \"Authorization: Bearer $TRDRS_API_KEY\" \\\n -H 'content-type: application/json' \\\n -d '{\"instrument\":\"ESU6\",\"side\":\"buy\",\"qty\":2,\"clientOrderId\":\"a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d\",\"orderType\":\"limit\",\"limitPrice\":6480.5,\"exits\":{\"unit\":\"ticks\",\"takeProfits\":[{\"share\":50,\"distance\":20}],\"stopLosses\":[{\"share\":100,\"distance\":12,\"breakeven\":{\"trigger\":8,\"plus\":0},\"trail\":[{\"trigger\":16,\"distance\":8,\"frequencyTicks\":2}]}]},\"tif\":\"day\"}'"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{"a0041b32-f592-4f04-8fb5-bbaf3781f475":{"name":"provider","in":"query","schema":{"type":"string","description":"The provider the account is at. Omit it to use your default provider.","uniqueKey":"","typeLabel":"string"},"description":"The provider the account is at. Omit it to use your default provider."},"9f439853-58ec-46f0-a99a-5d35f03d57b8":{"name":"account","in":"query","schema":{"type":"string","description":"The account number at that provider. It must be one of your own accounts.","uniqueKey":"","typeLabel":"string"},"description":"The account number at that provider. It must be one of your own accounts."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"The order to place. Send a new `clientOrderId` for each order you mean to place, and the same one when you retry it.","properties":{"instrument":{"type":"string","description":"The instrument, as `GET /api/account/markets` names it, or any other symbol of the same market.","isRequired":true,"uniqueKey":"instrument","typeLabel":"string"},"side":{"type":"string","enum":["buy","sell"],"description":"Buy or sell.","isRequired":true,"uniqueKey":"side","typeLabel":"enum\u003cstring>"},"qty":{"type":"number","description":"The quantity, positive.","isRequired":true,"uniqueKey":"qty","typeLabel":"number"},"clientOrderId":{"type":"string","description":"Your own id for this order, and its idempotency key. Keep it the same across retries of one order.","isRequired":true,"uniqueKey":"clientOrderId","typeLabel":"string"},"orderType":{"type":"string","enum":["market","limit","stop","stop_limit"],"default":"market","description":"The order type. Omit it for a market order.","uniqueKey":"orderType","typeLabel":"enum\u003cstring>"},"limitPrice":{"type":"number","description":"The limit price, for a limit order.","uniqueKey":"limitPrice","typeLabel":"number"},"triggerPrice":{"type":"number","description":"The trigger price, for a stop or stop-limit order.","uniqueKey":"triggerPrice","typeLabel":"number"},"stopLimitPrice":{"type":"number","description":"The limit price a stop-limit order rests at once its trigger is hit.","uniqueKey":"stopLimitPrice","typeLabel":"number"},"exits":{"type":"object","description":"The take profits and stop losses to place with the order. Distances are measured from the entry's own price, or the market's for a market order.","properties":{"takeProfits":{"type":"array","maxItems":3,"items":{"type":"object","description":"One take profit. Size it by `quantity` or by `share` of the position in percent, and place it at a `price` or a `distance` from the entry in the bracket's `unit`: one of each. A leg stated by its share and its distance fits any entry.","properties":{"quantity":{"type":"number","description":"The quantity it closes, in the instrument's own unit: contracts, lots or coins.","uniqueKey":"exits.takeProfits.items.[INDEX].quantity","typeLabel":"number"},"share":{"type":"number","description":"The share of the position it closes, in percent, more than 0 and at most 100.","uniqueKey":"exits.takeProfits.items.[INDEX].share","typeLabel":"number"},"price":{"type":"number","description":"Its price, on the instrument's tick.","uniqueKey":"exits.takeProfits.items.[INDEX].price","typeLabel":"number"},"distance":{"type":"number","description":"How far from the entry it sits, in the bracket's `unit`.","uniqueKey":"exits.takeProfits.items.[INDEX].distance","typeLabel":"number"}},"example":{"share":50,"distance":20},"uniqueKey":"exits.takeProfits.items.[INDEX]","typeLabel":"object"},"description":"The take profits, nearest the entry first.","isRequired":true,"uniqueKey":"exits.takeProfits","typeLabel":"object[]"},"stopLosses":{"type":"array","maxItems":3,"items":{"type":"object","description":"One stop loss, sized and placed as a take profit is, and optionally moving itself: to breakeven once, and along up to three trailing tiers.","properties":{"quantity":{"type":"number","description":"The quantity it closes, in the instrument's own unit: contracts, lots or coins.","uniqueKey":"exits.stopLosses.items.[INDEX].quantity","typeLabel":"number"},"share":{"type":"number","description":"The share of the position it closes, in percent, more than 0 and at most 100.","uniqueKey":"exits.stopLosses.items.[INDEX].share","typeLabel":"number"},"price":{"type":"number","description":"Its price, on the instrument's tick.","uniqueKey":"exits.stopLosses.items.[INDEX].price","typeLabel":"number"},"distance":{"type":"number","description":"How far from the entry it sits, in the bracket's `unit`.","uniqueKey":"exits.stopLosses.items.[INDEX].distance","typeLabel":"number"},"breakeven":{"oneOf":[{"type":"object","description":"The move to breakeven, or null for none.","required":["trigger","plus"],"example":{"trigger":8,"plus":0},"properties":{"trigger":{"type":"number","description":"How far in profit the position must be, in the bracket's `unit`.","isRequired":true,"uniqueKey":"exits.stopLosses.items.[INDEX].breakeven.oneOf.0.trigger","typeLabel":"number"},"plus":{"type":"number","description":"How far beyond the entry the stop goes, in the bracket's `unit`. Zero is exact breakeven.","isRequired":true,"uniqueKey":"exits.stopLosses.items.[INDEX].breakeven.oneOf.0.plus","typeLabel":"number"}},"uniqueKey":"exits.stopLosses.items.[INDEX].breakeven.oneOf.0","typeLabel":"object"},{"type":"null","description":"The move to breakeven, or null for none.","uniqueKey":"exits.stopLosses.items.[INDEX].breakeven.oneOf.1","typeLabel":"null"}],"uniqueKey":"exits.stopLosses.items.[INDEX].breakeven","typeLabel":"object | null"},"trail":{"type":"array","maxItems":3,"items":{"type":"object","description":"One tier of a trailing stop. Once the position is `trigger` in profit, the stop follows the best price `distance` behind it, and moves only after the price has advanced a whole `frequencyTicks`. A later tier triggers further out and can only tighten the stop.","properties":{"trigger":{"type":"number","description":"How far in profit the position must be before this tier starts, in the bracket's `unit`.","isRequired":true,"uniqueKey":"exits.stopLosses.items.[INDEX].trail.items.[INDEX].trigger","typeLabel":"number"},"distance":{"type":"number","description":"How far behind the best price the stop follows, in the bracket's `unit`.","isRequired":true,"uniqueKey":"exits.stopLosses.items.[INDEX].trail.items.[INDEX].distance","typeLabel":"number"},"frequencyTicks":{"type":"integer","description":"How far the price must advance before the stop moves again, always in whole ticks, because it limits how often trdrs calls the provider.","isRequired":true,"uniqueKey":"exits.stopLosses.items.[INDEX].trail.items.[INDEX].frequencyTicks","typeLabel":"integer"}},"required":["trigger","distance","frequencyTicks"],"example":{"trigger":16,"distance":8,"frequencyTicks":2},"uniqueKey":"exits.stopLosses.items.[INDEX].trail.items.[INDEX]","typeLabel":"object"},"description":"The trailing tiers, lowest trigger first. Empty or absent for no trailing stop.","uniqueKey":"exits.stopLosses.items.[INDEX].trail","typeLabel":"object[]"}},"example":{"share":100,"distance":12,"breakeven":{"trigger":8,"plus":0},"trail":[{"trigger":16,"distance":8,"frequencyTicks":2}]},"uniqueKey":"exits.stopLosses.items.[INDEX]","typeLabel":"object"},"description":"The stop losses, nearest the entry first.","isRequired":true,"uniqueKey":"exits.stopLosses","typeLabel":"object[]"},"unit":{"type":"string","enum":["ticks","price","percent","pips","currency"],"description":"What the distances are in. Required when any leg states a distance. `currency` is money for the leg's quantity; `pips` is offered only on an instrument that has a pip.","uniqueKey":"exits.unit","typeLabel":"enum\u003cstring>"}},"required":["takeProfits","stopLosses"],"example":{"takeProfits":[{"quantity":1,"price":6485.5}],"stopLosses":[{"quantity":2,"price":6477.5}]},"uniqueKey":"exits","typeLabel":"object"},"tif":{"type":"string","enum":["day","gtc"],"description":"The time in force.","uniqueKey":"tif","typeLabel":"enum\u003cstring>"},"reduceOnly":{"type":"boolean","description":"Close only: the order can shrink the position and never open or add to it. It carries no exits.","uniqueKey":"reduceOnly","typeLabel":"boolean"}},"required":["instrument","side","qty","clientOrderId"],"example":{"instrument":"ESU6","side":"buy","qty":2,"clientOrderId":"a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d","orderType":"limit","limitPrice":6480.5,"exits":{"unit":"ticks","takeProfits":[{"share":50,"distance":20}],"stopLosses":[{"share":100,"distance":12,"breakeven":{"trigger":8,"plus":0},"trail":[{"trigger":16,"distance":8,"frequencyTicks":2}]}]},"tif":"day"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"instrument":"ESU6","side":"buy","qty":2,"clientOrderId":"a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d","orderType":"limit","limitPrice":6480.5,"exits":{"unit":"ticks","takeProfits":[{"share":50,"distance":20}],"stopLosses":[{"share":100,"distance":12,"breakeven":{"trigger":8,"plus":0},"trail":[{"trigger":16,"distance":8,"frequencyTicks":2}]}]},"tif":"day"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"bdea2d71-30cc-49ea-b9c5-da001c1829c4":{"description":"The order is placed. `bracket` is the bracket placed with it, or null. The account stream carries the whole bracket at the same revision, with its ladders and the orders resting for it.","content":{"application/json":{"schema":{"type":"object","description":"The order you placed.","properties":{"providerOrderId":{"type":"string","description":"The order id at the provider.","isRequired":true,"uniqueKey":"providerOrderId","typeLabel":"string"},"filledQty":{"type":"number","description":"How much filled at once.","isRequired":true,"uniqueKey":"filledQty","typeLabel":"number"},"avgFillPrice":{"type":"number","description":"The average fill price of what filled at once.","isRequired":true,"uniqueKey":"avgFillPrice","typeLabel":"number"},"bracket":{"oneOf":[{"type":"object","description":"The bracket placed with the order, or null for an order placed without one.","required":["id","state","attached"],"example":{"id":"b41e7d2a-9c58-4f03-a6b1-2e8d5c7f0a94","state":"pending_entry","attached":true},"properties":{"id":{"type":"string","description":"The bracket's id.","isRequired":true,"uniqueKey":"bracket.oneOf.0.id","typeLabel":"string"},"state":{"type":"string","enum":["pending_entry","active","completed","cancelled","failed"],"description":"Where it stands.","isRequired":true,"uniqueKey":"bracket.oneOf.0.state","typeLabel":"enum\u003cstring>"},"attached":{"type":"boolean","description":"True when the provider holds the pairs with the entry and rests them the moment it fills. Otherwise trdrs rests each pair once it sees the fill that opens the part of the position the pair protects.","isRequired":true,"uniqueKey":"bracket.oneOf.0.attached","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"bracket.oneOf.0","typeLabel":"object"},{"type":"null","description":"The bracket placed with the order, or null for an order placed without one.","isRequired":true,"uniqueKey":"bracket.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"bracket","typeLabel":"object | null"}},"required":["providerOrderId","filledQty","avgFillPrice","bracket"],"example":{"providerOrderId":"a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d","filledQty":0,"avgFillPrice":0,"bracket":{"id":"b41e7d2a-9c58-4f03-a6b1-2e8d5c7f0a94","state":"pending_entry","attached":true}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"providerOrderId":"a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d","filledQty":0,"avgFillPrice":0,"bracket":{"id":"b41e7d2a-9c58-4f03-a6b1-2e8d5c7f0a94","state":"pending_entry","attached":true}}}},"exampleType":"generated"}},"headers":{"Server-Timing":{"description":"The engine's own time for the request, in the W3C Server-Timing form: `engine` from the request's arrival at the engine to its answer, and `db` the part of it the request's work spent in the database, with the statements it sent, each duration in milliseconds. The network's time is outside both. Every answer to a request on a trading route carries it, the engine's refusals before the route among them.","schema":{"type":"string","example":"engine;dur=12.4, db;dur=9.8;desc=\"statements=3\""}}},"exampleType":"generated"},"23030045-d233-4d04-8dd4-55dd060b3f25":{"description":"The account doesn't trade the order's market, which is checked first, before any hold, margin or buying power check, as `GET /api/trading/match` answers: `unknown_instrument` for a symbol that names no market, `asset_class_not_supported` for a class the account's provider doesn't route or trdrs has switched off, and `instrument_not_offered` for a market the account doesn't trade. Or the order is invalid: a missing price, an order type that doesn't go with the others, or a `stopLoss`, `takeProfit` or `exitPlan` field, since take profits and stop losses ride in `exits`. A bracket the account can't run is refused with what it lacks in `missing`, and one that doesn't resolve on the instrument with why in `problems`: a leg on the wrong side of the entry, a price off the instrument's tick, or a size off its step.","content":{"application/json":{"schema":{"type":"object","description":"The body of every error response. It always carries `error`, an English sentence you can show. A refused trading request also carries `code`, one of the refusal codes, and `params`, the details of that refusal. Translate by `code` and `params`, and show a generic message for a code you don't recognize. Other errors may carry a `code` of their own.","properties":{"error":{"type":"string","description":"What went wrong, as an English sentence.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine code. On a refused trading request, it is one of the refusal codes.","uniqueKey":"code","typeLabel":"string"},"params":{"type":"object","description":"The details of the refusal named by `code`, on a refused trading request.","uniqueKey":"params","typeLabel":"object"}},"required":["error"],"example":{"error":"invalid_instrument"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"invalid_instrument"}}},"exampleType":"generated"}},"headers":{"Server-Timing":{"description":"The engine's own time for the request, in the W3C Server-Timing form: `engine` from the request's arrival at the engine to its answer, and `db` the part of it the request's work spent in the database, with the statements it sent, each duration in milliseconds. The network's time is outside both. Every answer to a request on a trading route carries it, the engine's refusals before the route among them.","schema":{"type":"string","example":"engine;dur=12.4, db;dur=9.8;desc=\"statements=3\""}}},"exampleType":"generated"},"17644a68-88ac-435c-b551-371d744d837c":{"description":"The key is missing, unknown or revoked.","content":{"application/json":{"schema":{"type":"object","description":"The body of every error response. It always carries `error`, an English sentence you can show. A refused trading request also carries `code`, one of the refusal codes, and `params`, the details of that refusal. Translate by `code` and `params`, and show a generic message for a code you don't recognize. Other errors may carry a `code` of their own.","properties":{"error":{"type":"string","description":"What went wrong, as an English sentence.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine code. On a refused trading request, it is one of the refusal codes.","uniqueKey":"code","typeLabel":"string"},"params":{"type":"object","description":"The details of the refusal named by `code`, on a refused trading request.","uniqueKey":"params","typeLabel":"object"}},"required":["error"],"example":{"error":"invalid_instrument"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"invalid_instrument"}}},"exampleType":"generated"}},"headers":{"Server-Timing":{"description":"The engine's own time for the request, in the W3C Server-Timing form: `engine` from the request's arrival at the engine to its answer, and `db` the part of it the request's work spent in the database, with the statements it sent, each duration in milliseconds. The network's time is outside both. Every answer to a request on a trading route carries it, the engine's refusals before the route among them.","schema":{"type":"string","example":"engine;dur=12.4, db;dur=9.8;desc=\"statements=3\""}}},"exampleType":"generated"},"52b8e22e-c649-475e-9641-862d4ec2d40b":{"description":"Live trading is switched off for the account (`feature_disabled`, with `params.feature` set to `live_trading`), so nothing was claimed or placed. An order on the paper book, including a Demo, is never refused this way.","content":{"application/json":{"schema":{"type":"object","description":"The body of every error response. It always carries `error`, an English sentence you can show. A refused trading request also carries `code`, one of the refusal codes, and `params`, the details of that refusal. Translate by `code` and `params`, and show a generic message for a code you don't recognize. Other errors may carry a `code` of their own.","properties":{"error":{"type":"string","description":"What went wrong, as an English sentence.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine code. On a refused trading request, it is one of the refusal codes.","uniqueKey":"code","typeLabel":"string"},"params":{"type":"object","description":"The details of the refusal named by `code`, on a refused trading request.","uniqueKey":"params","typeLabel":"object"}},"required":["error"],"example":{"error":"invalid_instrument"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"invalid_instrument"}}},"exampleType":"generated"}},"headers":{"Server-Timing":{"description":"The engine's own time for the request, in the W3C Server-Timing form: `engine` from the request's arrival at the engine to its answer, and `db` the part of it the request's work spent in the database, with the statements it sent, each duration in milliseconds. The network's time is outside both. Every answer to a request on a trading route carries it, the engine's refusals before the route among them.","schema":{"type":"string","example":"engine;dur=12.4, db;dur=9.8;desc=\"statements=3\""}}},"exampleType":"generated"},"0f9ae432-bc7c-4dfc-a33e-843c170cc038":{"description":"The `clientOrderId` was already used, and the earlier request stands, which is idempotency working as designed.","content":{"application/json":{"schema":{"type":"object","description":"The body of every error response. It always carries `error`, an English sentence you can show. A refused trading request also carries `code`, one of the refusal codes, and `params`, the details of that refusal. Translate by `code` and `params`, and show a generic message for a code you don't recognize. Other errors may carry a `code` of their own.","properties":{"error":{"type":"string","description":"What went wrong, as an English sentence.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine code. On a refused trading request, it is one of the refusal codes.","uniqueKey":"code","typeLabel":"string"},"params":{"type":"object","description":"The details of the refusal named by `code`, on a refused trading request.","uniqueKey":"params","typeLabel":"object"}},"required":["error"],"example":{"error":"invalid_instrument"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"invalid_instrument"}}},"exampleType":"generated"}},"headers":{"Server-Timing":{"description":"The engine's own time for the request, in the W3C Server-Timing form: `engine` from the request's arrival at the engine to its answer, and `db` the part of it the request's work spent in the database, with the statements it sent, each duration in milliseconds. The network's time is outside both. Every answer to a request on a trading route carries it, the engine's refusals before the route among them.","schema":{"type":"string","example":"engine;dur=12.4, db;dur=9.8;desc=\"statements=3\""}}},"exampleType":"generated"},"e2d9b774-55ae-4f20-89ef-5cd71b415a09":{"description":"The order was refused and nothing was placed, so you may retry with the same `clientOrderId`. Every refusal carries its `code` and `params` beside the English `error`. The provider may refuse it (`order_rejected`, with the provider's words in `error`), or trdrs refuses it before sending because:\n- the account's settings at its provider are unsupported or can't be read (the account snapshot's `accountMode` gives the same code),\n- an issued account's venue conditions refuse it, or\n- the paper book, including a Demo, can't price it honestly.\n\nOn the paper book the codes are:\n- `unknown_instrument`: a symbol with no contract specification, such as one only the chart feed serves or a Hyperliquid market deployed by a builder.\n- `instrument_not_tradable`: a product class with no proven terms.\n- `market_data_stale`, `market_data_unavailable` or `market_data_delayed`: the price is old, missing or from a delayed feed. An order waits for a price its instrument's feed has not delivered yet, at most 5 seconds, before it is refused as missing. On an account bound to a risk policy whose risk decisions have still had no price of the instrument the order adds to when that wait passes, the order is refused as `market_data_unavailable` with cause `mark_missing`. A futures order on a contract the account trades, from a trader with no futures source (a login on their venue's production Rithmic system), is refused as `market_data_unavailable` with cause `login_missing` before anything is claimed, whatever its type.\n- `settlement_asset_unmodeled`: a perpetual on an issued account whose risk policy doesn't count the asset the perpetual settles in (USDC for a Hyperliquid core perpetual, USDT for a Binance or Bybit USDT perpetual) as dollars one for one.\n- the refusals of its contract and risk policy (`contract_not_trading`, `contract_unregistered`, `risk_policy_unbound` and the rest) for an entry.\n\nOn a Rithmic account, a bare futures root goes to the one dated contract its product rule names. It is refused as `bare_root_unresolved` when the rule names none, the CME calendar trdrs serves doesn't cover the dates, the account holds the root in another contract, or the order would add exposure inside the contract's unsafe window. A dated contract is sent as itself, and an order that adds exposure to it inside its unsafe window is refused as `contract_past_safe_window`, or `contract_dates_uncovered` when the calendar can't place the window. A continuous symbol trades the dated contract the match names for the order: `ES1!` where a bare `ES` goes, and `ES2!` the contract after it. On the paper book that is the account's listed contract at that position. On a Tastytrade account, `ES1!` trades Tastytrade's active contract, and `ES2!` is a market it doesn't list, refused as `instrument_not_offered`. A close, a flatten or an amend keeps the position's or the order's own contract.","content":{"application/json":{"schema":{"type":"object","description":"The body of every error response. It always carries `error`, an English sentence you can show. A refused trading request also carries `code`, one of the refusal codes, and `params`, the details of that refusal. Translate by `code` and `params`, and show a generic message for a code you don't recognize. Other errors may carry a `code` of their own.","properties":{"error":{"type":"string","description":"What went wrong, as an English sentence.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine code. On a refused trading request, it is one of the refusal codes.","uniqueKey":"code","typeLabel":"string"},"params":{"type":"object","description":"The details of the refusal named by `code`, on a refused trading request.","uniqueKey":"params","typeLabel":"object"}},"required":["error"],"example":{"error":"invalid_instrument"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"invalid_instrument"}}},"exampleType":"generated"}},"headers":{"Server-Timing":{"description":"The engine's own time for the request, in the W3C Server-Timing form: `engine` from the request's arrival at the engine to its answer, and `db` the part of it the request's work spent in the database, with the statements it sent, each duration in milliseconds. The network's time is outside both. Every answer to a request on a trading route carries it, the engine's refusals before the route among them.","schema":{"type":"string","example":"engine;dur=12.4, db;dur=9.8;desc=\"statements=3\""}}},"exampleType":"generated"},"da6b63bf-1c01-428c-96a5-fa3372c32496":{"description":"The account is locked by risk (`risk_locked`, with the account's holds in `params.holds`, or null when they couldn't be read), or held for reconciliation (`reconciliation_hold`). New exposure is refused until the hold lifts or is released, while cancels, closes and reductions still work.","content":{"application/json":{"schema":{"type":"object","description":"The body of every error response. It always carries `error`, an English sentence you can show. A refused trading request also carries `code`, one of the refusal codes, and `params`, the details of that refusal. Translate by `code` and `params`, and show a generic message for a code you don't recognize. Other errors may carry a `code` of their own.","properties":{"error":{"type":"string","description":"What went wrong, as an English sentence.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine code. On a refused trading request, it is one of the refusal codes.","uniqueKey":"code","typeLabel":"string"},"params":{"type":"object","description":"The details of the refusal named by `code`, on a refused trading request.","uniqueKey":"params","typeLabel":"object"}},"required":["error"],"example":{"error":"invalid_instrument"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"invalid_instrument"}}},"exampleType":"generated"}},"headers":{"Server-Timing":{"description":"The engine's own time for the request, in the W3C Server-Timing form: `engine` from the request's arrival at the engine to its answer, and `db` the part of it the request's work spent in the database, with the statements it sent, each duration in milliseconds. The network's time is outside both. Every answer to a request on a trading route carries it, the engine's refusals before the route among them.","schema":{"type":"string","example":"engine;dur=12.4, db;dur=9.8;desc=\"statements=3\""}}},"exampleType":"generated"},"f58de498-93cf-42bd-b52b-c9a374cd4bd6":{"description":"trdrs couldn't record the order's bracket, or couldn't read whether live trading is switched on or whether the account is held for reconciliation, so nothing was placed. Retry with the same `clientOrderId`. `outcome_unknown` is the exception: the order was sent and may be resting at the provider, so read the account before you send anything again. `engine_draining` with a `Retry-After` header: the engine you reached is restarting for a release and did nothing. Wait for `Retry-After`, then send the same request again, with the same `clientOrderId` or `Idempotency-Key` where the route takes one: another engine takes it. A write refused before any route takes it says `server draining` as its `error`.","content":{"application/json":{"schema":{"type":"object","description":"The body of every error response. It always carries `error`, an English sentence you can show. A refused trading request also carries `code`, one of the refusal codes, and `params`, the details of that refusal. Translate by `code` and `params`, and show a generic message for a code you don't recognize. Other errors may carry a `code` of their own.","properties":{"error":{"type":"string","description":"What went wrong, as an English sentence.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"A stable machine code. On a refused trading request, it is one of the refusal codes.","uniqueKey":"code","typeLabel":"string"},"params":{"type":"object","description":"The details of the refusal named by `code`, on a refused trading request.","uniqueKey":"params","typeLabel":"object"}},"required":["error"],"example":{"error":"invalid_instrument"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"invalid_instrument"}}},"exampleType":"generated"}},"headers":{"Retry-After":{"description":"How many seconds to wait before sending the same request again. A `503` carries it only when the engine did nothing, so the request may be sent again as it is.","schema":{"type":"integer","minimum":1}},"Server-Timing":{"description":"The engine's own time for the request, in the W3C Server-Timing form: `engine` from the request's arrival at the engine to its answer, and `db` the part of it the request's work spent in the database, with the statements it sent, each duration in milliseconds. The network's time is outside both. Every answer to a request on a trading route carries it, the engine's refusals before the route among them.","schema":{"type":"string","example":"engine;dur=12.4, db;dur=9.8;desc=\"statements=3\""}}},"exampleType":"generated"}},"security":{"701f4ed1-d5a5-48a9-a390-e4c341b780f4":{"tradingApiKey":{"type":"http","scheme":"bearer","description":"The Trading API key (`trdrs_sk_…`), for market data, orders and account state on the accounts its owner holds. Use it server-to-server, and keep it on your server. Its scope is named `trading` in the API.","scopes":[],"schemeName":"tradingApiKey"}},"fea18f5e-8e9c-4303-9c3b-00489ff07107":{"connectApiKey":{"type":"http","scheme":"bearer","description":"A Connect app's API key (`trdrs_ck_sandbox_…` or `trdrs_ck_production_…`), in preview. It belongs to one app in one environment, has a name and an expiry, and carries the whole Connect API. An owner of the app creates it in the Connect dashboard. It creates, reads and closes the app's Connect links under `/api/connect/links`, and on the account, market and trading routes it reads the app's own traders' accounts and market data and routes their orders, each request naming its trader in `x-trdrs-trader`. It stops working when it is revoked or expires, or when the owner who created it stops being an owner. Keep it on your server.","scopes":[],"schemeName":"connectApiKey"},"trader":{"type":"apiKey","in":"header","name":"x-trdrs-trader","description":"Your own id for one of your traders: the id your Connect links name, or the id the accounts your venue issues them use. Send it with your app's API key, or with your Venue key carrying `trader:read`, or `trader:trade` to also route the trader's orders, and the request runs as that trader on their own accounts. An id that names none of your traders is refused with `404` `trader_not_found` and a suspended trader with `403` `trader_suspended`. A request that also carries a cookie or a browser `Origin` is refused with `400` `credential_not_allowed`.","scopes":[],"schemeName":"trader"}},"ca2f234e-8da4-42bc-bbd7-4e67714a989c":{"venueKey":{"type":"http","scheme":"bearer","description":"The Venue key (`trdrs_vk_sandbox_…` or `trdrs_vk_production_…`), in preview. It belongs to one venue in one environment and carries the scopes it was created with. The venue's verified owner creates it while signed in. It works on the `/api/venues/{venueId}` routes and, with `trader:read` or `trader:trade`, on the account, market and trading routes, reading the venue's own traders' accounts and routing their orders, each request naming its trader in `x-trdrs-trader`. A `trdrs_sk_…` key can't be used in its place. It reaches its venue's routes and its venue's own traders, and the owner manages keys from a signed-in session. Keep it on your server.","scopes":[],"schemeName":"venueKey"},"trader":{"type":"apiKey","in":"header","name":"x-trdrs-trader","description":"Your own id for one of your traders: the id your Connect links name, or the id the accounts your venue issues them use. Send it with your app's API key, or with your Venue key carrying `trader:read`, or `trader:trade` to also route the trader's orders, and the request runs as that trader on their own accounts. An id that names none of your traders is refused with `404` `trader_not_found` and a suspended trader with `403` `trader_suspended`. A request that also carries a cookie or a browser `Origin` is refused with `400` `credential_not_allowed`.","scopes":[],"schemeName":"trader"}}},"servers":{"deea1f89-6e7f-4694-a35b-0824c194126c":{"url":"https://app.trdrs.co","description":"Production"},"3a3d6625-9250-40d2-9464-92c2f83e4ef6":{"url":"/","description":"This engine"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"The Trading API key (`trdrs_sk_…`), for market data, orders and account state on the accounts its owner holds. Use it server-to-server, and keep it on your server. Its scope is named `trading` in the API.","scopes":[],"schemeName":"tradingApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"The Trading API key (`trdrs_sk_…`), for market data, orders and account state on the accounts its owner holds. Use it server-to-server, and keep it on your server. Its scope is named `trading` in the API.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"tradingApiKey","name":"Authorization"}],"title":"tradingApiKey"},{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"A Connect app's API key (`trdrs_ck_sandbox_…` or `trdrs_ck_production_…`), in preview. It belongs to one app in one environment, has a name and an expiry, and carries the whole Connect API. An owner of the app creates it in the Connect dashboard. It creates, reads and closes the app's Connect links under `/api/connect/links`, and on the account, market and trading routes it reads the app's own traders' accounts and market data and routes their orders, each request naming its trader in `x-trdrs-trader`. It stops working when it is revoked or expires, or when the owner who created it stops being an owner. Keep it on your server.","scopes":[],"schemeName":"connectApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"A Connect app's API key (`trdrs_ck_sandbox_…` or `trdrs_ck_production_…`), in preview. It belongs to one app in one environment, has a name and an expiry, and carries the whole Connect API. An owner of the app creates it in the Connect dashboard. It creates, reads and closes the app's Connect links under `/api/connect/links`, and on the account, market and trading routes it reads the app's own traders' accounts and market data and routes their orders, each request naming its trader in `x-trdrs-trader`. It stops working when it is revoked or expires, or when the owner who created it stops being an owner. Keep it on your server.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"connectApiKey","name":"Authorization"},{"scheme":{"type":"apiKey","in":"header","name":"x-trdrs-trader","description":"Your own id for one of your traders: the id your Connect links name, or the id the accounts your venue issues them use. Send it with your app's API key, or with your Venue key carrying `trader:read`, or `trader:trade` to also route the trader's orders, and the request runs as that trader on their own accounts. An id that names none of your traders is refused with `404` `trader_not_found` and a suspended trader with `403` `trader_suspended`. A request that also carries a cookie or a browser `Origin` is refused with `400` `credential_not_allowed`.","scopes":[],"schemeName":"trader"},"schema":{"title":"x-trdrs-trader","type":"string","description":"Your own id for one of your traders: the id your Connect links name, or the id the accounts your venue issues them use. Send it with your app's API key, or with your Venue key carrying `trader:read`, or `trader:trade` to also route the trader's orders, and the request runs as that trader on their own accounts. An id that names none of your traders is refused with `404` `trader_not_found` and a suspended trader with `403` `trader_suspended`. A request that also carries a cookie or a browser `Origin` is refused with `400` `credential_not_allowed`.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"trader","name":"x-trdrs-trader"}],"title":"connectApiKey \u0026 trader"},{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"The Venue key (`trdrs_vk_sandbox_…` or `trdrs_vk_production_…`), in preview. It belongs to one venue in one environment and carries the scopes it was created with. The venue's verified owner creates it while signed in. It works on the `/api/venues/{venueId}` routes and, with `trader:read` or `trader:trade`, on the account, market and trading routes, reading the venue's own traders' accounts and routing their orders, each request naming its trader in `x-trdrs-trader`. A `trdrs_sk_…` key can't be used in its place. It reaches its venue's routes and its venue's own traders, and the owner manages keys from a signed-in session. Keep it on your server.","scopes":[],"schemeName":"venueKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"The Venue key (`trdrs_vk_sandbox_…` or `trdrs_vk_production_…`), in preview. It belongs to one venue in one environment and carries the scopes it was created with. The venue's verified owner creates it while signed in. It works on the `/api/venues/{venueId}` routes and, with `trader:read` or `trader:trade`, on the account, market and trading routes, reading the venue's own traders' accounts and routing their orders, each request naming its trader in `x-trdrs-trader`. A `trdrs_sk_…` key can't be used in its place. It reaches its venue's routes and its venue's own traders, and the owner manages keys from a signed-in session. Keep it on your server.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"venueKey","name":"Authorization"},{"scheme":{"type":"apiKey","in":"header","name":"x-trdrs-trader","description":"Your own id for one of your traders: the id your Connect links name, or the id the accounts your venue issues them use. Send it with your app's API key, or with your Venue key carrying `trader:read`, or `trader:trade` to also route the trader's orders, and the request runs as that trader on their own accounts. An id that names none of your traders is refused with `404` `trader_not_found` and a suspended trader with `403` `trader_suspended`. A request that also carries a cookie or a browser `Origin` is refused with `400` `credential_not_allowed`.","scopes":[],"schemeName":"trader"},"schema":{"title":"x-trdrs-trader","type":"string","description":"Your own id for one of your traders: the id your Connect links name, or the id the accounts your venue issues them use. Send it with your app's API key, or with your Venue key carrying `trader:read`, or `trader:trade` to also route the trader's orders, and the request runs as that trader on their own accounts. An id that names none of your traders is refused with `404` `trader_not_found` and a suspended trader with `403` `trader_suspended`. A request that also carries a cookie or a browser `Origin` is refused with `400` `credential_not_allowed`.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"trader","name":"x-trdrs-trader"}],"title":"venueKey \u0026 trader"}]},"originalFileLocation":"api/openapi.json"},"subdomain":"trdrs","siteName":"trdrs Engine API","title":"Place an order - trdrs Engine API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-23T22:24:26.599Z","originalFileLocation":"api-reference/trading/place-an-order.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=\"dark\"}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=\"Places a market, limit, stop or stop-limit order, optionally with a bracket: up to three take profits and three stop losses, written as exits. trdrs lays the bracket out as pairs along the position, nearest the entry first, each pair\u0026#x27;s take profit and stop loss cancelling each other. It records the bracket before it sends the entry, then rests each pair once the part of the position the pair protects has filled, or hands the pairs to the provider with the entry where the provider holds them (bracket.attached). A stop loss that moves itself, to breakeven or trailing, is moved by trdrs on every provider that holds a bracket. clientOrderId is the idempotency key, so retry an order with the same id and it is never placed twice. Call GET /api/trading/actions first to learn whether the order would be refused, and why. On the paper book an order waits, at most 5 seconds, for a price of its instrument that has not arrived yet, for that price to reach the account\u0026#x27;s risk check on an instrument the account does not hold yet, and for the risk check to process the account\u0026#x27;s latest change, so the answer can take that long. A reduce-only order carries no exits: it opens no position for them to protect, and is refused with 400. Required key: Trading API key. A Connect app\u0026#x27;s backend can also send it with the app\u0026#x27;s API key, and a venue\u0026#x27;s backend with its Venue key, which carries trader:trade, each naming one of its own traders in x-trdrs-trader: it then runs on that trader\u0026#x27;s own accounts.\">\u003cmeta data-mint-head name=\"application-name\" content=\"trdrs Engine API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/trdrs/Mc3uPNp5t9BqWGNO/_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/trdrs/Mc3uPNp5t9BqWGNO/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/trdrs/Mc3uPNp5t9BqWGNO/_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/trdrs/Mc3uPNp5t9BqWGNO/_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/trdrs/Mc3uPNp5t9BqWGNO/_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/trdrs/Mc3uPNp5t9BqWGNO/_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/trdrs/Mc3uPNp5t9BqWGNO/_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/trdrs/Mc3uPNp5t9BqWGNO/_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/trdrs/Mc3uPNp5t9BqWGNO/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Place an order - trdrs Engine API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Places a market, limit, stop or stop-limit order, optionally with a bracket: up to three take profits and three stop losses, written as exits. trdrs lays the bracket out as pairs along the position, nearest the entry first, each pair\u0026#x27;s take profit and stop loss cancelling each other. It records the bracket before it sends the entry, then rests each pair once the part of the position the pair protects has filled, or hands the pairs to the provider with the entry where the provider holds them (bracket.attached). A stop loss that moves itself, to breakeven or trailing, is moved by trdrs on every provider that holds a bracket. clientOrderId is the idempotency key, so retry an order with the same id and it is never placed twice. Call GET /api/trading/actions first to learn whether the order would be refused, and why. On the paper book an order waits, at most 5 seconds, for a price of its instrument that has not arrived yet, for that price to reach the account\u0026#x27;s risk check on an instrument the account does not hold yet, and for the risk check to process the account\u0026#x27;s latest change, so the answer can take that long. A reduce-only order carries no exits: it opens no position for them to protect, and is refused with 400. Required key: Trading API key. A Connect app\u0026#x27;s backend can also send it with the app\u0026#x27;s API key, and a venue\u0026#x27;s backend with its Venue key, which carries trader:trade, each naming one of its own traders in x-trdrs-trader: it then runs on that trader\u0026#x27;s own accounts.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"trdrs Engine API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.trdrs.co/api-reference/trading/place-an-order\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://trdrs.mintlify.app/_mintlify/api/og/v2?division=Orders\u0026amp;title=Place+an+order\u0026amp;description=Places+a+market%2C+limit%2C+stop+or+stop-limit+order%2C+optionally+with+a+bracket%3A+up+to+three+take+profits+and+three+stop+losses%2C+written+as+%60exits%60.+trdrs+lays+the+\u0026amp;theme=85063b664f29463f86ec0c0f\u0026amp;signature=cf9f38f9b128fc803832e6769b3dd6cff8a58d4b76774d42db60b0b62dbef533\">\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=\"Place an order - trdrs Engine API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Places a market, limit, stop or stop-limit order, optionally with a bracket: up to three take profits and three stop losses, written as exits. trdrs lays the bracket out as pairs along the position, nearest the entry first, each pair\u0026#x27;s take profit and stop loss cancelling each other. It records the bracket before it sends the entry, then rests each pair once the part of the position the pair protects has filled, or hands the pairs to the provider with the entry where the provider holds them (bracket.attached). A stop loss that moves itself, to breakeven or trailing, is moved by trdrs on every provider that holds a bracket. clientOrderId is the idempotency key, so retry an order with the same id and it is never placed twice. Call GET /api/trading/actions first to learn whether the order would be refused, and why. On the paper book an order waits, at most 5 seconds, for a price of its instrument that has not arrived yet, for that price to reach the account\u0026#x27;s risk check on an instrument the account does not hold yet, and for the risk check to process the account\u0026#x27;s latest change, so the answer can take that long. A reduce-only order carries no exits: it opens no position for them to protect, and is refused with 400. Required key: Trading API key. A Connect app\u0026#x27;s backend can also send it with the app\u0026#x27;s API key, and a venue\u0026#x27;s backend with its Venue key, which carries trader:trade, each naming one of its own traders in x-trdrs-trader: it then runs on that trader\u0026#x27;s own accounts.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://trdrs.mintlify.app/_mintlify/api/og/v2?division=Orders\u0026amp;title=Place+an+order\u0026amp;description=Places+a+market%2C+limit%2C+stop+or+stop-limit+order%2C+optionally+with+a+bracket%3A+up+to+three+take+profits+and+three+stop+losses%2C+written+as+%60exits%60.+trdrs+lays+the+\u0026amp;theme=85063b664f29463f86ec0c0f\u0026amp;signature=cf9f38f9b128fc803832e6769b3dd6cff8a58d4b76774d42db60b0b62dbef533\">\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/trdrs/Mc3uPNp5t9BqWGNO/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"trdrs Engine API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0a0a0a\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.trdrs.co/api-reference/trading/place-an-order\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/trading/place-an-order.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.trdrs.co/#organization\",\"name\":\"trdrs Engine API\",\"url\":\"https://docs.trdrs.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/trdrs/VlyBylpRulgoNVYk/logo.svg?fit=max\u0026auto=format\u0026n=VlyBylpRulgoNVYk\u0026q=85\u0026s=0725a6173d2c03859de4fc3b0a99ea50\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.trdrs.co#website\",\"name\":\"trdrs Engine API\",\"url\":\"https://docs.trdrs.co\",\"publisher\":{\"@id\":\"https://docs.trdrs.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.trdrs.co/api-reference/trading/place-an-order#webpage\",\"url\":\"https://docs.trdrs.co/api-reference/trading/place-an-order\",\"name\":\"Place an order\",\"description\":\"Places a market, limit, stop or stop-limit order, optionally with a bracket: up to three take profits and three stop losses, written as exits. trdrs lays the bracket out as pairs along the position, nearest the entry first, each pair's take profit and stop loss cancelling each other. It records the bracket before it sends the entry, then rests each pair once the part of the position the pair protects has filled, or hands the pairs to the provider with the entry where the provider holds them (bracket.attached). A stop loss that moves itself, to breakeven or trailing, is moved by trdrs on every provider that holds a bracket. clientOrderId is the idempotency key, so retry an order with the same id and it is never placed twice. Call GET /api/trading/actions first to learn whether the order would be refused, and why. On the paper book an order waits, at most 5 seconds, for a price of its instrument that has not arrived yet, for that price to reach the account's risk check on an instrument the account does not hold yet, and for the risk check to process the account's latest change, so the answer can take that long. A reduce-only order carries no exits: it opens no position for them to protect, and is refused with 400. Required key: Trading API key. A Connect app's backend can also send it with the app's API key, and a venue's backend with its Venue key, which carries trader:trade, each naming one of its own traders in x-trdrs-trader: it then runs on that trader's own accounts.\",\"dateModified\":\"2026-10-23T22:24:26.599Z\",\"isPartOf\":{\"@id\":\"https://docs.trdrs.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.trdrs.co/api-reference/trading/place-an-order#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.trdrs.co/api-reference/trading/place-an-order#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.trdrs.co/api-reference/market-data/get-market-data-limits\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Trading\",\"item\":\"https://docs.trdrs.co/api-reference/trading/get-the-net-position\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Orders\",\"item\":\"https://docs.trdrs.co/api-reference/trading/get-the-net-position\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Place an order\",\"item\":\"https://docs.trdrs.co/api-reference/trading/place-an-order\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.trdrs.co/api-reference/trading/place-an-order#apireference\",\"headline\":\"Place an order\",\"name\":\"Place an order\",\"description\":\"Places a market, limit, stop or stop-limit order, optionally with a bracket: up to three take profits and three stop losses, written as exits. trdrs lays the bracket out as pairs along the position, nearest the entry first, each pair's take profit and stop loss cancelling each other. It records the bracket before it sends the entry, then rests each pair once the part of the position the pair protects has filled, or hands the pairs to the provider with the entry where the provider holds them (bracket.attached). A stop loss that moves itself, to breakeven or trailing, is moved by trdrs on every provider that holds a bracket. clientOrderId is the idempotency key, so retry an order with the same id and it is never placed twice. Call GET /api/trading/actions first to learn whether the order would be refused, and why. On the paper book an order waits, at most 5 seconds, for a price of its instrument that has not arrived yet, for that price to reach the account's risk check on an instrument the account does not hold yet, and for the risk check to process the account's latest change, so the answer can take that long. A reduce-only order carries no exits: it opens no position for them to protect, and is refused with 400. Required key: Trading API key. A Connect app's backend can also send it with the app's API key, and a venue's backend with its Venue key, which carries trader:trade, each naming one of its own traders in x-trdrs-trader: it then runs on that trader's own accounts.\",\"url\":\"https://docs.trdrs.co/api-reference/trading/place-an-order\",\"mainEntityOfPage\":{\"@id\":\"https://docs.trdrs.co/api-reference/trading/place-an-order#webpage\"},\"dateModified\":\"2026-10-23T22:24:26.599Z\",\"publisher\":{\"@id\":\"https://docs.trdrs.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.trdrs.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"trdrs Engine API\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"trdrs Engine API","nav":{"global":null,"tabs":[{"tab":"Get started","pages":[{"title":"Get started","href":""}]},{"tab":"Guides","dropdowns":[{"dropdown":"Programmatic trading","icon":"code","description":"Trade accounts you hold","groups":[{"group":"Start here","pages":[{"title":"Programmatic trading quickstart","href":"/guides/programmatic-quickstart"}]},{"group":"Trading","pages":[{"title":"Trading overview","sidebarTitle":"Overview","href":"/guides/trading-overview"},{"title":"Place your first order","sidebarTitle":"Place an order","href":"/guides/place-your-first-order"},{"title":"Protect a position","sidebarTitle":"Protect a position","href":"/guides/protect-a-position"},{"title":"Manage working orders","sidebarTitle":"Manage working orders","href":"/guides/manage-working-orders"},{"title":"Close a position","sidebarTitle":"Close a position","href":"/guides/close-a-position"},{"title":"Trade with leverage","sidebarTitle":"Trade with leverage","href":"/guides/trade-with-leverage"},{"title":"Track fills and P\u0026L","sidebarTitle":"Track fills and P\u0026L","href":"/guides/track-fills-and-pnl"}]}]},{"dropdown":"Market data","icon":"chart-line","description":"Read prices, history and streams","pages":[{"title":"Market data overview","sidebarTitle":"Overview","href":"/guides/market-data-overview"},{"title":"Find symbols","sidebarTitle":"Find symbols","href":"/guides/find-symbols"},{"title":"Backfill history","sidebarTitle":"Backfill history","href":"/guides/backfill-history"},{"title":"Stream live market data","sidebarTitle":"Stream live data","href":"/guides/stream-live-data"}]},{"dropdown":"Connect","icon":"link","description":"Build your own trading interface","groups":[{"group":"Start here","pages":[{"title":"Connect","sidebarTitle":"Overview","href":"/guides/connect-overview"},{"title":"Connect quickstart","sidebarTitle":"Quickstart","href":"/guides/connect-quickstart"}]},{"group":"Build","pages":[{"title":"Route your traders' orders","sidebarTitle":"Route your traders' orders","href":"/guides/route-your-traders-orders"},{"title":"Choose your tiles and white-label paper","sidebarTitle":"Tiles and white-label paper","href":"/guides/connect-tiles-and-paper"}]},{"group":"Go live","pages":[{"title":"Pass Connect conformance","sidebarTitle":"Pass conformance","href":"/guides/connect-conformance"},{"title":"Billing for Connect apps","sidebarTitle":"Billing","href":"/guides/connect-billing"},{"title":"Active traders and billing","sidebarTitle":"Active traders","href":"/guides/connect-active-traders"}]}]},{"dropdown":"Venues","icon":"building","description":"Run a prop firm or brokerage","groups":[{"group":"Start here","pages":[{"title":"Prop firms","sidebarTitle":"Prop firms","href":"/guides/prop-firms-overview"},{"title":"Brokerages","sidebarTitle":"Brokerages","href":"/guides/brokerages-overview"},{"title":"Venue quickstart","href":"/guides/business-quickstart"},{"title":"Evaluation quickstart","href":"/quickstart"},{"title":"What your traders get","sidebarTitle":"What your traders get","href":"/what-your-traders-get"}]},{"group":"Set up your venue","pages":[{"title":"Run a venue end to end","sidebarTitle":"Run a venue","href":"/guides/run-a-venue"},{"title":"Venue keys","sidebarTitle":"Venue keys","href":"/guides/venue-keys"},{"title":"Back-office tool","href":"/guides/back-office"}]},{"group":"Run accounts","pages":[{"title":"Venue accounts","sidebarTitle":"Accounts","href":"/guides/venue-accounts"},{"title":"Send your traders to the trading platform","sidebarTitle":"Send traders to trade","href":"/guides/send-traders-to-the-trading-platform"},{"title":"Paper accounts on provider contracts","href":"/guides/paper-provider-contracts"},{"title":"Hedge venue exposure","sidebarTitle":"Hedging","href":"/guides/venue-hedging"},{"title":"Account analytics","sidebarTitle":"Account analytics","href":"/guides/firm-analytics"},{"title":"Read your usage","sidebarTitle":"Read your usage","href":"/guides/read-your-usage"},{"title":"Receive events on your server","sidebarTitle":"Receive events","href":"/guides/receive-events"}]},{"group":"Connect pre-registration","pages":[{"title":"Get listed","sidebarTitle":"Get listed","href":"/guides/get-listed"},{"title":"Register an account","sidebarTitle":"Register an account","href":"/guides/register-an-account"},{"title":"Follow registrations","sidebarTitle":"Follow registrations","href":"/guides/handle-registration-events"}]},{"group":"Check your integration","pages":[{"title":"Requirements","href":"/providers/requirements"},{"title":"Run conformance","href":"/providers/test-evidence"},{"title":"Use your results","href":"/providers/submission"}]}]},{"dropdown":"Providers","icon":"plug","description":"Bring a market to trdrs","pages":[{"title":"Provider conformance","href":"/providers/provider-conformance"},{"title":"Publish a provider integration","href":"/providers/publishing"},{"title":"FXCubic","href":"/providers/fxcubic"},{"title":"Run a testnet provider","href":"/guides/run-a-testnet-provider"},{"title":"Publish a datafeed to your traders","sidebarTitle":"Publish a datafeed","href":"/guides/publish-a-datafeed"},{"title":"Provider data","sidebarTitle":"Provider data","href":"/guides/venue-data"}]},{"dropdown":"Trading interfaces","icon":"display-code","description":"Build your own trading screens","pages":[{"title":"Build a front end","sidebarTitle":"Build a front end","href":"/guides/build-a-front-end"}]}]},{"tab":"API reference","groups":[{"group":"Start here","pages":[{"title":"API reference overview","sidebarTitle":"Overview","href":"/api/overview"}]},{"group":"Endpoints","pages":[{"group":"Market data","pages":[{"group":"Prices and symbols","pages":[{"title":"Get market-data limits","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/market/config","href":"/api-reference/market-data/get-market-data-limits"},{"title":"Search the symbol catalog","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/market/symbols","href":"/api-reference/market-data/search-the-symbol-catalog"},{"title":"Get symbol details","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/market/symbol-info","href":"/api-reference/market-data/get-symbol-details"},{"title":"Get the futures catalog","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/instruments","href":"/api-reference/market-data/get-the-futures-catalog"},{"title":"Get server time","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/market/time","href":"/api-reference/market-data/get-server-time"},{"title":"Get price history","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/market/history","href":"/api-reference/market-data/get-price-history"},{"title":"Get quote snapshots","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/market/quotes","href":"/api-reference/market-data/get-quote-snapshots"},{"title":"Stream live bars","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/market/stream","href":"/api-reference/market-data/stream-live-bars"},{"title":"Stream multiplexed live bars","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/market/streams","href":"/api-reference/market-data/stream-multiplexed-live-bars"}]},{"group":"News and calendar","pages":[{"title":"List news headlines","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/news","href":"/api-reference/news/list-news-headlines"},{"title":"Get a news thumbnail","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/news/image/{id}","href":"/api-reference/news/get-a-news-thumbnail"},{"title":"List calendar events","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/calendar","href":"/api-reference/news/list-calendar-events"},{"title":"Stream news","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/news/stream","href":"/api-reference/news/stream-news"},{"title":"Stream calendar updates","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/calendar/stream","href":"/api-reference/news/stream-calendar-updates"}]}]},{"group":"Trading","pages":[{"group":"Orders","pages":[{"title":"Get the net position","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/trading/position","href":"/api-reference/trading/get-the-net-position"},{"title":"Get what the account may do","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/trading/actions","href":"/api-reference/trading/get-what-the-account-may-do"},{"title":"Match a market for an account","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/trading/match","href":"/api-reference/trading/match-a-market-for-an-account"},{"title":"Preview order margin","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/margin-preview","href":"/api-reference/trading/preview-order-margin"},{"title":"Get leverage and margin mode","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/trading/symbol-config","href":"/api-reference/trading/get-leverage-and-margin-mode"},{"title":"Set leverage","deprecated":null,"version":null,"openapi":"/api/openapi.json put /api/trading/symbol-config","href":"/api-reference/trading/set-leverage"},{"title":"Set margin mode","description":"Changes the margin mode of one instrument between cross and isolated at the provider, or the whole account's where the provider holds one mode for every instrument it margins on the account (the symbol configuration's `marginModeScope` says which). The leverage stays as it is. The change is refused, before it is sent, while a position or a working order sits within its reach at a provider that states that rule, as Binance does; on the paper book while money is still owed there or the account is being liquidated; and on an instrument that trades in one mode only. Any other provider, as Hyperliquid and Bybit are, is sent the change whatever the account holds, and its refusal comes back in its own words. Asking for the mode already set changes nothing.\n\nRequired key: Trading API key. A Connect app's backend can also send it with the app's API key, and a venue's backend with its Venue key, which carries `trader:trade`, each naming one of its own traders in `x-trdrs-trader`: it then runs on that trader's own accounts.","deprecated":null,"version":null,"openapi":"/api/openapi.json put /api/trading/margin-mode","href":"/api-reference/trading/set-margin-mode"},{"title":"Place an order","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/order","href":"/api-reference/trading/place-an-order"},{"title":"Replace an order","description":"Moves one resting order to a new price, as one operation under one `clientOrderId`. Where the provider can change an order in place, trdrs does, and the order keeps its id; elsewhere trdrs cancels it and places it again. Always show the `outcome`: `replaced` and `amended` mean it worked, and `restored`, `gone`, `unconfirmed` and `order_lost` mean it didn't.\n\nA take profit or stop loss of a bracket moves with its bracket, through `PUT /api/trading/exits/{id}`. An entry keeps the bracket waiting on it: the bracket follows the entry to the order it rests as afterwards.\n\nOn the paper book, a limit moved to a price the market already crosses fills at once, as a new limit order at that price would: it takes the market's price and never a worse one than the new limit, and a bracket waiting on the entry is armed by the fill. The old order ends replaced in the same moment, nothing rests, and `providerOrderId` is null.\n\nRequired key: Trading API key. A Connect app's backend can also send it with the app's API key, and a venue's backend with its Venue key, which carries `trader:trade`, each naming one of its own traders in `x-trdrs-trader`: it then runs on that trader's own accounts.","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/replace","href":"/api-reference/trading/replace-an-order"},{"title":"Cancel an order","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/cancel","href":"/api-reference/trading/cancel-an-order"},{"title":"Cancel all working orders","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/cancel-all","href":"/api-reference/trading/cancel-all-working-orders"},{"title":"Protect a position","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/exits","href":"/api-reference/trading/protect-a-position"},{"title":"Change a bracket","deprecated":null,"version":null,"openapi":"/api/openapi.json put /api/trading/exits/{id}","href":"/api-reference/trading/change-a-bracket"},{"title":"Withdraw a bracket","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /api/trading/exits/{id}","href":"/api-reference/trading/withdraw-a-bracket"},{"title":"Close part of a position","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/close","href":"/api-reference/trading/close-part-of-a-position"},{"title":"Flatten a position","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/flatten","href":"/api-reference/trading/flatten-a-position"},{"title":"Flatten the account","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/flatten-account","href":"/api-reference/trading/flatten-the-account"},{"title":"Reverse a position","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/trading/reverse","href":"/api-reference/trading/reverse-a-position"}]},{"group":"Account state","pages":[{"title":"List accounts","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/list","href":"/api-reference/account/list-accounts"},{"title":"List the markets an account trades","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/markets","href":"/api-reference/account/list-the-markets-an-account-trades"},{"title":"Get the account summary","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/summary","href":"/api-reference/account/get-the-account-summary"},{"title":"Get the account snapshot","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/snapshot","href":"/api-reference/account/get-the-account-snapshot"},{"title":"List open positions","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/positions","href":"/api-reference/account/list-open-positions"},{"title":"List closed positions","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/positions/closed","href":"/api-reference/account/list-closed-positions"},{"title":"List orders","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/orders","href":"/api-reference/account/list-orders"},{"title":"List order history","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/orders/history","href":"/api-reference/account/list-order-history"},{"title":"List fills for an instrument","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/executions","href":"/api-reference/account/list-fills-for-an-instrument"},{"title":"Get daily P\u0026L history","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/pnl/history","href":"/api-reference/account/get-daily-p\u0026l-history"},{"title":"List closed round trips","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/pnl/round-trips","href":"/api-reference/account/list-closed-round-trips"},{"title":"List brackets","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/brackets","href":"/api-reference/account/list-brackets"},{"title":"Stream account updates","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/stream","href":"/api-reference/account/stream-account-updates"},{"title":"Get history sync status","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/account/sync-status","href":"/api-reference/account/get-history-sync-status"}]},{"group":"Retired risk controls","pages":[{"title":"Get the risk state (deprecated)","deprecated":true,"version":null,"openapi":"/api/openapi.json get /api/risk","href":"/api-reference/account/get-the-risk-state-deprecated"},{"title":"Read the risk state (deprecated)","deprecated":true,"version":null,"openapi":"/api/openapi.json put /api/risk","href":"/api-reference/account/read-the-risk-state-deprecated"},{"title":"Clear the risk lock (deprecated)","deprecated":true,"version":null,"openapi":"/api/openapi.json post /api/risk/unlock","href":"/api-reference/account/clear-the-risk-lock-deprecated"}]},{"group":"Evaluation programs","pages":[{"title":"List evaluation programs","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/challenges","href":"/api-reference/challenges/list-evaluation-programs"},{"title":"Create an enrollment","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/challenges/enroll","href":"/api-reference/challenges/create-an-enrollment"},{"title":"List your enrollments","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/enrollments","href":"/api-reference/challenges/list-your-enrollments"},{"title":"List enrollment events","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/enrollments/events","href":"/api-reference/challenges/list-enrollment-events"}]}]},{"group":"Connect","pages":[{"title":"List the built-in providers and how each is signed into","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/connect/providers","href":"/api-reference/connect/list-the-built-in-providers-and-how-each-is-signed-into"},{"title":"List Connect’s tiles","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/connect/tiles","href":"/api-reference/connect/list-connect’s-tiles"},{"group":"Connect links","pages":[{"title":"Create a Connect link","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/connect/links","href":"/api-reference/connect-apps-preview/create-a-connect-link"},{"title":"Read a Connect link","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/connect/links/{linkId}","href":"/api-reference/connect-apps-preview/read-a-connect-link"},{"title":"Close a Connect link","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /api/connect/links/{linkId}","href":"/api-reference/connect-apps-preview/close-a-connect-link"}]},{"group":"Hosted Connect's own routes","pages":[{"title":"Mount a Connect link token","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/connect-link/mount","href":"/api-reference/connect-apps-preview/mount-a-connect-link-token"},{"title":"List the tiles a Connect session offers","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/connect-link/sessions/{sessionId}/tiles","href":"/api-reference/connect-apps-preview/list-the-tiles-a-connect-session-offers"},{"title":"List a trader's provider connections","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/connect-link/sessions/{sessionId}/providers","href":"/api-reference/connect-apps-preview/list-a-traders-provider-connections"},{"title":"Open white-label paper in Connect","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/connect-link/sessions/{sessionId}/paper","href":"/api-reference/connect-apps-preview/open-white-label-paper-in-connect"},{"title":"Start a provider sign-in window","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/connect-link/sessions/{sessionId}/oauth/{provider}","href":"/api-reference/connect-apps-preview/start-a-provider-sign-in-window"},{"title":"Finish a provider sign-in window","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/connect-link/sessions/{sessionId}/oauth/{provider}/finish","href":"/api-reference/connect-apps-preview/finish-a-provider-sign-in-window"},{"title":"Complete a Connect provider login","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/connect-link/sessions/{sessionId}/complete","href":"/api-reference/connect-apps-preview/complete-a-connect-provider-login"},{"title":"End a hosted Connect session","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /api/connect-link/sessions/{sessionId}/frame","href":"/api-reference/connect-apps-preview/end-a-hosted-connect-session"}]}]},{"group":"Venues","pages":[{"group":"Venue details","pages":[{"title":"Read a venue","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}","href":"/api-reference/venue-platform-preview/read-a-venue"}]},{"group":"Branding and reference data","pages":[{"title":"Read the venue brand","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/brand","href":"/api-reference/venue-platform-preview/read-the-venue-brand"},{"title":"Update the venue brand","deprecated":null,"version":null,"openapi":"/api/openapi.json put /api/venues/{venueId}/brand","href":"/api-reference/venue-platform-preview/update-the-venue-brand"},{"title":"Upload the venue logo","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/brand/logo","href":"/api-reference/venue-platform-preview/upload-the-venue-logo"},{"title":"Read the venue instrument reference catalog","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/reference/instruments","href":"/api-reference/venue-platform-preview/read-the-venue-instrument-reference-catalog"},{"title":"Read registered contract facts for a new instrument","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/reference/contract","href":"/api-reference/venue-platform-preview/read-registered-contract-facts-for-a-new-instrument"},{"title":"Search the markets a venue can list","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/reference/symbols","href":"/api-reference/venue-platform-preview/search-the-markets-a-venue-can-list"}]},{"group":"Instruments","pages":[{"title":"List instrument candidates","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/instruments","href":"/api-reference/venue-platform-preview/list-instrument-candidates"},{"title":"List active instruments","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/instruments/active","href":"/api-reference/venue-platform-preview/list-active-instruments"},{"title":"Read an instrument candidate","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/instruments/{candidateId}","href":"/api-reference/venue-platform-preview/read-an-instrument-candidate"},{"title":"Save an instrument candidate","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/instruments","href":"/api-reference/venue-platform-preview/save-an-instrument-candidate"},{"title":"Activate an instrument version","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/instruments/active","href":"/api-reference/venue-platform-preview/activate-an-instrument-version"}]},{"group":"Conditions and groups","pages":[{"title":"List account groups","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/conditions/groups","href":"/api-reference/venue-platform-preview/list-account-groups"},{"title":"List condition profiles","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/conditions/profiles","href":"/api-reference/venue-platform-preview/list-condition-profiles"},{"title":"Apply a condition profile","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/conditions/active","href":"/api-reference/venue-platform-preview/apply-a-condition-profile"},{"title":"Create or update an account group","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/conditions/groups","href":"/api-reference/venue-platform-preview/create-or-update-an-account-group"},{"title":"Preview a conditions change","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/conditions/preview","href":"/api-reference/venue-platform-preview/preview-a-conditions-change"},{"title":"Publish a condition profile","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/conditions/profiles","href":"/api-reference/venue-platform-preview/publish-a-condition-profile"},{"title":"Point a group at a route","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/groups/{groupId}/route","href":"/api-reference/venue-platform-preview/point-a-group-at-a-route"}]},{"group":"Routes","pages":[{"title":"List routes","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/routes","href":"/api-reference/venue-platform-preview/list-routes"},{"title":"Create or update a route","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/routes","href":"/api-reference/venue-platform-preview/create-or-update-a-route"}]},{"group":"Providers and connections","pages":[{"title":"List provider connections","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/connections","href":"/api-reference/venue-platform-preview/list-provider-connections"},{"title":"List discovered provider accounts","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/connections/{connectionId}/accounts","href":"/api-reference/venue-platform-preview/list-discovered-provider-accounts"},{"title":"Read provider validation status","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/connections/{connectionId}/validations/{jobId}","href":"/api-reference/venue-platform-preview/read-provider-validation-status"},{"title":"List provider versions","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/providers","href":"/api-reference/venue-platform-preview/list-provider-versions"},{"title":"Create a provider connection draft","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/connections","href":"/api-reference/venue-platform-preview/create-a-provider-connection-draft"},{"title":"Queue read-only provider validation","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/connections/{connectionId}/validate","href":"/api-reference/venue-platform-preview/queue-read-only-provider-validation"},{"title":"Register a public provider version","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/providers","href":"/api-reference/venue-platform-preview/register-a-public-provider-version"},{"title":"Show or hide a plugged-in provider to this venue's traders","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/connections/{connectionId}/expose","href":"/api-reference/venue-platform-preview/show-or-hide-a-plugged-in-provider-to-this-venues-traders"},{"title":"Browse public provider integrations","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/provider-catalog/directory","href":"/api-reference/venue-platform-preview/browse-public-provider-integrations"},{"title":"Read your maintained integrations","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/provider-catalog/mine","href":"/api-reference/venue-platform-preview/read-your-maintained-integrations"},{"title":"Create a private provider profile","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/provider-catalog/profiles","href":"/api-reference/venue-platform-preview/create-a-private-provider-profile"},{"title":"Update provider profile","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/provider-catalog/profiles/{companyId}","href":"/api-reference/venue-platform-preview/update-provider-profile"},{"title":"Upload a provider logo","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/provider-catalog/profiles/{companyId}/logo","href":"/api-reference/venue-platform-preview/upload-a-provider-logo"},{"title":"Record an immutable provider release","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/provider-catalog/profiles/{companyId}/releases","href":"/api-reference/venue-platform-preview/record-an-immutable-provider-release"},{"title":"Preview, submit or withdraw a provider release","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/provider-catalog/profiles/{companyId}/publication","href":"/api-reference/venue-platform-preview/preview-submit-or-withdraw-a-provider-release"},{"title":"Pin a published release to your venue","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/provider-catalog/releases/{releaseId}/install","href":"/api-reference/venue-platform-preview/pin-a-published-release-to-your-venue"}]},{"group":"Risk policies","pages":[{"title":"List the venue's risk policies","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/risk-policies","href":"/api-reference/venue-platform-preview/list-the-venues-risk-policies"},{"title":"Store a risk policy version","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/risk-policies","href":"/api-reference/venue-platform-preview/store-a-risk-policy-version"},{"title":"Read one risk policy","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/risk-policies/{policyId}","href":"/api-reference/venue-platform-preview/read-one-risk-policy"},{"title":"Publish a risk policy version","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/risk-policies/{policyId}/publications","href":"/api-reference/venue-platform-preview/publish-a-risk-policy-version"}]},{"group":"Stages","pages":[{"title":"Read an account's stage eligibility","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/accounts/{accountId}/stages/{stageId}/eligibility","href":"/api-reference/venue-platform-preview/read-an-accounts-stage-eligibility"},{"title":"List stage policies","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/stages/policies","href":"/api-reference/venue-platform-preview/list-stage-policies"},{"title":"Advance an account past a stage","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/accounts/{accountId}/stages/{stageId}/advance","href":"/api-reference/venue-platform-preview/advance-an-account-past-a-stage"},{"title":"Put a stage policy in force","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/stages/active","href":"/api-reference/venue-platform-preview/put-a-stage-policy-in-force"},{"title":"Publish a stage policy","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/stages/policies","href":"/api-reference/venue-platform-preview/publish-a-stage-policy"}]},{"group":"Retired account controls","pages":[{"title":"Retired account risk controls","deprecated":true,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/accounts/{accountId}/risk-controls","href":"/api-reference/venue-platform-preview/retired-account-risk-controls"},{"title":"Retired account risk controls write","deprecated":true,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/accounts/{accountId}/risk-controls","href":"/api-reference/venue-platform-preview/retired-account-risk-controls-write"}]},{"group":"Venue accounts","pages":[{"title":"List a venue's accounts","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/accounts","href":"/api-reference/venue-platform-preview/list-a-venues-accounts"},{"title":"List existing accounts with original rules","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/existing-accounts","href":"/api-reference/venue-platform-preview/list-existing-accounts-with-original-rules"},{"title":"Issue an account into a group","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/accounts","href":"/api-reference/venue-platform-preview/issue-an-account-into-a-group"},{"title":"Bind a discovered external account","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/accounts/bind","href":"/api-reference/venue-platform-preview/bind-a-discovered-external-account"},{"title":"Credit, debit or adjust an account's balance","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/accounts/{accountId}/balance","href":"/api-reference/venue-platform-preview/credit-debit-or-adjust-an-accounts-balance"},{"title":"Quote an account payout","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/accounts/{accountId}/payout","href":"/api-reference/venue-platform-preview/quote-an-account-payout"},{"title":"Record an account payout","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/accounts/{accountId}/payout","href":"/api-reference/venue-platform-preview/record-an-account-payout"},{"title":"Reset an account to its starting balance","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/accounts/{accountId}/reset","href":"/api-reference/venue-platform-preview/reset-an-account-to-its-starting-balance"},{"title":"Halt trading on an account","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/accounts/{accountId}/halt","href":"/api-reference/venue-platform-preview/halt-trading-on-an-account"},{"title":"Resume trading on an account","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/accounts/{accountId}/resume","href":"/api-reference/venue-platform-preview/resume-trading-on-an-account"},{"title":"Read an account's analytics","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/accounts/{accountId}/analytics","href":"/api-reference/venue-platform-preview/read-an-accounts-analytics"},{"title":"Revoke an account grant","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /api/venues/{venueId}/accounts/{accountId}/grants/{grantId}","href":"/api-reference/venue-platform-preview/revoke-an-account-grant"},{"title":"Read account invitation status","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/accounts/{accountId}/grants/{grantId}","href":"/api-reference/venue-platform-preview/read-account-invitation-status"},{"title":"Read an account's open liquidation","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/accounts/{accountId}/incident","href":"/api-reference/venue-platform-preview/read-an-accounts-open-liquidation"},{"title":"Read what one account may trade","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/accounts/{accountId}/instruments","href":"/api-reference/venue-platform-preview/read-what-one-account-may-trade"},{"title":"Read a customer account's books","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/accounts/{accountId}/ledger","href":"/api-reference/venue-platform-preview/read-a-customer-accounts-books"},{"title":"Read one account's effective conditions","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/conditions/accounts/{accountId}/effective","href":"/api-reference/venue-platform-preview/read-one-accounts-effective-conditions"},{"title":"Invite an account recipient","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/accounts/{accountId}/grants","href":"/api-reference/venue-platform-preview/invite-an-account-recipient"},{"title":"Move an account between groups","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/conditions/accounts/{accountId}/group","href":"/api-reference/venue-platform-preview/move-an-account-between-groups"},{"title":"Set per-account safety limits","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/conditions/accounts/{accountId}/risk","href":"/api-reference/venue-platform-preview/set-per-account-safety-limits"}]},{"group":"Venue traders","pages":[{"title":"Send a trader to the trading platform","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/handoffs","href":"/api-reference/venue-platform-preview/send-a-trader-to-the-trading-platform"},{"title":"Suspend a trader","deprecated":null,"version":null,"openapi":"/api/openapi.json put /api/venues/{venueId}/traders/{trader}/suspension","href":"/api-reference/venue-platform-preview/suspend-a-trader"},{"title":"Lift a trader's suspension","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /api/venues/{venueId}/traders/{trader}/suspension","href":"/api-reference/venue-platform-preview/lift-a-traders-suspension"}]},{"group":"Hedging","pages":[{"title":"Read venue hedge state","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/hedges","href":"/api-reference/venue-platform-preview/read-venue-hedge-state"},{"title":"Publish a hedge policy","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/hedges/policies","href":"/api-reference/venue-platform-preview/publish-a-hedge-policy"},{"title":"Activate, pause or stop a hedge policy","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/hedges/activation","href":"/api-reference/venue-platform-preview/activate-pause-or-stop-a-hedge-policy"},{"title":"Preview or persist the next hedge target","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/hedges/calculate","href":"/api-reference/venue-platform-preview/preview-or-persist-the-next-hedge-target"},{"title":"Dispatch one prepared hedge intent","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/hedges/intents/{intentId}/dispatch","href":"/api-reference/venue-platform-preview/dispatch-one-prepared-hedge-intent"},{"title":"Reconcile an uncertain hedge intent","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/hedges/intents/{intentId}/reconcile","href":"/api-reference/venue-platform-preview/reconcile-an-uncertain-hedge-intent"},{"title":"Stop every hedge policy for this venue","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/hedges/emergency-stop","href":"/api-reference/venue-platform-preview/stop-every-hedge-policy-for-this-venue"},{"title":"Flatten a hedge destination","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/hedges/flatten","href":"/api-reference/venue-platform-preview/flatten-a-hedge-destination"},{"title":"Unbind a hedge account","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/accounts/{accountId}/unbind","href":"/api-reference/venue-platform-preview/unbind-a-hedge-account"},{"title":"Read risk across the venue's accounts","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/risk","href":"/api-reference/venue-platform-preview/read-risk-across-the-venues-accounts"}]},{"group":"Venue rules","pages":[{"title":"Turn venue rules on or off","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/rules","href":"/api-reference/venue-platform-preview/turn-venue-rules-on-or-off"}]},{"group":"Usage and webhooks","pages":[{"title":"Read the venue's metered usage for a month","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/usage","href":"/api-reference/venue-platform-preview/read-the-venues-metered-usage-for-a-month"},{"title":"Read the accounts behind the venue's usage","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/usage/accounts","href":"/api-reference/venue-platform-preview/read-the-accounts-behind-the-venues-usage"},{"title":"Read the receipt of one balance operation","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/balance-ops/{referenceId}","href":"/api-reference/venue-platform-preview/read-the-receipt-of-one-balance-operation"},{"title":"List the venue's webhooks","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/webhooks","href":"/api-reference/venue-platform-preview/list-the-venues-webhooks"},{"title":"Register a webhook","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/webhooks","href":"/api-reference/venue-platform-preview/register-a-webhook"},{"title":"Remove a webhook","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /api/venues/{venueId}/webhooks/{webhookId}","href":"/api-reference/venue-platform-preview/remove-a-webhook"},{"title":"Send a signed test ping to a webhook","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/venues/{venueId}/webhooks/{webhookId}/test","href":"/api-reference/venue-platform-preview/send-a-signed-test-ping-to-a-webhook"},{"title":"Read a webhook's delivery log","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/venues/{venueId}/webhooks/{webhookId}/deliveries","href":"/api-reference/venue-platform-preview/read-a-webhooks-delivery-log"}]},{"group":"Pre-registration","pages":[{"title":"Pre-register a trader’s account","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/pre-registration/registrations","href":"/api-reference/connect/pre-register-a-trader’s-account"},{"title":"List pre-registered accounts","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/pre-registration/registrations","href":"/api-reference/connect/list-pre-registered-accounts"},{"title":"Cancel a pre-registration","deprecated":null,"version":null,"openapi":"/api/openapi.json delete /api/pre-registration/registrations","href":"/api-reference/connect/cancel-a-pre-registration"}]},{"group":"Pre-registration conformance (sandbox)","pages":[{"title":"Start a sandbox conformance run","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/pre-registration/conformance/runs","href":"/api-reference/connect/start-a-sandbox-conformance-run"},{"title":"Read conformance run results","deprecated":null,"version":null,"openapi":"/api/openapi.json get /api/pre-registration/conformance/runs/{id}","href":"/api-reference/connect/read-conformance-run-results"},{"title":"Finish a sandbox conformance run","deprecated":null,"version":null,"openapi":"/api/openapi.json post /api/pre-registration/conformance/runs/{id}/close","href":"/api-reference/connect/finish-a-sandbox-conformance-run"}]}]}]}]},{"tab":"SDKs and tools","dropdowns":[{"dropdown":"Overview","icon":"flag-checkered","description":"Choose a tool for your integration","pages":[{"title":"SDKs and tools","sidebarTitle":"Overview","href":"/sdks"}]},{"dropdown":"Connect","icon":"link","description":"Embed hosted Connect with the Connect SDK","pages":[{"title":"Connect SDK","sidebarTitle":"Connect SDK","href":"/sdks/connect"}]},{"dropdown":"TypeScript","icon":"cube","description":"Read about the TypeScript SDK and its availability","pages":[{"title":"TypeScript SDK","sidebarTitle":"TypeScript SDK (unavailable)","href":"/sdks/typescript"}]},{"dropdown":"Charting","icon":"chart-line","description":"Build charts with Quick Charts","pages":[{"title":"Charting","href":"/chart-integration"}]},{"dropdown":"CLI","icon":"terminal","description":"Read about the CLI and its availability","pages":[{"title":"CLI","sidebarTitle":"CLI (unavailable)","href":"/cli"}]},{"dropdown":"AI","icon":"robot","description":"Build and check an integration with a coding agent","groups":[{"group":"Start here","pages":[{"title":"Build with AI","href":"/ai"}]},{"group":"Prompts","pages":[{"title":"Agent prompts","href":"/sdks/agent-prompts"}]}]}]}]},"title":"Place an order - trdrs Engine API","buildId":"dpl_G8u2B2Ji9qJYF9umedjv293TxycS","deploymentId":"dpl_G8u2B2Ji9qJYF9umedjv293TxycS","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-S3ptrr-V.js","utils-CUxEJy9u.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DavhVrxy.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B1sOUY6E.js","snippetPresets-C-RLYOrF.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Duz18EdI.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DPsbCc6D.js","shallow-B1dlhlOw.js","getApiPlaygroundDisplay-DvOu-BhE.js","CodeSnippet-By8wd64X.js","CodeSnippets-BxVv6TjI.js","Page-BGh0lBck.js","getPastedJson-DOAt9xJn.js","icon-BYg-qtQ2.js","MethodPill-Dtah8ZSz.js","DuplicateIcon-guWfDmh1.js","createIcon-pTGhj_hk.js","DynamicMarkdown-DpsHMHVL.js","SectionHeading-BbutQCjq.js","axios-vUo_bRtp.js","Markdown-DZ-stgDu.js","clsx-Dfme4k4V.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CPNs0ebX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-3JVAA-i3.js"]}