Streams one market’s order book: a Reset of the whole book, then Updates of the levels that changed. The depth is the venue’s own and covers more than the best bid and ask. A market the venue does not list returns 422 NotSupported.
An instrument, identified by its fields rather than a venue symbol: type, base, quote, and expiry, strike and right where they apply. type takes the InstrumentType values; unknown types are rejected. Market summaries also give its canonical symbol.
Future
FutureInv
Option
Perp
PerpInv
Spot
Show child attributes
Response
Each item in the stream
One message per line: a Reset first, then Updates, until an Ended line.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Plurex Docs","colors":{"primary":"#ba54f5","light":"#16C99D","dark":"#0C9473"},"logo":{"light":"https://mintcdn.com/plurex/55zZlLmLoaaEFioa/logo/light.svg?fit=max\u0026auto=format\u0026n=55zZlLmLoaaEFioa\u0026q=85\u0026s=e150115596b050b7a538e6f784ec2f44","dark":"https://mintcdn.com/plurex/55zZlLmLoaaEFioa/logo/dark.svg?fit=max\u0026auto=format\u0026n=55zZlLmLoaaEFioa\u0026q=85\u0026s=50700e3bf45d56130284da4e11ac0267"},"favicon":"https://mintcdn.com/plurex/55zZlLmLoaaEFioa/favicon.svg?fit=max\u0026auto=format\u0026n=55zZlLmLoaaEFioa\u0026q=85\u0026s=b75896d74b2a1f4042f455cecc2be909","navbar":{"links":[{"href":"https://support.plurex.io/portal/en/newticket","label":"Support"}],"primary":{"type":"button","label":"Platform","href":"https://platform.plurex.io"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"plurex","hasAudioNarration":false,"actualSubdomain":"plurex","customDomains":["docs.plurex.io"],"gitSource":{"type":"github","owner":"plurex","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae069e8d674d5fcdf0f8fc8","collectionId":"10a7ca6c-7ce8-4970-aa5a-284258f77003","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae069e8d674d5fcdf0f8fc8"},"entitlements":{},"buildId":"6ae13cd95d82eb0117f897be","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"API reference","count":47},{"language":"default","tag":"Trading","count":22},{"language":"default","tag":"Documentation","count":22},{"language":"default","tag":"Market data","count":10},{"language":"default","tag":"Orders","count":9},{"language":"default","tag":"Paper trading","count":9},{"language":"default","tag":"Accounts","count":6},{"language":"default","tag":"Prices and market statistics","count":5},{"language":"default","tag":"Concepts","count":5},{"language":"default","tag":"Leverage and position mode","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":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":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/platform/venues/subscribe-to-order-books","slug":"/api-reference/platform/venues/subscribe-to-order-books","pageMetadata":{"title":"Stream an order book","description":"Streams one market's order book: a Reset of the whole book, then Updates of the levels that changed. The depth is the venue's own and covers more than the best bid and ask. A market the venue does not list returns 422 NotSupported.","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/stream/SubscribeToOrderBooks","playground":"none","href":"/api-reference/platform/venues/subscribe-to-order-books"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Streams one market’s order book: a Reset of the whole book, then Updates of the levels that changed. The depth is the venue’s own and covers more than the best bid and ask. A market the venue does not list returns 422 NotSupported.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];const CapabilityCheck=({source=`host`,header=[],market=[],none=false,perMarket=false})=>{const _components={a:`a`,..._provideComponents()},{Info}=_components;if(!Info)_missingMdxReference(`Info`,true);const isHost=source===`host`;const noun=isHost?`host`:`venue`;const list=`/api-reference/platform/${noun}s/list`;const markets=`/api-reference/platform/${noun}s/list-markets`;const guide=`/capabilities/${noun}-capabilities`;const gated=header.some(item=>item.support);const keyed=header.find(item=>item.when);const path=value=>value.replace(/^capabilities\\./,``);return _jsxs(Info,{children:[_jsx(`p`,{children:_jsx(`strong`,{children:`Check support`})}),none?_jsx(`p`,{children:`No capability gates this operation.`}):_jsxs(_Fragment,{children:[_jsxs(`p`,{children:[`Read the `,noun,` with `,_jsxs(_components.a,{href:list,children:[`List `,noun,`s`]}),`. In its `,_jsx(`code`,{children:`capabilities`}),keyed?_jsxs(_Fragment,{children:[`, by your request's `,_jsx(`code`,{children:keyed.when.field})]}):null,`:`]}),_jsx(`ul`,{children:header.map(item=>_jsxs(`li`,{children:[item.when?_jsxs(_Fragment,{children:[_jsx(`code`,{children:item.when.value}),` → `]}):null,_jsx(`code`,{children:path(item.path)}),item.always?_jsxs(_Fragment,{children:[`, always `,_jsx(`code`,{children:`Supported`})]}):null,item.note?_jsxs(_Fragment,{children:[`: `,item.note]}):null]},item.path))}),gated?_jsxs(`p`,{children:[_jsx(`code`,{children:`Supported`}),`: go ahead.`,` `,perMarket?_jsxs(_Fragment,{children:[_jsx(`code`,{children:`PerMarket`}),`: check the market below. `]}):null,_jsx(`code`,{children:`NotSupported`}),`: the call fails with `,_jsx(`code`,{children:`422 NotSupported`}),`.`]}):null,market.length>0?_jsxs(_Fragment,{children:[_jsxs(`p`,{children:[`On the market, from `,_jsxs(_components.a,{href:markets,children:[`List `,noun,` markets`]}),`:`]}),_jsx(`ul`,{children:market.map(item=>_jsxs(`li`,{children:[_jsx(`code`,{children:item.path}),`: `,item.note]},item.path))})]}):null]}),_jsxs(`p`,{children:[`See `,_jsxs(_components.a,{href:guide,children:[isHost?`Host`:`Venue`,` capabilities`]}),` and`,` `,_jsx(_components.a,{href:`/capabilities/overview#support-values`,children:`support values`}),`.`]})]})};const OperationBadges=({badges=[]})=>{const{Badge,Tooltip}=_provideComponents()||{};if(!Badge)_missingMdxReference(`Badge`,true);if(!Tooltip)_missingMdxReference(`Tooltip`,true);const colors={query:`blue`,command:`purple`,stream:`yellow`,public:`green`,optional:`orange`,\"not-repeat-safe\":`red`};return _jsx(`p`,{children:badges.map(badge=>_jsx(`span`,{style:{marginRight:`0.5rem`},children:_jsx(Tooltip,{tip:badge.description,children:_jsx(Badge,{color:colors[badge.name]||`gray`,children:badge.label})})},badge.name))})};function _createMdxContent(props){const{_MdxComponentBoundary}={..._provideComponents(),...props.components};if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(_MdxComponentBoundary,{name:`OperationBadges`,children:_jsx(OperationBadges,{badges:[{\"name\":`stream`,\"label\":`Stream`,\"description\":`The response stays open and carries one JSON message per line until an Ended line.`}]})}),`\n`,_jsx(_MdxComponentBoundary,{name:`CapabilityCheck`,children:_jsx(CapabilityCheck,{source:`venue`,header:[{\"path\":`capabilities.orderBook.subscribeToOrderBooks`,\"always\":true}],market:[]})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{CapabilityCheck,OperationBadges,default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Stream an order book","description":"Streams one market's order book: a Reset of the whole book, then Updates of the levels that changed. The depth is the venue's own and covers more than the best bid and ask. A market the venue does not list returns 422 NotSupported.","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/stream/SubscribeToOrderBooks","playground":"none","href":"/api-reference/platform/venues/subscribe-to-order-books"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[151,2867,")=>null;const OperationBadges=()=>null;f"]]},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"venuesSubscribeToOrderBooks","summary":"Stream an order book","description":"Streams one market's order book: a Reset of the whole book, then Updates of the levels that changed. The depth is the venue's own and covers more than the best bid and ask. A market the venue does not list returns 422 NotSupported.","tags":["order-books"],"requestBody":"7a2ee708-34a3-48cf-9abc-8f8f8a6138d6","responses":{"200":"9715d56c-902e-47e2-89ea-9db6c8bd065b","400":"4976b96e-9d16-4129-bc32-4d1ee68b910f","401":"ac961030-410d-49d6-9868-078a50ddba5d","404":"c674ae0f-deb1-48c2-82f8-54f51bb37f9e","415":"54780251-6e23-4bab-bfb8-71163755286b","422":"93979182-7605-45d1-9987-fa94c454cddb","429":"8c6f7fa9-dfdf-470d-8797-bf12689d506f","500":"624fcb79-b0ba-4877-8020-efd75a18af08","502":"2586b55b-4a4a-42cf-8f59-4e0820599499","503":"9dd98d0f-3673-40b3-bec8-9c534b693a7b","504":"cbc9d87f-94b9-4243-ac60-cbc8c8e8b89f"},"method":"post","type":"path","servers":["370bdac0-2687-440d-bc90-9160600a2147"],"security":["a45268ca-b483-4971-9c05-34ba8906f701"],"path":"/api/v1/venues/stream/SubscribeToOrderBooks","baseUrlOptions":["https://api.plurex.io"],"title":"Stream an order book","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"venueId":{"type":"string","isRequired":true,"uniqueKey":"venueId","typeLabel":"string"},"instrument":{"oneOf":[{"type":"object","title":"Future","description":"An instrument, identified by its fields rather than a venue symbol: type, base, quote, and expiry, strike and right where they apply. type takes the InstrumentType values; unknown types are rejected. Market summaries also give its canonical symbol.","required":["type","base","quote","expiry"],"properties":{"base":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.0.base","typeLabel":"string"},"quote":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.0.quote","typeLabel":"string"},"expiry":{"type":"string","format":"date","description":"Contract expiry date (YYYY-MM-DD).","isRequired":true,"uniqueKey":"instrument.oneOf.0.expiry","typeLabel":"string\u003cdate>"},"type":{"type":"string","enum":["Future"],"isRequired":true,"uniqueKey":"instrument.oneOf.0.type","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"instrument.oneOf.0","typeLabel":"Future · object"},{"type":"object","title":"FutureInv","description":"An instrument, identified by its fields rather than a venue symbol: type, base, quote, and expiry, strike and right where they apply. type takes the InstrumentType values; unknown types are rejected. Market summaries also give its canonical symbol.","required":["type","base","quote","expiry"],"properties":{"base":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.1.base","typeLabel":"string"},"quote":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.1.quote","typeLabel":"string"},"expiry":{"type":"string","format":"date","description":"Contract expiry date (YYYY-MM-DD).","isRequired":true,"uniqueKey":"instrument.oneOf.1.expiry","typeLabel":"string\u003cdate>"},"type":{"type":"string","enum":["FutureInv"],"isRequired":true,"uniqueKey":"instrument.oneOf.1.type","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"instrument.oneOf.1","typeLabel":"FutureInv · object"},{"type":"object","title":"Option","description":"An instrument, identified by its fields rather than a venue symbol: type, base, quote, and expiry, strike and right where they apply. type takes the InstrumentType values; unknown types are rejected. Market summaries also give its canonical symbol.","required":["type","base","quote","expiry","strike","right"],"properties":{"base":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.2.base","typeLabel":"string"},"quote":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.2.quote","typeLabel":"string"},"expiry":{"type":"string","format":"date","description":"Contract expiry date (YYYY-MM-DD).","isRequired":true,"uniqueKey":"instrument.oneOf.2.expiry","typeLabel":"string\u003cdate>"},"strike":{"type":"string","pattern":"^(?:0|[1-9][0-9]*)(?:\\.[0-9]*[1-9])?$","description":"Positive strike price in the quote asset, in canonical form so identity is exact; a plain decimal with no exponent and no trailing fractional zeros (50000, not 50000.0 or 5E4).","isRequired":true,"uniqueKey":"instrument.oneOf.2.strike","typeLabel":"string"},"right":{"type":"string","enum":["Call","Put"],"description":"Whether an option gives the right to buy (Call) or to sell (Put) the underlying at the strike.","isRequired":true,"uniqueKey":"instrument.oneOf.2.right","typeLabel":"enum\u003cstring>"},"type":{"type":"string","enum":["Option"],"isRequired":true,"uniqueKey":"instrument.oneOf.2.type","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"instrument.oneOf.2","typeLabel":"Option · object"},{"type":"object","title":"Perp","description":"An instrument, identified by its fields rather than a venue symbol: type, base, quote, and expiry, strike and right where they apply. type takes the InstrumentType values; unknown types are rejected. Market summaries also give its canonical symbol.","required":["type","base","quote"],"properties":{"base":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.3.base","typeLabel":"string"},"quote":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.3.quote","typeLabel":"string"},"type":{"type":"string","enum":["Perp"],"isRequired":true,"uniqueKey":"instrument.oneOf.3.type","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"instrument.oneOf.3","typeLabel":"Perp · object"},{"type":"object","title":"PerpInv","description":"An instrument, identified by its fields rather than a venue symbol: type, base, quote, and expiry, strike and right where they apply. type takes the InstrumentType values; unknown types are rejected. Market summaries also give its canonical symbol.","required":["type","base","quote"],"properties":{"base":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.4.base","typeLabel":"string"},"quote":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.4.quote","typeLabel":"string"},"type":{"type":"string","enum":["PerpInv"],"isRequired":true,"uniqueKey":"instrument.oneOf.4.type","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"instrument.oneOf.4","typeLabel":"PerpInv · object"},{"type":"object","title":"Spot","description":"An instrument, identified by its fields rather than a venue symbol: type, base, quote, and expiry, strike and right where they apply. type takes the InstrumentType values; unknown types are rejected. Market summaries also give its canonical symbol.","required":["type","base","quote"],"properties":{"base":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.5.base","typeLabel":"string"},"quote":{"type":"string","pattern":"^[A-Z0-9.]{1,32}$","isRequired":true,"uniqueKey":"instrument.oneOf.5.quote","typeLabel":"string"},"type":{"type":"string","enum":["Spot"],"isRequired":true,"uniqueKey":"instrument.oneOf.5.type","typeLabel":"enum\u003cstring>"}},"isRequired":true,"uniqueKey":"instrument.oneOf.5","typeLabel":"Spot · object"}],"isRequired":true,"uniqueKey":"instrument","typeLabel":"Future · object | FutureInv · object | Option · object | Perp · object | PerpInv · object | Spot · object"}},"required":["venueId","instrument"],"description":"Streams one market's order book on a venue.","uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"venueId":"\u003cstring>","instrument":{"base":"\u003cstring>","quote":"\u003cstring>","expiry":"2023-12-25","type":"Future"}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"9715d56c-902e-47e2-89ea-9db6c8bd065b":{"description":"One message per line: a Reset first, then Updates, until an Ended line.","content":{"application/jsonl":{"itemSchema":{"oneOf":[{"type":"object","title":"Reset","description":"One line of the order book stream.","required":["type","timestamp","data"],"properties":{"timestamp":{"type":"string","format":"date-time","description":"When Plurex sent the event.","isRequired":true,"uniqueKey":"oneOf.0.timestamp","typeLabel":"string\u003cdate-time>"},"data":{"type":"object","properties":{"bids":{"type":"array","items":{"type":"object","properties":{"price":{"type":"string","pattern":"^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$","description":"An exact decimal number encoded as a string. No binary floating-point rounding.","isRequired":true,"uniqueKey":"oneOf.0.data.bids.items.[INDEX].price","typeLabel":"string"},"size":{"type":"string","pattern":"^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$","description":"Native contract units.","isRequired":true,"uniqueKey":"oneOf.0.data.bids.items.[INDEX].size","typeLabel":"string"}},"required":["price","size"],"description":"One price level of an order book: a price and the total size resting there.","uniqueKey":"oneOf.0.data.bids.items.[INDEX]","typeLabel":"object"},"description":"Best (highest) price first.","isRequired":true,"uniqueKey":"oneOf.0.data.bids","typeLabel":"object[]"},"asks":{"type":"array","items":{"type":"object","properties":{"price":{"type":"string","pattern":"^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$","description":"An exact decimal number encoded as a string. No binary floating-point rounding.","isRequired":true,"uniqueKey":"oneOf.0.data.asks.items.[INDEX].price","typeLabel":"string"},"size":{"type":"string","pattern":"^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$","description":"Native contract units.","isRequired":true,"uniqueKey":"oneOf.0.data.asks.items.[INDEX].size","typeLabel":"string"}},"required":["price","size"],"description":"One price level of an order book: a price and the total size resting there.","uniqueKey":"oneOf.0.data.asks.items.[INDEX]","typeLabel":"object"},"description":"Best (lowest) price first.","isRequired":true,"uniqueKey":"oneOf.0.data.asks","typeLabel":"object[]"},"observedAt":{"oneOf":[{"type":"string","description":"Venue time of these levels; null when the venue does not report it.","format":"date-time","isRequired":true,"uniqueKey":"oneOf.0.data.observedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Venue time of these levels; null when the venue does not report it.","isRequired":true,"uniqueKey":"oneOf.0.data.observedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.data.observedAt","typeLabel":"string\u003cdate-time> | null"},"receivedAt":{"type":"string","format":"date-time","description":"When Plurex received these levels.","isRequired":true,"uniqueKey":"oneOf.0.data.receivedAt","typeLabel":"string\u003cdate-time>"}},"required":["bids","asks","observedAt","receivedAt"],"description":"The whole book.","isRequired":true,"uniqueKey":"oneOf.0.data","typeLabel":"object"},"type":{"type":"string","enum":["Reset"],"description":"Always Reset.","isRequired":true,"uniqueKey":"oneOf.0.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.0","typeLabel":"Reset · object"},{"type":"object","title":"Update","description":"One line of the order book stream.","required":["type","timestamp","data"],"properties":{"timestamp":{"type":"string","format":"date-time","description":"When Plurex sent the event.","isRequired":true,"uniqueKey":"oneOf.1.timestamp","typeLabel":"string\u003cdate-time>"},"data":{"type":"object","properties":{"bids":{"type":"array","items":{"type":"object","properties":{"price":{"type":"string","pattern":"^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$","description":"An exact decimal number encoded as a string. No binary floating-point rounding.","isRequired":true,"uniqueKey":"oneOf.1.data.bids.items.[INDEX].price","typeLabel":"string"},"size":{"type":"string","pattern":"^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$","description":"Native contract units.","isRequired":true,"uniqueKey":"oneOf.1.data.bids.items.[INDEX].size","typeLabel":"string"}},"required":["price","size"],"description":"One price level of an order book: a price and the total size resting there.","uniqueKey":"oneOf.1.data.bids.items.[INDEX]","typeLabel":"object"},"description":"Best (highest) price first.","isRequired":true,"uniqueKey":"oneOf.1.data.bids","typeLabel":"object[]"},"asks":{"type":"array","items":{"type":"object","properties":{"price":{"type":"string","pattern":"^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$","description":"An exact decimal number encoded as a string. No binary floating-point rounding.","isRequired":true,"uniqueKey":"oneOf.1.data.asks.items.[INDEX].price","typeLabel":"string"},"size":{"type":"string","pattern":"^-?(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$","description":"Native contract units.","isRequired":true,"uniqueKey":"oneOf.1.data.asks.items.[INDEX].size","typeLabel":"string"}},"required":["price","size"],"description":"One price level of an order book: a price and the total size resting there.","uniqueKey":"oneOf.1.data.asks.items.[INDEX]","typeLabel":"object"},"description":"Best (lowest) price first.","isRequired":true,"uniqueKey":"oneOf.1.data.asks","typeLabel":"object[]"},"observedAt":{"oneOf":[{"type":"string","description":"Venue time of these levels; null when the venue does not report it.","format":"date-time","isRequired":true,"uniqueKey":"oneOf.1.data.observedAt.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Venue time of these levels; null when the venue does not report it.","isRequired":true,"uniqueKey":"oneOf.1.data.observedAt.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.data.observedAt","typeLabel":"string\u003cdate-time> | null"},"receivedAt":{"type":"string","format":"date-time","description":"When Plurex received these levels.","isRequired":true,"uniqueKey":"oneOf.1.data.receivedAt","typeLabel":"string\u003cdate-time>"}},"required":["bids","asks","observedAt","receivedAt"],"description":"The changed levels; size 0 removes a level.","isRequired":true,"uniqueKey":"oneOf.1.data","typeLabel":"object"},"type":{"type":"string","enum":["Update"],"description":"Always Update.","isRequired":true,"uniqueKey":"oneOf.1.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.1","typeLabel":"Update · object"},{"type":"object","title":"Ended","description":"One line of the order book stream.","required":["type","code","message"],"properties":{"code":{"type":"string","enum":["InvalidRequest","Unauthenticated","Forbidden","AccountNotFound","OrderNotFound","NotFound","MethodNotAllowed","DuplicateClientOrderId","OrderAlreadyClosed","Conflict","UnsupportedMediaType","InsufficientFunds","InvalidProviderCredentials","AccountLimit","NotSupported","Rejected","RateLimited","UnexpectedError","CancelAllFailed","UpstreamFailure","Unavailable","UpstreamTimeout"],"description":"Why the stream stopped, for example UpstreamFailure when the venue's or host's own feed ended.","isRequired":true,"uniqueKey":"oneOf.2.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Readable detail for logs; do not parse it.","isRequired":true,"uniqueKey":"oneOf.2.message","typeLabel":"string"},"type":{"type":"string","enum":["Ended"],"description":"Always Ended.","isRequired":true,"uniqueKey":"oneOf.2.type","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.2","typeLabel":"Ended · object"}],"uniqueKey":"","typeLabel":"Reset · object | Update · object | Ended · object"},"examples":{"Stream":{"title":"Stream","value":{"type":"Reset","timestamp":"2026-10-27T09:00:00.120Z","data":{"bids":[{"price":"67250.1","size":"0.42"}],"asks":[{"price":"67250.2","size":"0.08"}],"observedAt":"2026-10-27T09:00:00.101Z","receivedAt":"2026-10-27T09:00:00.115Z"}},"serializedValue":"{\"type\":\"Reset\",\"timestamp\":\"2026-10-27T09:00:00.120Z\",\"data\":{\"bids\":[{\"price\":\"67250.1\",\"size\":\"0.42\"}],\"asks\":[{\"price\":\"67250.2\",\"size\":\"0.08\"}],\"observedAt\":\"2026-10-27T09:00:00.101Z\",\"receivedAt\":\"2026-10-27T09:00:00.115Z\"}}\n{\"type\":\"Update\",\"timestamp\":\"2026-10-27T09:00:00.320Z\",\"data\":{\"bids\":[{\"price\":\"67250.1\",\"size\":\"0.9\"}],\"asks\":[{\"price\":\"67250.2\",\"size\":\"0\"}],\"observedAt\":\"2026-10-27T09:00:00.301Z\",\"receivedAt\":\"2026-10-27T09:00:00.316Z\"}}\n\n{\"type\":\"Ended\",\"code\":\"UpstreamFailure\",\"message\":\"Upstream stream ended\"}\n"}},"exampleType":"examples"}},"exampleType":"examples"},"4976b96e-9d16-4129-bc32-4d1ee68b910f":{"description":"400 BadRequest; code is InvalidRequest.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["InvalidRequest","Unauthenticated","Forbidden","AccountNotFound","OrderNotFound","NotFound","MethodNotAllowed","DuplicateClientOrderId","OrderAlreadyClosed","Conflict","UnsupportedMediaType","InsufficientFunds","InvalidProviderCredentials","AccountLimit","NotSupported","Rejected","RateLimited","UnexpectedError","CancelAllFailed","UpstreamFailure","Unavailable","UpstreamTimeout"],"description":"Stable error reason. The HTTP status for each code is fixed: InvalidRequest (400): Malformed JSON, wrong types, unknown fields or enum values, or invalid values.; Unauthenticated (401): Missing or invalid API key headers.; Forbidden (403): Authenticated, but without access to the account or operation.; AccountNotFound (404): The accountId does not exist.; OrderNotFound (404): The account exists, but the order identifier does not.; NotFound (404): Unknown path, host or venue.; MethodNotAllowed (405): The path exists but only accepts POST.; DuplicateClientOrderId (409): An order with this clientOrderId already exists.; OrderAlreadyClosed (409): The order is already filled, cancelled or rejected.; Conflict (409): A unique value (for example an account name) is already used.; UnsupportedMediaType (415): The request is not Content-Type application/json.; InsufficientFunds (422): The account cannot fund the order or withdrawal.; InvalidProviderCredentials (422): The provider rejected the account credentials.; AccountLimit (422): An account or subscription limit was reached.; NotSupported (422): The host does not support this operation, variant or instrument.; Rejected (422): The host or validation rejected the command.; RateLimited (429): The provider rate limited the request.; UnexpectedError (500): Unexpected server failure.; CancelAllFailed (502): At least one sub-cancel failed; reconcile with ListOpenOrders.; UpstreamFailure (502): The provider failed or returned an unusable response.; Unavailable (503): The service or provider is temporarily unavailable.; UpstreamTimeout (504): The provider did not respond in time. New codes may be added; treat an unknown code by its HTTP status.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","message"],"description":"Every error has this shape, at every HTTP status, including unknown paths (404 NotFound) and wrong methods (405 MethodNotAllowed). code is the specific reason. Each operation describes when to retry and how to check the outcome; an error alone does not prove a command had no effect.","uniqueKey":"","typeLabel":"object"},"examples":{"InvalidRequest":{"title":"InvalidRequest","value":{"code":"InvalidRequest","message":"Invalid cursor"}}},"exampleType":"examples"}},"exampleType":"examples"},"ac961030-410d-49d6-9868-078a50ddba5d":{"description":"401 Unauthenticated; code is Unauthenticated.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["InvalidRequest","Unauthenticated","Forbidden","AccountNotFound","OrderNotFound","NotFound","MethodNotAllowed","DuplicateClientOrderId","OrderAlreadyClosed","Conflict","UnsupportedMediaType","InsufficientFunds","InvalidProviderCredentials","AccountLimit","NotSupported","Rejected","RateLimited","UnexpectedError","CancelAllFailed","UpstreamFailure","Unavailable","UpstreamTimeout"],"description":"Stable error reason. The HTTP status for each code is fixed: InvalidRequest (400): Malformed JSON, wrong types, unknown fields or enum values, or invalid values.; Unauthenticated (401): Missing or invalid API key headers.; Forbidden (403): Authenticated, but without access to the account or operation.; AccountNotFound (404): The accountId does not exist.; OrderNotFound (404): The account exists, but the order identifier does not.; NotFound (404): Unknown path, host or venue.; MethodNotAllowed (405): The path exists but only accepts POST.; DuplicateClientOrderId (409): An order with this clientOrderId already exists.; OrderAlreadyClosed (409): The order is already filled, cancelled or rejected.; Conflict (409): A unique value (for example an account name) is already used.; UnsupportedMediaType (415): The request is not Content-Type application/json.; InsufficientFunds (422): The account cannot fund the order or withdrawal.; InvalidProviderCredentials (422): The provider rejected the account credentials.; AccountLimit (422): An account or subscription limit was reached.; NotSupported (422): The host does not support this operation, variant or instrument.; Rejected (422): The host or validation rejected the command.; RateLimited (429): The provider rate limited the request.; UnexpectedError (500): Unexpected server failure.; CancelAllFailed (502): At least one sub-cancel failed; reconcile with ListOpenOrders.; UpstreamFailure (502): The provider failed or returned an unusable response.; Unavailable (503): The service or provider is temporarily unavailable.; UpstreamTimeout (504): The provider did not respond in time. New codes may be added; treat an unknown code by its HTTP status.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","message"],"description":"Every error has this shape, at every HTTP status, including unknown paths (404 NotFound) and wrong methods (405 MethodNotAllowed). code is the specific reason. Each operation describes when to retry and how to check the outcome; an error alone does not prove a command had no effect.","uniqueKey":"","typeLabel":"object"},"examples":{"Unauthenticated":{"title":"Unauthenticated","value":{"code":"Unauthenticated","message":"Unauthorized"}}},"exampleType":"examples"}},"exampleType":"examples"},"c674ae0f-deb1-48c2-82f8-54f51bb37f9e":{"description":"404 NotFound; code is AccountNotFound, OrderNotFound or NotFound.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["InvalidRequest","Unauthenticated","Forbidden","AccountNotFound","OrderNotFound","NotFound","MethodNotAllowed","DuplicateClientOrderId","OrderAlreadyClosed","Conflict","UnsupportedMediaType","InsufficientFunds","InvalidProviderCredentials","AccountLimit","NotSupported","Rejected","RateLimited","UnexpectedError","CancelAllFailed","UpstreamFailure","Unavailable","UpstreamTimeout"],"description":"Stable error reason. The HTTP status for each code is fixed: InvalidRequest (400): Malformed JSON, wrong types, unknown fields or enum values, or invalid values.; Unauthenticated (401): Missing or invalid API key headers.; Forbidden (403): Authenticated, but without access to the account or operation.; AccountNotFound (404): The accountId does not exist.; OrderNotFound (404): The account exists, but the order identifier does not.; NotFound (404): Unknown path, host or venue.; MethodNotAllowed (405): The path exists but only accepts POST.; DuplicateClientOrderId (409): An order with this clientOrderId already exists.; OrderAlreadyClosed (409): The order is already filled, cancelled or rejected.; Conflict (409): A unique value (for example an account name) is already used.; UnsupportedMediaType (415): The request is not Content-Type application/json.; InsufficientFunds (422): The account cannot fund the order or withdrawal.; InvalidProviderCredentials (422): The provider rejected the account credentials.; AccountLimit (422): An account or subscription limit was reached.; NotSupported (422): The host does not support this operation, variant or instrument.; Rejected (422): The host or validation rejected the command.; RateLimited (429): The provider rate limited the request.; UnexpectedError (500): Unexpected server failure.; CancelAllFailed (502): At least one sub-cancel failed; reconcile with ListOpenOrders.; UpstreamFailure (502): The provider failed or returned an unusable response.; Unavailable (503): The service or provider is temporarily unavailable.; UpstreamTimeout (504): The provider did not respond in time. New codes may be added; treat an unknown code by its HTTP status.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","message"],"description":"Every error has this shape, at every HTTP status, including unknown paths (404 NotFound) and wrong methods (405 MethodNotAllowed). code is the specific reason. Each operation describes when to retry and how to check the outcome; an error alone does not prove a command had no effect.","uniqueKey":"","typeLabel":"object"},"examples":{"AccountNotFound":{"title":"AccountNotFound","value":{"code":"AccountNotFound","message":"Account not found: acc_123"}},"OrderNotFound":{"title":"OrderNotFound","value":{"code":"OrderNotFound","message":"Order not found: ord_456"}},"NotFound":{"title":"NotFound","value":{"code":"NotFound","message":"Not Found"}}},"exampleType":"examples"}},"exampleType":"examples"},"54780251-6e23-4bab-bfb8-71163755286b":{"description":"415 UnsupportedMediaType; code is UnsupportedMediaType.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["InvalidRequest","Unauthenticated","Forbidden","AccountNotFound","OrderNotFound","NotFound","MethodNotAllowed","DuplicateClientOrderId","OrderAlreadyClosed","Conflict","UnsupportedMediaType","InsufficientFunds","InvalidProviderCredentials","AccountLimit","NotSupported","Rejected","RateLimited","UnexpectedError","CancelAllFailed","UpstreamFailure","Unavailable","UpstreamTimeout"],"description":"Stable error reason. The HTTP status for each code is fixed: InvalidRequest (400): Malformed JSON, wrong types, unknown fields or enum values, or invalid values.; Unauthenticated (401): Missing or invalid API key headers.; Forbidden (403): Authenticated, but without access to the account or operation.; AccountNotFound (404): The accountId does not exist.; OrderNotFound (404): The account exists, but the order identifier does not.; NotFound (404): Unknown path, host or venue.; MethodNotAllowed (405): The path exists but only accepts POST.; DuplicateClientOrderId (409): An order with this clientOrderId already exists.; OrderAlreadyClosed (409): The order is already filled, cancelled or rejected.; Conflict (409): A unique value (for example an account name) is already used.; UnsupportedMediaType (415): The request is not Content-Type application/json.; InsufficientFunds (422): The account cannot fund the order or withdrawal.; InvalidProviderCredentials (422): The provider rejected the account credentials.; AccountLimit (422): An account or subscription limit was reached.; NotSupported (422): The host does not support this operation, variant or instrument.; Rejected (422): The host or validation rejected the command.; RateLimited (429): The provider rate limited the request.; UnexpectedError (500): Unexpected server failure.; CancelAllFailed (502): At least one sub-cancel failed; reconcile with ListOpenOrders.; UpstreamFailure (502): The provider failed or returned an unusable response.; Unavailable (503): The service or provider is temporarily unavailable.; UpstreamTimeout (504): The provider did not respond in time. New codes may be added; treat an unknown code by its HTTP status.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","message"],"description":"Every error has this shape, at every HTTP status, including unknown paths (404 NotFound) and wrong methods (405 MethodNotAllowed). code is the specific reason. Each operation describes when to retry and how to check the outcome; an error alone does not prove a command had no effect.","uniqueKey":"","typeLabel":"object"},"examples":{"UnsupportedMediaType":{"title":"UnsupportedMediaType","value":{"code":"UnsupportedMediaType","message":"Content type text/plain is not supported"}}},"exampleType":"examples"}},"exampleType":"examples"},"93979182-7605-45d1-9987-fa94c454cddb":{"description":"422 Rejected; code is InsufficientFunds, InvalidProviderCredentials, AccountLimit, NotSupported or Rejected.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["InvalidRequest","Unauthenticated","Forbidden","AccountNotFound","OrderNotFound","NotFound","MethodNotAllowed","DuplicateClientOrderId","OrderAlreadyClosed","Conflict","UnsupportedMediaType","InsufficientFunds","InvalidProviderCredentials","AccountLimit","NotSupported","Rejected","RateLimited","UnexpectedError","CancelAllFailed","UpstreamFailure","Unavailable","UpstreamTimeout"],"description":"Stable error reason. The HTTP status for each code is fixed: InvalidRequest (400): Malformed JSON, wrong types, unknown fields or enum values, or invalid values.; Unauthenticated (401): Missing or invalid API key headers.; Forbidden (403): Authenticated, but without access to the account or operation.; AccountNotFound (404): The accountId does not exist.; OrderNotFound (404): The account exists, but the order identifier does not.; NotFound (404): Unknown path, host or venue.; MethodNotAllowed (405): The path exists but only accepts POST.; DuplicateClientOrderId (409): An order with this clientOrderId already exists.; OrderAlreadyClosed (409): The order is already filled, cancelled or rejected.; Conflict (409): A unique value (for example an account name) is already used.; UnsupportedMediaType (415): The request is not Content-Type application/json.; InsufficientFunds (422): The account cannot fund the order or withdrawal.; InvalidProviderCredentials (422): The provider rejected the account credentials.; AccountLimit (422): An account or subscription limit was reached.; NotSupported (422): The host does not support this operation, variant or instrument.; Rejected (422): The host or validation rejected the command.; RateLimited (429): The provider rate limited the request.; UnexpectedError (500): Unexpected server failure.; CancelAllFailed (502): At least one sub-cancel failed; reconcile with ListOpenOrders.; UpstreamFailure (502): The provider failed or returned an unusable response.; Unavailable (503): The service or provider is temporarily unavailable.; UpstreamTimeout (504): The provider did not respond in time. New codes may be added; treat an unknown code by its HTTP status.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","message"],"description":"Every error has this shape, at every HTTP status, including unknown paths (404 NotFound) and wrong methods (405 MethodNotAllowed). code is the specific reason. Each operation describes when to retry and how to check the outcome; an error alone does not prove a command had no effect.","uniqueKey":"","typeLabel":"object"},"examples":{"InsufficientFunds":{"title":"InsufficientFunds","value":{"code":"InsufficientFunds","message":"Insufficient Funds"}},"InvalidProviderCredentials":{"title":"InvalidProviderCredentials","value":{"code":"InvalidProviderCredentials","message":"Unprocessable Entity"}},"AccountLimit":{"title":"AccountLimit","value":{"code":"AccountLimit","message":"Subscription limit reached"}},"NotSupported":{"title":"NotSupported","value":{"code":"NotSupported","message":"Unprocessable Entity"}},"Rejected":{"title":"Rejected","value":{"code":"Rejected","message":"Order price is not a multiple of the price increment"}}},"exampleType":"examples"}},"exampleType":"examples"},"8c6f7fa9-dfdf-470d-8797-bf12689d506f":{"description":"429 RateLimited; code is RateLimited.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["InvalidRequest","Unauthenticated","Forbidden","AccountNotFound","OrderNotFound","NotFound","MethodNotAllowed","DuplicateClientOrderId","OrderAlreadyClosed","Conflict","UnsupportedMediaType","InsufficientFunds","InvalidProviderCredentials","AccountLimit","NotSupported","Rejected","RateLimited","UnexpectedError","CancelAllFailed","UpstreamFailure","Unavailable","UpstreamTimeout"],"description":"Stable error reason. The HTTP status for each code is fixed: InvalidRequest (400): Malformed JSON, wrong types, unknown fields or enum values, or invalid values.; Unauthenticated (401): Missing or invalid API key headers.; Forbidden (403): Authenticated, but without access to the account or operation.; AccountNotFound (404): The accountId does not exist.; OrderNotFound (404): The account exists, but the order identifier does not.; NotFound (404): Unknown path, host or venue.; MethodNotAllowed (405): The path exists but only accepts POST.; DuplicateClientOrderId (409): An order with this clientOrderId already exists.; OrderAlreadyClosed (409): The order is already filled, cancelled or rejected.; Conflict (409): A unique value (for example an account name) is already used.; UnsupportedMediaType (415): The request is not Content-Type application/json.; InsufficientFunds (422): The account cannot fund the order or withdrawal.; InvalidProviderCredentials (422): The provider rejected the account credentials.; AccountLimit (422): An account or subscription limit was reached.; NotSupported (422): The host does not support this operation, variant or instrument.; Rejected (422): The host or validation rejected the command.; RateLimited (429): The provider rate limited the request.; UnexpectedError (500): Unexpected server failure.; CancelAllFailed (502): At least one sub-cancel failed; reconcile with ListOpenOrders.; UpstreamFailure (502): The provider failed or returned an unusable response.; Unavailable (503): The service or provider is temporarily unavailable.; UpstreamTimeout (504): The provider did not respond in time. New codes may be added; treat an unknown code by its HTTP status.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","message"],"description":"Every error has this shape, at every HTTP status, including unknown paths (404 NotFound) and wrong methods (405 MethodNotAllowed). code is the specific reason. Each operation describes when to retry and how to check the outcome; an error alone does not prove a command had no effect.","uniqueKey":"","typeLabel":"object"},"examples":{"RateLimited":{"title":"RateLimited","value":{"code":"RateLimited","message":"Provider rate limited"}}},"exampleType":"examples"}},"exampleType":"examples"},"624fcb79-b0ba-4877-8020-efd75a18af08":{"description":"500 UnexpectedError; code is UnexpectedError.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["InvalidRequest","Unauthenticated","Forbidden","AccountNotFound","OrderNotFound","NotFound","MethodNotAllowed","DuplicateClientOrderId","OrderAlreadyClosed","Conflict","UnsupportedMediaType","InsufficientFunds","InvalidProviderCredentials","AccountLimit","NotSupported","Rejected","RateLimited","UnexpectedError","CancelAllFailed","UpstreamFailure","Unavailable","UpstreamTimeout"],"description":"Stable error reason. The HTTP status for each code is fixed: InvalidRequest (400): Malformed JSON, wrong types, unknown fields or enum values, or invalid values.; Unauthenticated (401): Missing or invalid API key headers.; Forbidden (403): Authenticated, but without access to the account or operation.; AccountNotFound (404): The accountId does not exist.; OrderNotFound (404): The account exists, but the order identifier does not.; NotFound (404): Unknown path, host or venue.; MethodNotAllowed (405): The path exists but only accepts POST.; DuplicateClientOrderId (409): An order with this clientOrderId already exists.; OrderAlreadyClosed (409): The order is already filled, cancelled or rejected.; Conflict (409): A unique value (for example an account name) is already used.; UnsupportedMediaType (415): The request is not Content-Type application/json.; InsufficientFunds (422): The account cannot fund the order or withdrawal.; InvalidProviderCredentials (422): The provider rejected the account credentials.; AccountLimit (422): An account or subscription limit was reached.; NotSupported (422): The host does not support this operation, variant or instrument.; Rejected (422): The host or validation rejected the command.; RateLimited (429): The provider rate limited the request.; UnexpectedError (500): Unexpected server failure.; CancelAllFailed (502): At least one sub-cancel failed; reconcile with ListOpenOrders.; UpstreamFailure (502): The provider failed or returned an unusable response.; Unavailable (503): The service or provider is temporarily unavailable.; UpstreamTimeout (504): The provider did not respond in time. New codes may be added; treat an unknown code by its HTTP status.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","message"],"description":"Every error has this shape, at every HTTP status, including unknown paths (404 NotFound) and wrong methods (405 MethodNotAllowed). code is the specific reason. Each operation describes when to retry and how to check the outcome; an error alone does not prove a command had no effect.","uniqueKey":"","typeLabel":"object"},"examples":{"UnexpectedError":{"title":"UnexpectedError","value":{"code":"UnexpectedError","message":"Internal Server Error"}}},"exampleType":"examples"}},"exampleType":"examples"},"2586b55b-4a4a-42cf-8f59-4e0820599499":{"description":"502 UpstreamFailure; code is UpstreamFailure or CancelAllFailed.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["InvalidRequest","Unauthenticated","Forbidden","AccountNotFound","OrderNotFound","NotFound","MethodNotAllowed","DuplicateClientOrderId","OrderAlreadyClosed","Conflict","UnsupportedMediaType","InsufficientFunds","InvalidProviderCredentials","AccountLimit","NotSupported","Rejected","RateLimited","UnexpectedError","CancelAllFailed","UpstreamFailure","Unavailable","UpstreamTimeout"],"description":"Stable error reason. The HTTP status for each code is fixed: InvalidRequest (400): Malformed JSON, wrong types, unknown fields or enum values, or invalid values.; Unauthenticated (401): Missing or invalid API key headers.; Forbidden (403): Authenticated, but without access to the account or operation.; AccountNotFound (404): The accountId does not exist.; OrderNotFound (404): The account exists, but the order identifier does not.; NotFound (404): Unknown path, host or venue.; MethodNotAllowed (405): The path exists but only accepts POST.; DuplicateClientOrderId (409): An order with this clientOrderId already exists.; OrderAlreadyClosed (409): The order is already filled, cancelled or rejected.; Conflict (409): A unique value (for example an account name) is already used.; UnsupportedMediaType (415): The request is not Content-Type application/json.; InsufficientFunds (422): The account cannot fund the order or withdrawal.; InvalidProviderCredentials (422): The provider rejected the account credentials.; AccountLimit (422): An account or subscription limit was reached.; NotSupported (422): The host does not support this operation, variant or instrument.; Rejected (422): The host or validation rejected the command.; RateLimited (429): The provider rate limited the request.; UnexpectedError (500): Unexpected server failure.; CancelAllFailed (502): At least one sub-cancel failed; reconcile with ListOpenOrders.; UpstreamFailure (502): The provider failed or returned an unusable response.; Unavailable (503): The service or provider is temporarily unavailable.; UpstreamTimeout (504): The provider did not respond in time. New codes may be added; treat an unknown code by its HTTP status.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","message"],"description":"Every error has this shape, at every HTTP status, including unknown paths (404 NotFound) and wrong methods (405 MethodNotAllowed). code is the specific reason. Each operation describes when to retry and how to check the outcome; an error alone does not prove a command had no effect.","uniqueKey":"","typeLabel":"object"},"examples":{"UpstreamFailure":{"title":"UpstreamFailure","value":{"code":"UpstreamFailure","message":"Bad Gateway"}},"CancelAllFailed":{"title":"CancelAllFailed","value":{"code":"CancelAllFailed","message":"Bad Gateway"}}},"exampleType":"examples"}},"exampleType":"examples"},"9dd98d0f-3673-40b3-bec8-9c534b693a7b":{"description":"503 Unavailable; code is Unavailable.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["InvalidRequest","Unauthenticated","Forbidden","AccountNotFound","OrderNotFound","NotFound","MethodNotAllowed","DuplicateClientOrderId","OrderAlreadyClosed","Conflict","UnsupportedMediaType","InsufficientFunds","InvalidProviderCredentials","AccountLimit","NotSupported","Rejected","RateLimited","UnexpectedError","CancelAllFailed","UpstreamFailure","Unavailable","UpstreamTimeout"],"description":"Stable error reason. The HTTP status for each code is fixed: InvalidRequest (400): Malformed JSON, wrong types, unknown fields or enum values, or invalid values.; Unauthenticated (401): Missing or invalid API key headers.; Forbidden (403): Authenticated, but without access to the account or operation.; AccountNotFound (404): The accountId does not exist.; OrderNotFound (404): The account exists, but the order identifier does not.; NotFound (404): Unknown path, host or venue.; MethodNotAllowed (405): The path exists but only accepts POST.; DuplicateClientOrderId (409): An order with this clientOrderId already exists.; OrderAlreadyClosed (409): The order is already filled, cancelled or rejected.; Conflict (409): A unique value (for example an account name) is already used.; UnsupportedMediaType (415): The request is not Content-Type application/json.; InsufficientFunds (422): The account cannot fund the order or withdrawal.; InvalidProviderCredentials (422): The provider rejected the account credentials.; AccountLimit (422): An account or subscription limit was reached.; NotSupported (422): The host does not support this operation, variant or instrument.; Rejected (422): The host or validation rejected the command.; RateLimited (429): The provider rate limited the request.; UnexpectedError (500): Unexpected server failure.; CancelAllFailed (502): At least one sub-cancel failed; reconcile with ListOpenOrders.; UpstreamFailure (502): The provider failed or returned an unusable response.; Unavailable (503): The service or provider is temporarily unavailable.; UpstreamTimeout (504): The provider did not respond in time. New codes may be added; treat an unknown code by its HTTP status.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","message"],"description":"Every error has this shape, at every HTTP status, including unknown paths (404 NotFound) and wrong methods (405 MethodNotAllowed). code is the specific reason. Each operation describes when to retry and how to check the outcome; an error alone does not prove a command had no effect.","uniqueKey":"","typeLabel":"object"},"examples":{"Unavailable":{"title":"Unavailable","value":{"code":"Unavailable","message":"Service Unavailable"}}},"exampleType":"examples"}},"exampleType":"examples"},"cbc9d87f-94b9-4243-ac60-cbc8c8e8b89f":{"description":"504 UpstreamTimeout; code is UpstreamTimeout.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","enum":["InvalidRequest","Unauthenticated","Forbidden","AccountNotFound","OrderNotFound","NotFound","MethodNotAllowed","DuplicateClientOrderId","OrderAlreadyClosed","Conflict","UnsupportedMediaType","InsufficientFunds","InvalidProviderCredentials","AccountLimit","NotSupported","Rejected","RateLimited","UnexpectedError","CancelAllFailed","UpstreamFailure","Unavailable","UpstreamTimeout"],"description":"Stable error reason. The HTTP status for each code is fixed: InvalidRequest (400): Malformed JSON, wrong types, unknown fields or enum values, or invalid values.; Unauthenticated (401): Missing or invalid API key headers.; Forbidden (403): Authenticated, but without access to the account or operation.; AccountNotFound (404): The accountId does not exist.; OrderNotFound (404): The account exists, but the order identifier does not.; NotFound (404): Unknown path, host or venue.; MethodNotAllowed (405): The path exists but only accepts POST.; DuplicateClientOrderId (409): An order with this clientOrderId already exists.; OrderAlreadyClosed (409): The order is already filled, cancelled or rejected.; Conflict (409): A unique value (for example an account name) is already used.; UnsupportedMediaType (415): The request is not Content-Type application/json.; InsufficientFunds (422): The account cannot fund the order or withdrawal.; InvalidProviderCredentials (422): The provider rejected the account credentials.; AccountLimit (422): An account or subscription limit was reached.; NotSupported (422): The host does not support this operation, variant or instrument.; Rejected (422): The host or validation rejected the command.; RateLimited (429): The provider rate limited the request.; UnexpectedError (500): Unexpected server failure.; CancelAllFailed (502): At least one sub-cancel failed; reconcile with ListOpenOrders.; UpstreamFailure (502): The provider failed or returned an unusable response.; Unavailable (503): The service or provider is temporarily unavailable.; UpstreamTimeout (504): The provider did not respond in time. New codes may be added; treat an unknown code by its HTTP status.","isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"}},"required":["code","message"],"description":"Every error has this shape, at every HTTP status, including unknown paths (404 NotFound) and wrong methods (405 MethodNotAllowed). code is the specific reason. Each operation describes when to retry and how to check the outcome; an error alone does not prove a command had no effect.","uniqueKey":"","typeLabel":"object"},"examples":{"UpstreamTimeout":{"title":"UpstreamTimeout","value":{"code":"UpstreamTimeout","message":"Gateway Timeout"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"a45268ca-b483-4971-9c05-34ba8906f701":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-KEY","scopes":[],"schemeName":"ApiKey"},"ApiSecret":{"type":"apiKey","in":"header","name":"X-API-SECRET","scopes":[],"schemeName":"ApiSecret"}}},"servers":{"370bdac0-2687-440d-bc90-9160600a2147":{"url":"https://api.plurex.io"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-KEY","scopes":[],"schemeName":"ApiKey"},"schema":{"title":"X-API-KEY","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKey","name":"X-API-KEY"},{"scheme":{"type":"apiKey","in":"header","name":"X-API-SECRET","scopes":[],"schemeName":"ApiSecret"},"schema":{"title":"X-API-SECRET","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiSecret","name":"X-API-SECRET"}],"title":"ApiKey \u0026 ApiSecret"}]},"originalFileLocation":"api-reference/platform/plurex-platform-api.yaml"},"subdomain":"plurex","siteName":"Plurex Docs","title":"Stream an order book - Plurex Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T00:08:02.174Z","originalFileLocation":"api-reference/platform/venues/subscribe-to-order-books.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Streams one market\u0026#x27;s order book: a Reset of the whole book, then Updates of the levels that changed. The depth is the venue\u0026#x27;s own and covers more than the best bid and ask. A market the venue does not list returns 422 NotSupported.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Plurex Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/plurex/xiN9lOeJgzOgEDZE/_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/plurex/xiN9lOeJgzOgEDZE/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/plurex/xiN9lOeJgzOgEDZE/_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/plurex/xiN9lOeJgzOgEDZE/_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/plurex/xiN9lOeJgzOgEDZE/_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/plurex/xiN9lOeJgzOgEDZE/_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/plurex/xiN9lOeJgzOgEDZE/_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/plurex/xiN9lOeJgzOgEDZE/_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/plurex/xiN9lOeJgzOgEDZE/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Stream an order book - Plurex Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Streams one market\u0026#x27;s order book: a Reset of the whole book, then Updates of the levels that changed. The depth is the venue\u0026#x27;s own and covers more than the best bid and ask. A market the venue does not list returns 422 NotSupported.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Plurex Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.plurex.io/api-reference/platform/venues/subscribe-to-order-books\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://plurex.mintlify.app/_mintlify/api/og/v2?division=Order+books\u0026amp;title=Stream+an+order+book\u0026amp;description=Streams+one+market%27s+order+book%3A+a+Reset+of+the+whole+book%2C+then+Updates+of+the+levels+that+changed.+The+depth+is+the+venue%27s+own+and+covers+more+than+the+best+\u0026amp;theme=1267ba68e08c08afc9c8746c\u0026amp;signature=708cb07a22e26567404c63ce97bdbc3e6a0e63ffc22102c431bb269f4ea580fb\">\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=\"Stream an order book - Plurex Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Streams one market\u0026#x27;s order book: a Reset of the whole book, then Updates of the levels that changed. The depth is the venue\u0026#x27;s own and covers more than the best bid and ask. A market the venue does not list returns 422 NotSupported.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://plurex.mintlify.app/_mintlify/api/og/v2?division=Order+books\u0026amp;title=Stream+an+order+book\u0026amp;description=Streams+one+market%27s+order+book%3A+a+Reset+of+the+whole+book%2C+then+Updates+of+the+levels+that+changed.+The+depth+is+the+venue%27s+own+and+covers+more+than+the+best+\u0026amp;theme=1267ba68e08c08afc9c8746c\u0026amp;signature=708cb07a22e26567404c63ce97bdbc3e6a0e63ffc22102c431bb269f4ea580fb\">\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/plurex/xiN9lOeJgzOgEDZE/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Plurex Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ba54f5\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.plurex.io/api-reference/platform/venues/subscribe-to-order-books\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/platform/venues/subscribe-to-order-books.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.plurex.io/#organization\",\"name\":\"Plurex Docs\",\"url\":\"https://docs.plurex.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/plurex/55zZlLmLoaaEFioa/logo/light.svg?fit=max\u0026auto=format\u0026n=55zZlLmLoaaEFioa\u0026q=85\u0026s=e150115596b050b7a538e6f784ec2f44\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.plurex.io#website\",\"name\":\"Plurex Docs\",\"url\":\"https://docs.plurex.io\",\"publisher\":{\"@id\":\"https://docs.plurex.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.plurex.io/api-reference/platform/venues/subscribe-to-order-books#webpage\",\"url\":\"https://docs.plurex.io/api-reference/platform/venues/subscribe-to-order-books\",\"name\":\"Stream an order book\",\"description\":\"Streams one market's order book: a Reset of the whole book, then Updates of the levels that changed. The depth is the venue's own and covers more than the best bid and ask. A market the venue does not list returns 422 NotSupported.\",\"dateModified\":\"2026-10-28T00:08:02.174Z\",\"isPartOf\":{\"@id\":\"https://docs.plurex.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.plurex.io/api-reference/platform/venues/subscribe-to-order-books#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.plurex.io/api-reference/platform/venues/subscribe-to-order-books#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Market data\",\"item\":\"https://docs.plurex.io/api-reference/platform/venues/list\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Order books\",\"item\":\"https://docs.plurex.io/api-reference/platform/venues/get-order-book\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Stream an order book\",\"item\":\"https://docs.plurex.io/api-reference/platform/venues/subscribe-to-order-books\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.plurex.io/api-reference/platform/venues/subscribe-to-order-books#apireference\",\"headline\":\"Stream an order book\",\"name\":\"Stream an order book\",\"description\":\"Streams one market's order book: a Reset of the whole book, then Updates of the levels that changed. The depth is the venue's own and covers more than the best bid and ask. A market the venue does not list returns 422 NotSupported.\",\"url\":\"https://docs.plurex.io/api-reference/platform/venues/subscribe-to-order-books\",\"mainEntityOfPage\":{\"@id\":\"https://docs.plurex.io/api-reference/platform/venues/subscribe-to-order-books#webpage\"},\"dateModified\":\"2026-10-28T00:08:02.174Z\",\"publisher\":{\"@id\":\"https://docs.plurex.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.plurex.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Plurex Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Plurex Docs","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","groups":[{"group":"Getting started","pages":[{"title":"Platform API","href":"/api-reference/platform/overview"},{"title":"API conventions","href":"/api-reference/platform/conventions"},{"title":"Errors","href":"/api-reference/platform/errors"}]},{"group":"Market data","pages":[{"group":"Venues and markets","pages":[{"title":"List venues","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/query/List","href":"/api-reference/platform/venues/list"},{"title":"List venue markets","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/query/ListMarkets","href":"/api-reference/platform/venues/list-markets"}]},{"group":"Order books","pages":[{"title":"Get order book","description":"The current order book of one market, at the depth the venue provides. An unknown market returns 422 NotSupported.","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/query/GetOrderBook","href":"/api-reference/platform/venues/get-order-book"},{"title":"Stream an order book","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/stream/SubscribeToOrderBooks","playground":"none","href":"/api-reference/platform/venues/subscribe-to-order-books"}]},{"group":"Public trades","pages":[{"title":"Get recent trades","description":"The venue's recent public trades for one market, oldest first. The venue limits how many; this is not a complete history. An unknown market returns 422 NotSupported.","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/query/GetRecentTrades","href":"/api-reference/platform/venues/get-recent-trades"},{"title":"Stream public trades","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/stream/SubscribeToTrades","playground":"none","href":"/api-reference/platform/venues/subscribe-to-trades"}]},{"group":"Prices and market statistics","pages":[{"title":"Get prices","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/query/GetPrices","href":"/api-reference/platform/venues/get-prices"},{"title":"Stream a price","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/stream/SubscribeToPrices","playground":"none","href":"/api-reference/platform/venues/subscribe-to-prices"},{"title":"Get best quotes","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/query/GetBestQuotes","href":"/api-reference/platform/venues/get-best-quotes"},{"title":"Stream the best bid and ask","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/stream/SubscribeToBestQuotes","playground":"none","href":"/api-reference/platform/venues/subscribe-to-best-quotes"},{"title":"Get market statistics","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/query/GetMarketStatistics","href":"/api-reference/platform/venues/get-market-statistics"},{"title":"Stream market statistics","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/stream/SubscribeToMarketStatistics","playground":"none","href":"/api-reference/platform/venues/subscribe-to-market-statistics"},{"title":"Get indicative fundings","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/query/GetIndicativeFundings","href":"/api-reference/platform/venues/get-indicative-fundings"},{"title":"Stream indicative funding","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/stream/SubscribeToIndicativeFundings","playground":"none","href":"/api-reference/platform/venues/subscribe-to-indicative-fundings"},{"title":"Get open interests","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/query/GetOpenInterests","href":"/api-reference/platform/venues/get-open-interests"},{"title":"Stream open interest","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/stream/SubscribeToOpenInterests","playground":"none","href":"/api-reference/platform/venues/subscribe-to-open-interests"}]},{"group":"Candles","pages":[{"title":"List candles","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/query/ListCandles","href":"/api-reference/platform/venues/list-candles"},{"title":"Stream candles","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/venues/stream/SubscribeToCandles","playground":"none","href":"/api-reference/platform/venues/subscribe-to-candles"}]}]},{"group":"Trading","pages":[{"group":"Hosts and markets","pages":[{"title":"List hosts","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/List","href":"/api-reference/platform/hosts/list"},{"title":"List host markets","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/ListMarkets","href":"/api-reference/platform/hosts/list-markets"}]},{"group":"Orders","pages":[{"title":"Get an order","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/GetOrder","href":"/api-reference/platform/hosts/get-order"},{"title":"Get orders","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/GetOrders","href":"/api-reference/platform/hosts/get-orders"},{"title":"List open orders","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/ListOpenOrders","href":"/api-reference/platform/hosts/list-orders"},{"title":"Stream account orders","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/stream/SubscribeToAccountOrders","playground":"none","href":"/api-reference/platform/hosts/subscribe-to-account-orders"},{"title":"List closed orders","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/ListClosedOrders","href":"/api-reference/platform/hosts/list-closed-orders"},{"title":"Submit an order","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/command/SubmitOrder","href":"/api-reference/platform/hosts/submit-order"},{"title":"Cancel an order","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/command/CancelOrder","href":"/api-reference/platform/hosts/cancel-order"},{"title":"Cancel orders","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/command/CancelOrders","href":"/api-reference/platform/hosts/cancel-orders"},{"title":"Cancel all orders","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/command/CancelAllOrders","href":"/api-reference/platform/hosts/cancel-all-orders"}]},{"group":"Fills","pages":[{"title":"List fills","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/ListFills","href":"/api-reference/platform/hosts/list-fills"}]},{"group":"Balances and positions","pages":[{"title":"List wallets","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/ListWallets","href":"/api-reference/platform/hosts/list-wallets"},{"title":"List open positions","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/ListOpenPositions","href":"/api-reference/platform/hosts/list-positions"},{"title":"List margin states","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/ListAccountMarginStates","href":"/api-reference/platform/hosts/list-margin-states"},{"title":"Get market account state","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/GetAccountMarketState","href":"/api-reference/platform/hosts/get-market-state"}]},{"group":"Leverage and position mode","pages":[{"title":"Get market leverage","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/GetMarketLeverage","href":"/api-reference/platform/hosts/get-leverage"},{"title":"Get market position mode","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/GetMarketPositionMode","href":"/api-reference/platform/hosts/get-position-mode"},{"title":"Set market leverage","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/command/SetMarketLeverage","href":"/api-reference/platform/hosts/set-leverage"},{"title":"Set market position mode","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/command/SetMarketPositionMode","href":"/api-reference/platform/hosts/set-position-mode"}]},{"group":"Transactions","pages":[{"title":"List account transactions","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/query/ListTransactions","href":"/api-reference/platform/hosts/list-transactions"},{"title":"Stream account transactions","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/hosts/stream/SubscribeToAccountTransactions","playground":"none","href":"/api-reference/platform/hosts/subscribe-to-account-transactions"}]}]},{"group":"Accounts","pages":[{"title":"Connect an exchange or broker account","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/accounts/command/Connect","href":"/api-reference/platform/accounts/connect"},{"title":"Update account credentials","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/accounts/command/UpdateConnection","href":"/api-reference/platform/accounts/update-connection"},{"title":"Rename an account","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/accounts/command/Rename","href":"/api-reference/platform/accounts/rename"},{"title":"Delete an account","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/accounts/command/Delete","href":"/api-reference/platform/accounts/delete"},{"title":"List accounts","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/accounts/query/List","href":"/api-reference/platform/accounts/list"},{"title":"Get an account","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/accounts/query/Get","href":"/api-reference/platform/accounts/get"}]},{"group":"Paper trading","pages":[{"group":"Paper accounts","pages":[{"title":"Create a paper account","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/paper/command/CreateAccount","href":"/api-reference/platform/paper/create"},{"title":"Deposit into a paper account","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/paper/command/Deposit","href":"/api-reference/platform/paper/deposit"},{"title":"Withdraw from a paper account","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/paper/command/Withdraw","href":"/api-reference/platform/paper/withdraw"}]},{"group":"Paper fees","pages":[{"title":"Set paper fee tier","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/paper/command/SetFeeTier","href":"/api-reference/platform/paper/set-fee-tier"},{"title":"Get paper fee settings","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/paper/query/GetFeeSettings","href":"/api-reference/platform/paper/get-fee-settings"},{"title":"Get effective paper fee rates","openapi":"api-reference/platform/plurex-platform-api.yaml POST /api/v1/paper/query/GetEffectiveFeeRates","href":"/api-reference/platform/paper/get-effective-fee-rates"}]}]}]}]},"title":"Stream an order book - Plurex Docs","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-WRhTSUDL.js","utils-ChMov4Kr.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-_REmC2bI.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp6nVRCu.js","snippetPresets-DZadmXoU.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CY2WdoTl.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DwYG-Q4l.js","shallow-BXQIGwv4.js","getApiPlaygroundDisplay-CK5nK5B9.js","CodeSnippet-TH4a2aGW.js","CodeSnippets-DwsQiOFS.js","Page-R3M_BF4L.js","getPastedJson-DD7kUzi_.js","icon-holE3QoJ.js","MethodPill-DUW0T8us.js","DuplicateIcon-CI_p4be-.js","createIcon-BdbRvavb.js","DynamicMarkdown-DN96a4Ur.js","SectionHeading-SCu36A9d.js","axios-vUo_bRtp.js","Markdown-CCeGv-zI.js","clsx-BGBGWFTt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Cv_O2fky.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-2C5OB2eV.js"]}