How many of the submitted orders to quote. all (the default) quotes every order; single quotes only the first order and returns the rest with quoted: false. See MultiQuoteMode for the full behaviour.
Quote the orders in parallel (true, the default) or one after another. Leave it unset unless you are measuring latency — the results are the same either way.
One entry per order you sent, in the same order. Match them up with index.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Houdini documentation","colors":{"primary":"#A955F7","light":"#A955F7","dark":"#6D19BB"},"logo":{"light":"https://mintcdn.com/houdini/1qxWMAnpbp51-Yh3/logo/wordmark-black.svg?fit=max\u0026auto=format\u0026n=1qxWMAnpbp51-Yh3\u0026q=85\u0026s=835e11b4170923b979bdf1ba4cb302b8","dark":"https://mintcdn.com/houdini/1qxWMAnpbp51-Yh3/logo/wordmark-white.svg?fit=max\u0026auto=format\u0026n=1qxWMAnpbp51-Yh3\u0026q=85\u0026s=93f5cefb108d85fa5bf5397fa325f004"},"favicon":"https://mintcdn.com/houdini/J_K5qV0WwrgjImSc/favicon.svg?fit=max\u0026auto=format\u0026n=J_K5qV0WwrgjImSc\u0026q=85\u0026s=590f308a0168b015c97bd34e59347cc6","appearance":{"default":"dark"},"background":{"decoration":"gradient"},"footer":{"socials":{"x":"https://x.com/HoudiniSwap","github":"https://github.com/HoudiniSwap"}},"fonts":{"family":"Inter"},"integrations":{"posthog":{"apiKey":"phc_w4HfQH4UqlUBDknwuvTDJMJLJ9CpshxIwzH3eZFa32c","apiHost":"https://api4.houdiniswap.com"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"houdini","hasAudioNarration":false,"actualSubdomain":"houdini","customDomains":["docs.houdiniswap.com"],"gitSource":{"type":"github","owner":"houdiniswap","repo":"docs-v2","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adc5d15137af4d6beae7c4c","collectionId":"a4f08450-0fc2-4651-80ab-b78e3a3297ef","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adc5d15137af4d6beae7c4c"},"entitlements":{},"buildId":"6adf551c362b83303f22ca3e","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"API V2 Reference ","count":41},{"language":"default","tag":"Developer Hub","count":23},{"language":"default","tag":"Overview","count":16},{"language":"default","tag":"Multi-Exchange","count":9},{"language":"default","tag":"On-chain DEX or Bridge","count":9},{"language":"default","tag":"Partner Account","count":9},{"language":"default","tag":"Swap Flow Guides","count":8},{"language":"default","tag":"Private and Standard Swaps","count":5},{"language":"default","tag":"Core Concepts","count":5},{"language":"default","tag":"Guides","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"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":[],"page":{"pagePath":"api-reference/multi-exchange/get-multi-quotes","slug":"/api-reference/multi-exchange/get-multi-quotes","pageMetadata":{"title":"Get multi quotes","description":"Returns the available routes for each swap in a batch.\n\nOptional. [Create multi exchange](/api-reference/multi-exchange/create-multi-exchange) picks its own routes and takes no `quoteId`, so call this only when you want to show rates before committing.\n\n- standard and private CEX only — no DEX\n- `mode=single` quotes just the first swap, as a faster preview\n\nBeta — the response shape may still change.","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /quotes/multi","href":"/api-reference/multi-exchange/get-multi-quotes","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 a: \"a\",\n code: \"code\",\n li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Returns the available routes for each swap in a batch.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Optional. \", _jsx(_components.a, {\n href: \"/api-reference/multi-exchange/create-multi-exchange\",\n children: \"Create multi exchange\"\n }), \" picks its own routes and takes no \", _jsx(_components.code, {\n children: \"quoteId\"\n }), \", so call this only when you want to show rates before committing.\"]\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsx(_components.li, {\n children: \"standard and private CEX only — no DEX\"\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"mode=single\"\n }), \" quotes just the first swap, as a faster preview\"]\n }), \"\\n\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Beta — the response shape may still change.\"\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":"Get multi quotes","description":"Returns the available routes for each swap in a batch.\n\nOptional. [Create multi exchange](/api-reference/multi-exchange/create-multi-exchange) picks its own routes and takes no `quoteId`, so call this only when you want to show rates before committing.\n\n- standard and private CEX only — no DEX\n- `mode=single` quotes just the first swap, as a faster preview\n\nBeta — the response shape may still change.","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /quotes/multi","href":"/api-reference/multi-exchange/get-multi-quotes","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"GetMultiQuotes","responses":{"200":"39fbeea4-45a9-48b7-bbe0-2ad753a8451b","401":"eab7c232-cf46-463f-93bc-f111e03dffa3","402":"d59c42f7-88bd-48c8-982d-afafe62c6e03","404":"d0aa48a1-69c4-4863-8741-940df5d74823","422":"7b4b2b04-5653-4cae-88d0-4953cecd78c7","429":"da41c3db-3398-4be4-8d3d-e697678500d4","500":"a9326cb2-c2f8-4257-b20e-eb2adb730057"},"description":"Returns the available routes for each swap in a batch.\n\nOptional. [Create multi exchange](/api-reference/multi-exchange/create-multi-exchange) picks its own routes and takes no `quoteId`, so call this only when you want to show rates before committing.\n\n- standard and private CEX only — no DEX\n- `mode=single` quotes just the first swap, as a faster preview\n\nBeta — the response shape may still change.","summary":"Get multi quotes","tags":["Multi-Exchange"],"security":["67394f26-10cd-47e6-b917-014e25578afc"],"parameters":[],"requestBody":"d4cb4384-f197-4caf-b76e-29f292dc10ad","method":"post","type":"path","servers":["8ebb4976-baf3-411c-8a1c-cd4d2c55015e"],"path":"/quotes/multi","baseUrlOptions":["http://localhost:3003/v2"],"title":"Get multi quotes","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"orders":{"items":{"description":"A single order to quote within a POST /quotes/multi batch.","properties":{"from":{"type":"string","description":"Token ID from which the swap is initiated. Must be a MongoDB ObjectId (24-char hex string).","example":"6689b73ec90e45f3b3e51564","minLength":24,"maxLength":24,"isRequired":true,"uniqueKey":"orders.items.[INDEX].from","typeLabel":"string"},"to":{"type":"string","description":"Token ID to which the swap is directed. Must be a MongoDB ObjectId (24-char hex string).","example":"6689b73ec90e45f3b3e51558","minLength":24,"maxLength":24,"isRequired":true,"uniqueKey":"orders.items.[INDEX].to","typeLabel":"string"},"amount":{"type":"number","format":"double","description":"Input amount as a decimal float in the token's display units. Must be > 0.","minimum":0,"isRequired":true,"uniqueKey":"orders.items.[INDEX].amount","typeLabel":"number\u003cdouble>"},"anonymous":{"type":"boolean","description":"Use anonymous (private) routing for this order.","uniqueKey":"orders.items.[INDEX].anonymous","typeLabel":"boolean"},"useXmr":{"type":"boolean","description":"Use Monero (XMR) as the bridge token on a private swap. Unset picks from a rotating set of other tokens.","uniqueKey":"orders.items.[INDEX].useXmr","typeLabel":"boolean"},"markup":{"type":"number","format":"double","description":"Partner markup for this request, as a percentage (0.5 = 0.5%).\nAccepted range: 0–4. This value overrides your account’s default\nmarkup for this trade. Send 0 to apply no markup, or leave the field\nempty / set it to null if no markup is requested. Providers that do\nnot support the requested markup will be excluded.","example":0.5,"minimum":0,"maximum":4,"uniqueKey":"orders.items.[INDEX].markup","typeLabel":"number\u003cdouble>"}},"required":["from","to","amount"],"type":"object","additionalProperties":false,"uniqueKey":"orders.items.[INDEX]","typeLabel":"object"},"type":"array","description":"The swaps to quote, 1 to 10 per request. Each is quoted on its own, so one failing does not fail the rest.","minItems":1,"maxItems":10,"isRequired":true,"uniqueKey":"orders","typeLabel":"object[]"},"filters":{"properties":{"onlySwaps":{"items":{"type":"string","uniqueKey":"filters.onlySwaps.items.[INDEX]","typeLabel":"string"},"type":"array","description":"Only quote these providers. Omit to use all of them. Values are `shortName` from [Get swap providers](/api-reference/reference-data/get-swap-providers).","uniqueKey":"filters.onlySwaps","typeLabel":"string[]"},"rotatePayoutWallets":{"type":"boolean","description":"Rotate the payout path for better privacy. Private swaps only — standard and DEX are single-leg and ignore it.","uniqueKey":"filters.rotatePayoutWallets","typeLabel":"boolean"},"rotateFallback":{"type":"boolean","description":"When strict rotation runs out of rotated routes, use a valid non-rotated route instead of failing. Default false. Needs `rotatePayoutWallets` — on its own it does nothing.","uniqueKey":"filters.rotateFallback","typeLabel":"boolean"},"deviationThreshold":{"type":"number","format":"double","description":"How far the rate may move, as a percentage, before a rotated route is rejected. Default 5. Only used when `rotatePayoutWallets` is true.","minimum":0,"maximum":100,"uniqueKey":"filters.deviationThreshold","typeLabel":"number\u003cdouble>"},"rotationLookback":{"type":"integer","format":"int32","description":"How many of your recent orders to look at when picking a different payout path. Default 10. Only used when `rotatePayoutWallets` is true.","minimum":1,"maximum":100,"uniqueKey":"filters.rotationLookback","typeLabel":"integer\u003cint32>"},"inLeg":{"properties":{"include":{"items":{"type":"string","uniqueKey":"filters.inLeg.include.items.[INDEX]","typeLabel":"string"},"type":"array","description":"Only use these providers for this leg. Values are `shortName` from [Get swap providers](/api-reference/reference-data/get-swap-providers).","uniqueKey":"filters.inLeg.include","typeLabel":"string[]"},"exclude":{"items":{"type":"string","uniqueKey":"filters.inLeg.exclude.items.[INDEX]","typeLabel":"string"},"type":"array","description":"Never use these providers for this leg. Values are `shortName` from [Get swap providers](/api-reference/reference-data/get-swap-providers).","uniqueKey":"filters.inLeg.exclude","typeLabel":"string[]"}},"type":"object","additionalProperties":false,"description":"Provider filter for the in-leg of a private (2-hop) route. Omit it and `onlySwaps` applies to both legs. Ignored by standard and DEX, which are single-hop.","uniqueKey":"filters.inLeg","typeLabel":"object"},"outLeg":{"properties":{"include":{"items":{"type":"string","uniqueKey":"filters.outLeg.include.items.[INDEX]","typeLabel":"string"},"type":"array","description":"Only use these providers for this leg. Values are `shortName` from [Get swap providers](/api-reference/reference-data/get-swap-providers).","uniqueKey":"filters.outLeg.include","typeLabel":"string[]"},"exclude":{"items":{"type":"string","uniqueKey":"filters.outLeg.exclude.items.[INDEX]","typeLabel":"string"},"type":"array","description":"Never use these providers for this leg. Values are `shortName` from [Get swap providers](/api-reference/reference-data/get-swap-providers).","uniqueKey":"filters.outLeg.exclude","typeLabel":"string[]"}},"type":"object","additionalProperties":false,"description":"Provider filter for the out-leg of a private (2-hop) route. Omit it and `onlySwaps` applies to both legs. Ignored by standard and DEX, which are single-hop.","uniqueKey":"filters.outLeg","typeLabel":"object"}},"type":"object","additionalProperties":false,"description":"Provider filters applied to every order in the batch.","uniqueKey":"filters","typeLabel":"object"},"mode":{"type":"string","enum":["all","single"],"description":"How many of the submitted orders to quote. `all` (the default) quotes every order; `single` quotes only the first order and returns the rest with `quoted: false`. See MultiQuoteMode for the full behaviour.","uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"batched":{"type":"boolean","description":"Quote the orders in parallel (`true`, the default) or one after another. Leave it unset unless you are measuring latency — the results are the same either way.","uniqueKey":"batched","typeLabel":"boolean"}},"required":["orders"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"orders":[{"from":"6689b73ec90e45f3b3e51564","to":"6689b73ec90e45f3b3e51558","amount":1,"anonymous":true,"useXmr":true,"markup":0.5}],"filters":{"onlySwaps":["\u003cstring>"],"rotatePayoutWallets":true,"rotateFallback":true,"deviationThreshold":50,"rotationLookback":50,"inLeg":{"include":["\u003cstring>"],"exclude":["\u003cstring>"]},"outLeg":{"include":["\u003cstring>"],"exclude":["\u003cstring>"]}},"batched":true}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"39fbeea4-45a9-48b7-bbe0-2ad753a8451b":{"description":"Success","content":{"application/json":{"schema":{"properties":{"mode":{"type":"string","enum":["all","single"],"description":"The `mode` this batch was quoted with.","isRequired":true,"uniqueKey":"mode","typeLabel":"enum\u003cstring>"},"batched":{"type":"boolean","description":"The `batched` setting this request ran with.","isRequired":true,"uniqueKey":"batched","typeLabel":"boolean"},"orders":{"items":{"description":"Per-order quote result envelope; `quotes` is empty when `error` is set.","properties":{"index":{"type":"number","format":"double","description":"Index of this order in the request `orders` array.","isRequired":true,"uniqueKey":"orders.items.[INDEX].index","typeLabel":"number\u003cdouble>"},"quoted":{"type":"boolean","description":"False when the order was not individually quoted (single mode).","isRequired":true,"uniqueKey":"orders.items.[INDEX].quoted","typeLabel":"boolean"},"total":{"type":"number","format":"double","description":"Number of candidate quotes returned for this order.","isRequired":true,"uniqueKey":"orders.items.[INDEX].total","typeLabel":"number\u003cdouble>"},"quotes":{"items":{"properties":{"swap":{"type":"string","description":"Provider short code, e.g. `se`. Matches `shortName` from [Get swap providers](/api-reference/reference-data/get-swap-providers).\n\nAbsent on private quotes — the providers behind a private route are not disclosed.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].swap","typeLabel":"string"},"quoteId":{"type":"string","description":"Pass this to [Create exchange](/api-reference/private-and-standard-swaps/create-exchange) to execute the quote.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].quoteId","typeLabel":"string"},"duration":{"type":"number","format":"double","description":"Our estimate of how long the swap takes, in minutes.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].duration","typeLabel":"number\u003cdouble>"},"providerEta":{"type":"number","format":"double","description":"The provider's own stated ETA, in minutes. May differ from `duration`.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].providerEta","typeLabel":"number\u003cdouble>"},"gas":{"type":"number","format":"double","description":"Estimated gas cost, in the source chain's native gas units. DEX routes only.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].gas","typeLabel":"number\u003cdouble>"},"gasUsd":{"type":"number","format":"double","description":"Estimated gas cost in USD. DEX routes only.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].gasUsd","typeLabel":"number\u003cdouble>"},"amountIn":{"type":"number","format":"double","description":"Amount you send, e.g. `0.25` BTC.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].amountIn","typeLabel":"number\u003cdouble>"},"amountOut":{"type":"number","format":"double","description":"Amount you receive, e.g. `3.52` ETH.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].amountOut","typeLabel":"number\u003cdouble>"},"amountOutUsd":{"type":"number","format":"double","description":"`amountOut` valued in USD.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].amountOutUsd","typeLabel":"number\u003cdouble>"},"amountInUsd":{"type":"number","format":"double","description":"`amountIn` valued in USD. Present on exact-out quotes only.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].amountInUsd","typeLabel":"number\u003cdouble>"},"feeUsd":{"type":"number","format":"double","description":"Provider fee in USD, charged on the source chain in its native token. Does not include gas.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].feeUsd","typeLabel":"number\u003cdouble>"},"bridgeFeeUsd":{"type":"number","format":"double","description":"Bridge fee in USD, when the route crosses chains.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].bridgeFeeUsd","typeLabel":"number\u003cdouble>"},"netAmountOut":{"type":"number","format":"double","description":"The field to compare routes on: `amountOut` minus `feeUsd`, in the output token — not USD.\n\n- equals `amountOut` on CEX quotes, which carry no `feeUsd`\n- gas is not deducted\n- falls back to `amountOut` when the output token has no USD price","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].netAmountOut","typeLabel":"number\u003cdouble>"},"error":{"type":"string","description":"Why this route could not be priced. When set, the amounts are not usable.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].error","typeLabel":"string"},"swapName":{"type":"string","description":"Provider display name, e.g. `StealthEx`.\n\nAbsent on private quotes, for the same reason as `swap`.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].swapName","typeLabel":"string"},"type":{"enum":["private","standard","dex"],"type":"string","description":"Which route this is: `private`, `standard`, or `dex`.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"filtered":{"type":"boolean","description":"True when the route was returned but should not be used — check `filteredReason`. Creating an exchange from a filtered route is rejected.","default":false,"uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].filtered","typeLabel":"boolean"},"filteredReason":{"enum":["price_impact","different_recipient"],"type":"string","description":"Why the route was filtered: unacceptable price impact, or the payout wallet differs from the sender.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].filteredReason","typeLabel":"enum\u003cstring>"},"supportsSignatures":{"type":"boolean","description":"True when the route accepts EIP-712 permit signatures instead of a separate approval transaction.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].supportsSignatures","typeLabel":"boolean"},"logoUrl":{"type":"string","description":"Provider logo.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].logoUrl","typeLabel":"string"},"markupSupported":{"type":"boolean","description":"True when the route can apply partner markup. Routes that cannot are excluded when you send `markup`.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].markupSupported","typeLabel":"boolean"},"slippageSupported":{"type":"boolean","description":"True when the route honours the `slippage` parameter.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].slippageSupported","typeLabel":"boolean"},"apiMarkupValue":{"type":"number","format":"double","description":"Markup the route was priced with, in the unit given by `markupType`.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].apiMarkupValue","typeLabel":"number\u003cdouble>"},"markupType":{"type":"string","enum":["absolute","percentage","bp"],"description":"How to read `apiMarkupValue`: `percentage`, `absolute`, or `bp` (basis points).","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].markupType","typeLabel":"enum\u003cstring>"},"restrictedCountries":{"items":{"type":"string","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].restrictedCountries.items.[INDEX]","typeLabel":"string"},"type":"array","description":"ISO country codes where this route may not be offered.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].restrictedCountries","typeLabel":"string[]"},"min":{"type":"number","format":"double","description":"Smallest amount this route accepts, e.g. `0.001` BTC. `0` means no minimum is known for the route yet; creating the order still checks the amount against the provider's current limits.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].min","typeLabel":"number\u003cdouble>"},"max":{"type":"number","format":"double","description":"Largest amount this route accepts, e.g. `5` BTC. `9007199254740991` means no maximum is known for the route yet; creating the order still checks the amount against the provider's current limits.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].max","typeLabel":"number\u003cdouble>"},"minOut":{"type":"number","format":"double","description":"Smallest amount you can receive, e.g. `100` USDT. Present only when `amountType` is `receive` and the provider returns receive-side bounds.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].minOut","typeLabel":"number\u003cdouble>"},"maxOut":{"type":"number","format":"double","description":"Largest amount you can receive, e.g. `50000` USDT. Present only when `amountType` is `receive` and the provider returns receive-side bounds.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].maxOut","typeLabel":"number\u003cdouble>"},"rateId":{"type":"string","description":"Identifies the locked rate on a fixed-rate quote. You do not pass this when creating the exchange — `quoteId` carries it.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].rateId","typeLabel":"string"},"fixed":{"type":"boolean","description":"True when the rate is locked until `validUntil`.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].fixed","typeLabel":"boolean"},"validUntil":{"type":"string","description":"When the locked rate expires, as a Unix timestamp in seconds, e.g. `\"1767225600\"`. Fixed-rate quotes only — create the exchange before it passes.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].validUntil","typeLabel":"string"},"requiresApproval":{"type":"boolean","description":"DEX quotes only. True when the wallet must approve the token before swapping — EVM and Tron non-native tokens. Call [Get token approval data](/api-reference/on-chain-dex-or-bridge/get-token-approval-data), send what it returns, then poll [Check token allowance](/api-reference/on-chain-dex-or-bridge/check-token-allowance) until it turns true.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].requiresApproval","typeLabel":"boolean"},"isPriority":{"type":"boolean","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].isPriority","typeLabel":"boolean"},"depositAddressSupported":{"type":"boolean","description":"DEX quotes only. True when the route can be funded by sending to a deposit address, with no connected wallet.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].depositAddressSupported","typeLabel":"boolean"},"requiresRefundAddress":{"type":"boolean","description":"True when this provider needs a `refundAddress` to execute. Collect one before creating the exchange; without it the swap falls through to the next provider.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].requiresRefundAddress","typeLabel":"boolean"},"appliedApiMarkup":{"type":"number","format":"double","description":"The `markup` you sent, as a percentage (`0.5` = 0.5%), returned back so you can check it was used. Absent when your stored account markup applied. On a private swap this is the PER-LEG value and is charged on both legs.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].appliedApiMarkup","typeLabel":"number\u003cdouble>"},"express":{"type":"boolean","description":"True when this private route is expected to settle faster than usual. Absent when it is not.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].express","typeLabel":"boolean"},"refundAddress":{"type":"string","description":"The `refundAddress` you sent, returned back so you can check it was used. It sits on the source chain.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].refundAddress","typeLabel":"string"},"amountType":{"type":"string","enum":["send","receive"],"description":"Whether the amounts are driven by the send side (`send`) or the receive side (`receive`).","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].amountType","typeLabel":"enum\u003cstring>"},"requiresIntermediateRefundAddress":{"type":"boolean","description":"True when this route settles through an on-chain hop, which needs a second refund address on top of `refundAddress`.\n\nCollect it from the user and send it as `intermediateRefundAddress` at [Create exchange](/api-reference/private-and-standard-swaps/create-exchange), or the call is rejected. `intermediateRefundChain` and `intermediateRefundToken` say which chain it must be on and which token it would receive.\n\nAPI v2 returns these routes only when private routes with an on-chain hop are turned on for your account — see [Private routes with an on-chain hop](https://docs.houdiniswap.com/developer-hub/swap-flows/private-onchain-hop).","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].requiresIntermediateRefundAddress","typeLabel":"boolean"},"intermediateRefundChain":{"type":"string","description":"Chain the `intermediateRefundAddress` must be on, e.g. `base`, `ethereum` or `solana`. Present only on a route that settles through an on-chain hop.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].intermediateRefundChain","typeLabel":"string"},"intermediateRefundToken":{"type":"string","description":"Token the intermediate refund arrives in, e.g. `USDC`. The address you supply must be able to receive it. Present only on a route that settles through an on-chain hop.","uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX].intermediateRefundToken","typeLabel":"string"}},"type":"object","additionalProperties":false,"uniqueKey":"orders.items.[INDEX].quotes.items.[INDEX]","typeLabel":"object"},"type":"array","description":"Routes for this order, best rate first. Empty when `quoted` is false or `error` is set.","isRequired":true,"uniqueKey":"orders.items.[INDEX].quotes","typeLabel":"object[]"},"error":{"properties":{"message":{"type":"string","description":"What went wrong, in plain text. Show it, but do not branch on it — the wording can change.","isRequired":true,"uniqueKey":"orders.items.[INDEX].error.message","typeLabel":"string"},"code":{"oneOf":[{"type":"string","description":"Machine-readable reason, from the same set of codes as a top-level error response. Branch on this.","uniqueKey":"orders.items.[INDEX].error.code.oneOf.0","typeLabel":"string"},{"type":"number","description":"Machine-readable reason, from the same set of codes as a top-level error response. Branch on this.","format":"double","uniqueKey":"orders.items.[INDEX].error.code.oneOf.1","typeLabel":"number\u003cdouble>"}],"uniqueKey":"orders.items.[INDEX].error.code","typeLabel":"string | number\u003cdouble>"}},"required":["message"],"type":"object","additionalProperties":false,"description":"Why this order could not be quoted. Only the affected order fails — the rest of the batch still returns, and the request is still a 200.","uniqueKey":"orders.items.[INDEX].error","typeLabel":"object"}},"required":["index","quoted","total","quotes"],"type":"object","additionalProperties":false,"uniqueKey":"orders.items.[INDEX]","typeLabel":"object"},"type":"array","description":"One entry per order you sent, in the same order. Match them up with `index`.","isRequired":true,"uniqueKey":"orders","typeLabel":"object[]"}},"required":["mode","batched","orders"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example 1":{"title":"Example 1","value":{"mode":"all","batched":true,"orders":[{"index":0,"quoted":true,"total":1,"quotes":[{"quoteId":"69a02882f48d56c923119d95","swap":"cl","swapName":"Changelly","type":"private","amountIn":0.25,"amountOut":3.5182,"amountInUsd":26450.5,"amountOutUsd":26301.44,"netAmountOut":3.5182,"duration":22,"providerEta":18,"min":0.0012,"max":12.5,"fixed":false,"filtered":false,"amountType":"send"}]},{"index":1,"quoted":true,"total":0,"quotes":[],"error":{"code":"SWAP_AMOUNT_IS_OUT_OF_BOUNDS","message":"Amount is below the minimum for this pair"}}]}}},"exampleType":"examples"}},"exampleType":"examples"},"eab7c232-cf46-463f-93bc-f111e03dffa3":{"description":"Credentials missing, malformed, or rejected — all return `INVALID_API_CREDENTIALS`. Sending only `partner-id` returns `PARTNER_ID_NOT_SUPPORTED`.","content":{"application/json":{"schema":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable reason for the failure. Branch on this, not on `message` — messages are free to change.\n\nThe value depends on the HTTP status. The common ones:\n\n- `400` — `BAD_REQUEST`\n- `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`\n- `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`\n- `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`\n- `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`\n- `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`, `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems\n- `429` — `RATE_LIMIT_EXCEEDED`\n- `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`, `SERVICE_UNAVAILABLE`\n\nNew codes are added over time, so treat this as an open set: match the ones you handle and fall back to the HTTP status for the rest.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"requestId":{"type":"string","description":"Unique id for this request. Quote it when contacting support — it is how we find the failure in our logs.","uniqueKey":"requestId","typeLabel":"string"}},"required":["message","code"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>","code":"\u003cstring>","requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"d59c42f7-88bd-48c8-982d-afafe62c6e03":{"description":"Payment required — x402 protocol. The body is empty; what to pay is in the `payment-required` header. Not returned when you send an `Authorization` header.","content":{"application/json":{"schema":{"description":"Body of a `402 Payment required`. Empty — `{}` — for API clients; a request that looks like a browser gets an HTML paywall page instead.\n\nThis is the x402 payment protocol, not the normal error format, so there is no `code` or `message` to branch on. What to pay is always in the `payment-required` response header, in both cases: base64-encoded JSON whose `accepts[]` entries each carry the `network`, the `asset` to pay in, the `amount`, and the `payTo` address, alongside `maxTimeoutSeconds` and the x402 `scheme`.\n\nSending `Authorization` skips the payment flow, so a 402 only reaches callers paying per request. An `apiKey` query param also skips it but is not a credential — those requests fail with `401 INVALID_API_CREDENTIALS`.","properties":{},"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{}}},"exampleType":"generated"}},"headers":{"payment-required":{"schema":{"type":"string"},"required":true}},"exampleType":"generated"},"d0aa48a1-69c4-4863-8741-940df5d74823":{"description":"Token not found or disabled","content":{"application/json":{"schema":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable reason for the failure. Branch on this, not on `message` — messages are free to change.\n\nThe value depends on the HTTP status. The common ones:\n\n- `400` — `BAD_REQUEST`\n- `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`\n- `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`\n- `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`\n- `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`\n- `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`, `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems\n- `429` — `RATE_LIMIT_EXCEEDED`\n- `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`, `SERVICE_UNAVAILABLE`\n\nNew codes are added over time, so treat this as an open set: match the ones you handle and fall back to the HTTP status for the rest.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"requestId":{"type":"string","description":"Unique id for this request. Quote it when contacting support — it is how we find the failure in our logs.","uniqueKey":"requestId","typeLabel":"string"}},"required":["message","code"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>","code":"\u003cstring>","requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"7b4b2b04-5653-4cae-88d0-4953cecd78c7":{"description":"Validation Failed","content":{"application/json":{"schema":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable reason for the failure. Branch on this, not on `message` — messages are free to change.\n\nThe value depends on the HTTP status. The common ones:\n\n- `400` — `BAD_REQUEST`\n- `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`\n- `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`\n- `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`\n- `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`\n- `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`, `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems\n- `429` — `RATE_LIMIT_EXCEEDED`\n- `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`, `SERVICE_UNAVAILABLE`\n\nNew codes are added over time, so treat this as an open set: match the ones you handle and fall back to the HTTP status for the rest.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"fields":{"properties":{},"type":"object","additionalProperties":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"fields.additionalProperties.message","typeLabel":"string"},"value":{"oneOf":[{}],"uniqueKey":"fields.additionalProperties.value","typeLabel":"any"}},"required":["message"],"type":"object","uniqueKey":"fields.additionalProperties","typeLabel":"object"},"description":"The inputs that failed, keyed by field name — or by path for a nested field, e.g. `filters.rotatePayoutWallets`. Each entry has a `message` and, when you sent one, the `value`.\n\nNot every `422` names its input, so `fields` can be `{}`: branch on `code`, and use `fields` to highlight the input when one is named.","isRequired":true,"uniqueKey":"fields","typeLabel":"object"},"requestId":{"type":"string","description":"Unique id for this request. Quote it when contacting support — it is how we find the failure in our logs.","uniqueKey":"requestId","typeLabel":"string"}},"required":["message","code","fields"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>","code":"\u003cstring>","fields":{},"requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"da41c3db-3398-4be4-8d3d-e697678500d4":{"description":"Rate limit exceeded — back off and retry","content":{"application/json":{"schema":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable reason for the failure. Branch on this, not on `message` — messages are free to change.\n\nThe value depends on the HTTP status. The common ones:\n\n- `400` — `BAD_REQUEST`\n- `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`\n- `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`\n- `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`\n- `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`\n- `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`, `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems\n- `429` — `RATE_LIMIT_EXCEEDED`\n- `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`, `SERVICE_UNAVAILABLE`\n\nNew codes are added over time, so treat this as an open set: match the ones you handle and fall back to the HTTP status for the rest.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"requestId":{"type":"string","description":"Unique id for this request. Quote it when contacting support — it is how we find the failure in our logs.","uniqueKey":"requestId","typeLabel":"string"}},"required":["message","code"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>","code":"\u003cstring>","requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"a9326cb2-c2f8-4257-b20e-eb2adb730057":{"description":"Internal Server Error","content":{"application/json":{"schema":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable reason for the failure. Branch on this, not on `message` — messages are free to change.\n\nThe value depends on the HTTP status. The common ones:\n\n- `400` — `BAD_REQUEST`\n- `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`\n- `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`\n- `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`\n- `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`\n- `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`, `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems\n- `429` — `RATE_LIMIT_EXCEEDED`\n- `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`, `SERVICE_UNAVAILABLE`\n\nNew codes are added over time, so treat this as an open set: match the ones you handle and fall back to the HTTP status for the rest.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"requestId":{"type":"string","description":"Unique id for this request. Quote it when contacting support — it is how we find the failure in our logs.","uniqueKey":"requestId","typeLabel":"string"}},"required":["message","code"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>","code":"\u003cstring>","requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"67394f26-10cd-47e6-b917-014e25578afc":{"apiKey":{"type":"apiKey","name":"Authorization","in":"header","description":"Send `Authorization: \u003cApiKey>:\u003cApiSecret>` — joined by a colon, raw. No `Bearer` prefix, no base64.\n\n[Get your credentials](https://docs.houdini.com/developer-hub/getting-started/authentication)","scopes":[],"schemeName":"apiKey"}}},"servers":{"8ebb4976-baf3-411c-8a1c-cd4d2c55015e":{"url":"http://localhost:3003/v2"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","name":"Authorization","in":"header","description":"Send `Authorization: \u003cApiKey>:\u003cApiSecret>` — joined by a colon, raw. No `Bearer` prefix, no base64.\n\n[Get your credentials](https://docs.houdini.com/developer-hub/getting-started/authentication)","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Authorization","type":"string","description":"Send `Authorization: \u003cApiKey>:\u003cApiSecret>` — joined by a colon, raw. No `Bearer` prefix, no base64.\n\n[Get your credentials](https://docs.houdini.com/developer-hub/getting-started/authentication)","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"https://api-partner.houdiniswap.com/v2/openapi.json"},"subdomain":"houdini","siteName":"Houdini documentation","title":"Get multi quotes - Houdini documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T13:26:57.954Z","originalFileLocation":"api-reference/multi-exchange/get-multi-quotes.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=\"Returns the available routes for each swap in a batch. Optional. Create multi exchange picks its own routes and takes no quoteId, so call this only when you want to show rates before committing. - standard and private CEX only — no DEX - mode=single quotes just the first swap, as a faster preview Beta — the response shape may still change.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Houdini documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_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/houdini/yzTfSRPGdvC9032C/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_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/houdini/yzTfSRPGdvC9032C/_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/houdini/yzTfSRPGdvC9032C/_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/houdini/yzTfSRPGdvC9032C/_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/houdini/yzTfSRPGdvC9032C/_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/houdini/yzTfSRPGdvC9032C/_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/houdini/yzTfSRPGdvC9032C/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get multi quotes - Houdini documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns the available routes for each swap in a batch. Optional. Create multi exchange picks its own routes and takes no quoteId, so call this only when you want to show rates before committing. - standard and private CEX only — no DEX - mode=single quotes just the first swap, as a faster preview Beta — the response shape may still change.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Houdini documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.houdiniswap.com/api-reference/multi-exchange/get-multi-quotes\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://houdini.mintlify.app/_mintlify/api/og/v2?division=Multi-Exchange\u0026amp;title=Get+multi+quotes\u0026amp;description=Returns+the+available+routes+for+each+swap+in+a+batch.%0A%0AOptional.+%5BCreate+multi+exchange%5D%28%2Fapi-reference%2Fmulti-exchange%2Fcreate-multi-exchange%29+picks+its+own+rou\u0026amp;theme=9ee3d943f07b0e7ca37035be\u0026amp;signature=eefbc44a977c99eacbeef80d825a7d16169ffcbfda1e01db920913f350f77848\">\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=\"Get multi quotes - Houdini documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns the available routes for each swap in a batch. Optional. Create multi exchange picks its own routes and takes no quoteId, so call this only when you want to show rates before committing. - standard and private CEX only — no DEX - mode=single quotes just the first swap, as a faster preview Beta — the response shape may still change.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://houdini.mintlify.app/_mintlify/api/og/v2?division=Multi-Exchange\u0026amp;title=Get+multi+quotes\u0026amp;description=Returns+the+available+routes+for+each+swap+in+a+batch.%0A%0AOptional.+%5BCreate+multi+exchange%5D%28%2Fapi-reference%2Fmulti-exchange%2Fcreate-multi-exchange%29+picks+its+own+rou\u0026amp;theme=9ee3d943f07b0e7ca37035be\u0026amp;signature=eefbc44a977c99eacbeef80d825a7d16169ffcbfda1e01db920913f350f77848\">\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/houdini/yzTfSRPGdvC9032C/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Houdini documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#A955F7\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.houdiniswap.com/api-reference/multi-exchange/get-multi-quotes\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/multi-exchange/get-multi-quotes.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.houdiniswap.com/#organization\",\"name\":\"Houdini documentation\",\"url\":\"https://docs.houdiniswap.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/houdini/1qxWMAnpbp51-Yh3/logo/wordmark-black.svg?fit=max\u0026auto=format\u0026n=1qxWMAnpbp51-Yh3\u0026q=85\u0026s=835e11b4170923b979bdf1ba4cb302b8\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.houdiniswap.com#website\",\"name\":\"Houdini documentation\",\"url\":\"https://docs.houdiniswap.com\",\"publisher\":{\"@id\":\"https://docs.houdiniswap.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.houdiniswap.com/api-reference/multi-exchange/get-multi-quotes#webpage\",\"url\":\"https://docs.houdiniswap.com/api-reference/multi-exchange/get-multi-quotes\",\"name\":\"Get multi quotes\",\"description\":\"Returns the available routes for each swap in a batch. Optional. Create multi exchange picks its own routes and takes no quoteId, so call this only when you want to show rates before committing. - standard and private CEX only — no DEX - mode=single quotes just the first swap, as a faster preview Beta — the response shape may still change.\",\"dateModified\":\"2026-10-26T13:26:57.954Z\",\"isPartOf\":{\"@id\":\"https://docs.houdiniswap.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.houdiniswap.com/api-reference/multi-exchange/get-multi-quotes#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.houdiniswap.com/api-reference/multi-exchange/get-multi-quotes#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Multi-Exchange\",\"item\":\"https://docs.houdiniswap.com/api-reference/multi-exchange/get-tokens\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get multi quotes\",\"item\":\"https://docs.houdiniswap.com/api-reference/multi-exchange/get-multi-quotes\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.houdiniswap.com/api-reference/multi-exchange/get-multi-quotes#apireference\",\"headline\":\"Get multi quotes\",\"name\":\"Get multi quotes\",\"description\":\"Returns the available routes for each swap in a batch. Optional. Create multi exchange picks its own routes and takes no quoteId, so call this only when you want to show rates before committing. - standard and private CEX only — no DEX - mode=single quotes just the first swap, as a faster preview Beta — the response shape may still change.\",\"url\":\"https://docs.houdiniswap.com/api-reference/multi-exchange/get-multi-quotes\",\"mainEntityOfPage\":{\"@id\":\"https://docs.houdiniswap.com/api-reference/multi-exchange/get-multi-quotes#webpage\"},\"dateModified\":\"2026-10-26T13:26:57.954Z\",\"publisher\":{\"@id\":\"https://docs.houdiniswap.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.houdiniswap.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Houdini documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Houdini documentation","nav":{"global":null,"tabs":[{"tab":"Overview","pages":[{"title":"Overview","href":"/overview/getting-started/what-is-houdini"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/how-to/private-swap"}]},{"tab":"Developer Hub","pages":[{"title":"Developer Hub","href":"/developer-hub/overview/what-you-can-build"}]},{"tab":"API V2 Reference ","icon":"folder-gear","groups":[{"group":"Private and Standard Swaps","pages":[{"title":"Get tokens","openapi":"GET /tokens","href":"/api-reference/private-and-standard-swaps/get-tokens"},{"title":"Get quotes","openapi":"GET /quotes","href":"/api-reference/private-and-standard-swaps/get-quotes"},{"title":"Get quotes by token address","openapi":"GET /quotes/byChainAddress","href":"/api-reference/private-and-standard-swaps/get-quotes-by-token-address"},{"title":"Create exchange","openapi":"POST /exchanges","href":"/api-reference/private-and-standard-swaps/create-exchange"},{"title":"Get order details","openapi":"GET /orders/{houdiniId}","href":"/api-reference/private-and-standard-swaps/get-order-details"}]},{"group":"Private Send","pages":[{"title":"Get tokens","openapi":"GET /tokens","href":"/api-reference/private-send/get-tokens"},{"title":"Get private send quote","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /quotes/private-send","href":"/api-reference/private-send/get-private-send-quote"},{"title":"Create private send order","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges/private-send","href":"/api-reference/private-send/create-private-send-order"},{"title":"Get order details","openapi":"GET /orders/{houdiniId}","href":"/api-reference/private-send/get-order-details"}]},{"group":"Multi-Exchange","pages":[{"title":"Get tokens","description":"Returns the tokens available for a multi-exchange. Use the returned id as the from / to of each order.","openapi":"GET /tokens","href":"/api-reference/multi-exchange/get-tokens"},{"title":"Get multi quotes","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /quotes/multi","href":"/api-reference/multi-exchange/get-multi-quotes"},{"title":"Create multi exchange","description":"Creates a group of swaps that share one `multiId`. Post the orders straight here — there is no quote step and no `quoteId`.\n\n- routes are chosen for you, per order\n- [Get multi quotes](/api-reference/multi-exchange/get-multi-quotes) is optional, for showing rates first\n- each swap starts at status NEW and is prepared in the background\n- poll [Get batch status](/api-reference/multi-exchange/get-batch-status) for deposit addresses\n\nSee the [multi-swap flow](https://docs.houdini.com/developer-hub/swap-flows/multi-swap) for the full sequence.","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges/multi","href":"/api-reference/multi-exchange/create-multi-exchange"},{"title":"Get batch status","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /exchanges/multi/{multiId}","href":"/api-reference/multi-exchange/get-batch-status"},{"group":"Bundler SOL","pages":[{"title":"Get batch transaction","openapi":"GET /exchanges/multi/{multiId}/tx","href":"/api-reference/bundler-sol/get-batch-transaction"}]},{"group":"Bundler EVM","pages":[{"title":"Build batch transaction","openapi":"POST /exchanges/multi/{multiId}/tx/build","href":"/api-reference/bundler-evm/build-batch-transaction"},{"title":"Submit signed transaction","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges/multi/{multiId}/tx","href":"/api-reference/bundler-evm/submit-signed-transaction"},{"title":"Retry failed orders","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges/multi/{multiId}/retry","href":"/api-reference/bundler-evm/retry-failed-orders"},{"title":"Recover stuck assets","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges/multi/recovery","href":"/api-reference/bundler-evm/recover-stuck-assets"}]}]},{"group":"On-chain DEX or Bridge","pages":[{"title":"Get tokens","openapi":"GET /tokens","href":"/api-reference/on-chain-dex-or-bridge/get-tokens"},{"title":"Get quotes","openapi":"GET /quotes","href":"/api-reference/on-chain-dex-or-bridge/get-quotes"},{"title":"Get quotes by token address","openapi":"GET /quotes/byChainAddress","href":"/api-reference/on-chain-dex-or-bridge/get-quotes-by-token-address"},{"title":"Create exchange","openapi":"POST /exchanges","href":"/api-reference/on-chain-dex-or-bridge/create-exchange"},{"title":"Get token approval data","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /dex/approve","href":"/api-reference/on-chain-dex-or-bridge/get-token-approval-data"},{"title":"Check token allowance","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /dex/allowance","href":"/api-reference/on-chain-dex-or-bridge/check-token-allowance"},{"title":"Get next chain signature","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /dex/chainSignatures","href":"/api-reference/on-chain-dex-or-bridge/get-next-chain-signature"},{"title":"Confirm DEX transaction","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /dex/confirmTx","href":"/api-reference/on-chain-dex-or-bridge/confirm-dex-transaction"},{"title":"Get order details","openapi":"GET /orders/{houdiniId}","href":"/api-reference/on-chain-dex-or-bridge/get-order-details"}]},{"group":"Reference Data","pages":[{"title":"Get token by ID","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /tokens/{id}","href":"/api-reference/reference-data/get-token-by-id"},{"title":"Get chains","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /chains","href":"/api-reference/reference-data/get-chains"},{"title":"Get swap providers","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /swaps","href":"/api-reference/reference-data/get-swap-providers"},{"title":"Get min and max amounts","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /minMax","href":"/api-reference/reference-data/get-min-and-max-amounts"}]},{"group":"Partner Account","pages":[{"title":"Get orders","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /orders","href":"/api-reference/partner-account/get-orders"},{"title":"Get partner profile","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /me","href":"/api-reference/partner-account/get-partner-profile"},{"title":"Get rate limits","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /rateLimits","href":"/api-reference/partner-account/get-rate-limits"},{"title":"Get commissions","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /commissions","href":"/api-reference/partner-account/get-commissions"},{"title":"Get commission summary","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /commissions/summary","href":"/api-reference/partner-account/get-commission-summary"},{"title":"Get withdrawals","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /withdrawals","href":"/api-reference/partner-account/get-withdrawals"},{"title":"Get volume stats","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /stats/volume","href":"/api-reference/partner-account/get-volume-stats"},{"title":"Get weekly volume","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /stats/weeklyVolume","href":"/api-reference/partner-account/get-weekly-volume"},{"title":"Get chart stats","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /stats/chart","href":"/api-reference/partner-account/get-chart-stats"}]},{"group":"System","pages":[{"title":"Get system health","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /status","href":"/api-reference/system/get-system-health"}]}]},{"tab":"API v1","hidden":true,"pages":[{"title":"API v1","href":"/migration/v1-to-v2"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/release-notes"}]},{"tab":"Support \u0026 FAQs","pages":[{"title":"Support \u0026 FAQs","href":"/support-and-faqs/faqs"}]}]},"title":"Get multi quotes - Houdini documentation","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DKJwRUt2.js","utils-CWD_VS3u.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-oFjciODD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C76WsxC3.js","snippetPresets-DvPMxpX_.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CuNQfndH.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BVFpVUoF.js","shallow-t59Jg5Kr.js","getApiPlaygroundDisplay-C_JZ4amX.js","CodeSnippet-CLRDnx_h.js","CodeSnippets-C2myU4kc.js","Page-7TwLLapg.js","getPastedJson-B-JaVXw7.js","icon-BA-iDhH3.js","MethodPill-D4qZABFp.js","DuplicateIcon-THIDKO1O.js","createIcon-CYYJwgFd.js","DynamicMarkdown-UGQuxDKp.js","SectionHeading-jYELb23h.js","axios-vUo_bRtp.js","Markdown-DKsLa3wy.js","clsx-CefdjKz2.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BaREnp3o.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-sgx_0XzF.js"]}