Swap one token for another inside a Credit Account.
Exchanges tokens the Credit Account already holds in a single atomic
transaction, so idle or borrowed balances can be converted without moving
funds out first. Returns an unsigned transaction to sign, the expected
output amount, and which route priced the swap.
POST
/
v2
/
credit
/
swap
Python (SDK)
from compass_api_sdk import CompassAPI, modelswith CompassAPI( api_key_auth="<YOUR_API_KEY_HERE>",) as compass_api: res = compass_api.credit.credit_swap(token_in="USDC", token_out="USDT", amount_in="0.01", owner="0x06A9aF046187895AcFc7258450B15397CAc67400", chain=models.CreditSwapRequestChain.BASE, slippage="0.5", gas_sponsorship=False, preview=False, pricing=models.CreditSwapRequestPricing.AUTO) # Handle response print(res)
Swap one token held in the Credit Account for another, in a single
atomic transaction, at a firm quote where one covers the pair and at market
rate otherwise.
The owner's wallet address. Their Credit Account must already exist (create it with /v2/credit/create_account) and hold token_in (deposit with /v2/credit/transfer).
Optionally request gas sponsorship. If true, EIP-712 typed data will be returned that must be signed by the owner and submitted to the 'Prepare gas-sponsored transaction' endpoint (/gas_sponsorship/prepare). Gas-sponsored builds always execute at market rate.
If true, build a display ESTIMATE: no firm RFQ quote is ever requested (quote_expires_at stays null). NOTE that this guarantees only that no firm quote was spent — it does not guarantee an absent payload: under 'auto' when the firm provider does not cover or cannot currently price the pair, and always under pricing=market, the call falls through to the aggregator and returns a signable market build (an unsigned transaction, or EIP-712 typed data when gas_sponsorship=true), without requiring the account to hold token_in yet. How the estimate is priced follows pricing: on a firm-covered pair whose size the firm provider's live price levels can serve, 'auto' and 'firm' price it from those levels (indicative, transaction stays null — re-call with preview=false for the signable build); otherwise it comes from the market build above (pricing='firm' instead refuses with a typed error). Set it on every call made while a user is exploring parameters, and leave it false only for the build they actually intend to sign — firm quotes are single-use maker commitments, and requesting them for displays that are never executed degrades the pricing this API is offered.
Swap routing policy. 'auto': a firm zero-slippage quote when a firm venue covers the pair, transparent fallback to the market aggregator otherwise. 'firm': never price on the market route; an uncovered pair fails with a typed error instead of silently substituting market pricing — previews included: a preview the firm provider's live price levels cannot price returns the same typed error rather than market numbers. 'market': never route through the firm venue; the swap is priced by the aggregator and bounded by slippage (which firm fills ignore). 'firm' is incompatible with gas_sponsorship (sponsored swaps force market routing).
Available options:
auto,
firm,
market
Example:
"auto"
Response
Successful Response
The swap transaction to sign, plus which route priced it and how long
that price holds.
Estimated amount of output token received from the swap. Exact on executable firm builds (a firm quote fills at this amount or reverts). On market builds it is a quote-time estimate, and slippage sets how far below it the transaction's enforced minimum output sits. On preview=true responses reporting 'firm' it is INDICATIVE — computed from the firm provider's live price levels without spending a quote.
Unsigned transaction for direct execution. Present when gas_sponsorship=false — except firm-priced previews (preview=true responses reporting swap_provider='firm'), which carry the estimate only: the firm quote is fetched at execution time, so there is no payload to sign yet. A preview whose response reports swap_provider='market' does carry this signable payload.
Identifies which route priced the swap. 'market': a DEX aggregator, slippage-bounded. 'firm': a zero-slippage quote that fills exactly or reverts. On preview=true responses 'firm' means the estimate is INDICATIVE, computed from live maker price levels without spending any quote; execution fetches the firm quote at signing time. Always present. This is the authoritative firm-vs-market signal and clients do need to read it: pricing is only what was REQUESTED, and under 'auto' a firm build can fall back to market transparently.
Deadline of the firm swap quote. Sign and broadcast before it or the transaction reverts on-chain; refresh by re-calling this endpoint (discard the previous payload). Null on market builds and on every preview (a preview never holds a firm quote).
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Compass API Docs","colors":{"primary":"#0284c7","light":"#0e9fe9","dark":"#0284c7"},"logo":{"light":"https://mintcdn.com/compasslabs-f07467e0/x2NrFgZ7soJbH6sc/logo/light.svg?fit=max\u0026auto=format\u0026n=x2NrFgZ7soJbH6sc\u0026q=85\u0026s=80a04b06674000990914306c6a833cb9","dark":"https://mintcdn.com/compasslabs-f07467e0/x2NrFgZ7soJbH6sc/logo/dark.svg?fit=max\u0026auto=format\u0026n=x2NrFgZ7soJbH6sc\u0026q=85\u0026s=77e910ba12605c7f004ad72498f8076f"},"favicon":"https://mintcdn.com/compasslabs-f07467e0/x2NrFgZ7soJbH6sc/favicon.svg?fit=max\u0026auto=format\u0026n=x2NrFgZ7soJbH6sc\u0026q=85\u0026s=2025e9c84a2b6b167d319b28e1ecb8a0","appearance":{"default":"light","strict":true},"navbar":{"links":[{"href":"https://calendly.com/elisabeth-compasslabs/30min","label":"Book a demo"},{"href":"https://compasslabs.ai/login","label":"Login"}]},"footer":{"socials":{"x":"https://x.com/labs_compass","github":"https://github.com/CompassLabs","linkedin":"https://www.linkedin.com/company/compass-labs-ai","medium":"https://medium.com/@compasslabs","telegram":"https://discord.com/invite/ujetyJJPYr","discord":"https://discord.com/invite/ujetyJJPYr"},"links":[{"header":"Resources","items":[{"label":"Blog","href":"https://medium.com/@compasslabs"}]},{"header":"Legal","items":[{"label":"Terms \u0026 Conditions","href":"https://docs.compasslabs.ai/v1/support/terms-and-conditions"},{"label":"Privacy Policy","href":"https://docs.compasslabs.ai/v1/support/privacy-policy"}]}]},"styling":{"eyebrows":"section","codeblocks":"system","latex":false},"integrations":{"ga4":{"measurementId":"G-EQSZ3TK15C"},"gtm":{"tagId":"GTM-5NXMZG6D"}},"contextual":{"options":["chatgpt","claude"],"display":"header"},"navigation":{"global":{"tabs":[],"anchors":[]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"compasslabs-f07467e0","hasAudioNarration":false,"actualSubdomain":"compasslabs-f07467e0","customDomains":["docs.compasslabs.ai"],"gitSource":{"type":"github","owner":"compasslabs","repo":"mono","deployBranch":"production","contentDirectory":"api_docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae4acd6d9167d81040ef5b0","collectionId":"666c01a4-bc40-4191-9a97-6c46f51ec865","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae4acd6d9167d81040ef5b0"},"feedback":{"issues":true,"edits":true,"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae4acd6d9167d81040ef5b0","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"API Reference","count":300},{"language":"default","tag":"Documentation","count":30},{"language":"default","tag":"Aave V3","count":15},{"language":"default","tag":"Credit","count":15},{"language":"default","tag":"Perpetual Trading","count":15},{"language":"default","tag":"Tokenized Assets","count":15},{"language":"default","tag":"Earn","count":13},{"language":"default","tag":"Morpho","count":12},{"language":"default","tag":"Uniswap V3","count":10},{"language":"default","tag":"Transaction Bundler","count":9}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"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":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"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":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"button.css","content":"@keyframes jump{0%,to{transform:translateY(0)}50%{transform:translateY(-20px)}}.jump-loop{animation:jump .5s ease infinite}#code-group,#content-area>div.flex.flex-col.gap-8>div.mt-6.flex.w-full.flex-col.space-y-4>div{background-color:#efefef33;box-shadow:0 4px 12px rgba(0,0,0,.08)}#code-group:hover,#content-area>div.flex.flex-col.gap-8>div.mt-6.flex.w-full.flex-col.space-y-4>div:hover{box-shadow:0 6px 18px rgba(0,0,0,.1)}"}],"page":{"pagePath":"v2/api-reference/credit/swap-tokens","slug":"/v2/api-reference/credit/swap-tokens","pageMetadata":{"title":"Swap tokens","description":"Swap one token for another inside a Credit Account.\n\nExchanges tokens the Credit Account already holds in a single atomic\ntransaction, so idle or borrowed balances can be converted without moving\nfunds out first. Returns an unsigned transaction to sign, the expected\noutput amount, and which route priced the swap.","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/credit/swap","href":"/v2/api-reference/credit/swap-tokens","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 p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Swap one token for another inside a Credit Account.\"\n }), \"\\n\", _jsx(_components.p, {\n children: \"Exchanges tokens the Credit Account already holds in a single atomic\\ntransaction, so idle or borrowed balances can be converted without moving\\nfunds out first. Returns an unsigned transaction to sign, the expected\\noutput amount, and which route priced the swap.\"\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":{"codeStyling":"system","config":{},"pageMetadata":{"title":"Swap tokens","description":"Swap one token for another inside a Credit Account.\n\nExchanges tokens the Credit Account already holds in a single atomic\ntransaction, so idle or borrowed balances can be converted without moving\nfunds out first. Returns an unsigned transaction to sign, the expected\noutput amount, and which route priced the swap.","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/credit/swap","href":"/v2/api-reference/credit/swap-tokens","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/compasslabs-f07467e0/27fd886bf35b6ed0/redeploy-trigger.js","/_mintlify/custom/compasslabs-f07467e0/5b350f94165e79a1/scripts/auth-btns.js","/_mintlify/custom/compasslabs-f07467e0/0c2ee6a003a69104/scripts/home-btn-link.js","/_mintlify/custom/compasslabs-f07467e0/17a3e2d25ff9b880/scripts/magic.js","/_mintlify/custom/compasslabs-f07467e0/2592024b81e4044f/scripts/modal.js","/_mintlify/custom/compasslabs-f07467e0/60b3db97b96f7d26/scripts/language-icon-fixer.js","/_mintlify/custom/compasslabs-f07467e0/60408501351ea2bb/scripts/disable-bundler-playground.js"],"openApiReferenceData":{"operation":{"tags":["Credit"],"summary":"Swap tokens","description":"Swap one token for another inside a Credit Account.\n\nExchanges tokens the Credit Account already holds in a single atomic\ntransaction, so idle or borrowed balances can be converted without moving\nfunds out first. Returns an unsigned transaction to sign, the expected\noutput amount, and which route priced the swap.","operationId":"v2_credit_swap","requestBody":"61508545-a3d7-49a9-ae64-cdfe73fc070a","responses":{"200":"6a5719eb-ce44-44bf-895d-46357b8494bd","422":"fafc5c5a-a7db-4b25-9cac-ef13b0033b0d"},"x-speakeasy-name-override":"credit_swap","x-codeSamples":[{"lang":"python","label":"Python (SDK)","source":"from compass_api_sdk import CompassAPI, models\n\n\nwith CompassAPI(\n api_key_auth=\"\u003cYOUR_API_KEY_HERE>\",\n) as compass_api:\n\n res = compass_api.credit.credit_swap(token_in=\"USDC\", token_out=\"USDT\", amount_in=\"0.01\", owner=\"0x06A9aF046187895AcFc7258450B15397CAc67400\", chain=models.CreditSwapRequestChain.BASE, slippage=\"0.5\", gas_sponsorship=False, preview=False, pricing=models.CreditSwapRequestPricing.AUTO)\n\n # Handle response\n print(res)"},{"lang":"typescript","label":"Typescript (SDK)","source":"import { CompassApiSDK } from \"@compass-labs/api-sdk\";\n\nconst compassApiSDK = new CompassApiSDK({\n apiKeyAuth: \"\u003cYOUR_API_KEY_HERE>\",\n});\n\nasync function run() {\n const result = await compassApiSDK.credit.creditSwap({\n tokenIn: \"USDC\",\n tokenOut: \"USDT\",\n amountIn: \"0.01\",\n slippage: \"0.5\",\n owner: \"0x06A9aF046187895AcFc7258450B15397CAc67400\",\n chain: \"base\",\n gasSponsorship: false,\n pricing: \"auto\",\n });\n\n console.log(result);\n}\n\nrun();"}],"method":"post","type":"path","servers":["247e86be-f363-49e5-ad91-b1f5b38aab79"],"security":["2b04347a-2a38-49d3-af56-889e7b086a78"],"path":"/v2/credit/swap","baseUrlOptions":["https://api.compasslabs.ai"],"title":"Swap tokens","codeSamples":[{"label":"Python (SDK)","lang":"python","source":"from compass_api_sdk import CompassAPI, models\n\n\nwith CompassAPI(\n api_key_auth=\"\u003cYOUR_API_KEY_HERE>\",\n) as compass_api:\n\n res = compass_api.credit.credit_swap(token_in=\"USDC\", token_out=\"USDT\", amount_in=\"0.01\", owner=\"0x06A9aF046187895AcFc7258450B15397CAc67400\", chain=models.CreditSwapRequestChain.BASE, slippage=\"0.5\", gas_sponsorship=False, preview=False, pricing=models.CreditSwapRequestPricing.AUTO)\n\n # Handle response\n print(res)"},{"label":"Typescript (SDK)","lang":"typescript","source":"import { CompassApiSDK } from \"@compass-labs/api-sdk\";\n\nconst compassApiSDK = new CompassApiSDK({\n apiKeyAuth: \"\u003cYOUR_API_KEY_HERE>\",\n});\n\nasync function run() {\n const result = await compassApiSDK.credit.creditSwap({\n tokenIn: \"USDC\",\n tokenOut: \"USDT\",\n amountIn: \"0.01\",\n slippage: \"0.5\",\n owner: \"0x06A9aF046187895AcFc7258450B15397CAc67400\",\n chain: \"base\",\n gasSponsorship: false,\n pricing: \"auto\",\n });\n\n console.log(result);\n}\n\nrun();"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"content":{"application/json":{"schema":{"properties":{"token_in":{"type":"string","title":"Token","description":"Token to sell (input). Provide a token symbol from a limited set (e.g., 'USDC') or any token address.","examples":["USDC","0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"],"default":"USDC","isRequired":true,"uniqueKey":"token_in","typeLabel":"string"},"token_out":{"type":"string","title":"Token","description":"Token to buy (output). Provide a token symbol from a limited set (e.g., 'USDT') or any token address.","examples":["USDT","0xdAC17F958D2ee523a2206206994597C13D831ec7"],"default":"USDT","isRequired":true,"uniqueKey":"token_out","typeLabel":"string"},"amount_in":{"oneOf":[{"type":"number","title":"Amount In","description":"Human-readable amount of `token_in` to swap (token units, not wei).","default":"0.01","minimum":0,"example":1.5,"exclusiveMinimum":true,"isRequired":true,"uniqueKey":"amount_in.oneOf.0","typeLabel":"number"},{"type":"string","title":"Amount In","description":"Human-readable amount of `token_in` to swap (token units, not wei).","default":"0.01","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","example":1.5,"isRequired":true,"uniqueKey":"amount_in.oneOf.1","typeLabel":"string"}],"isRequired":true,"uniqueKey":"amount_in","typeLabel":"number | string"},"owner":{"type":"string","title":"Owner","description":"The owner's wallet address. Their Credit Account must already exist (create it with `/v2/credit/create_account`) and hold `token_in` (deposit with `/v2/credit/transfer`).","default":"0x06A9aF046187895AcFc7258450B15397CAc67400","examples":["0x06A9aF046187895AcFc7258450B15397CAc67400"],"isRequired":true,"uniqueKey":"owner","typeLabel":"string"},"chain":{"type":"string","enum":["arbitrum","base","bsc","ethereum","hyperevm","tempo"],"title":"Chain","description":"Target blockchain network where the swap will execute.","default":"base","examples":["base"],"isRequired":true,"uniqueKey":"chain","typeLabel":"enum\u003cstring>"},"action_type":{"type":"string","const":"V2_SWAP","title":"Action Type","description":"Action type identifier for swap operations.","default":"V2_SWAP","uniqueKey":"action_type","typeLabel":"string"},"slippage":{"oneOf":[{"type":"number","title":"Slippage","description":"Maximum slippage tolerance as a percentage (e.g., 0.5 = 0.5%). Bounds the market route only; a firm quote fills exactly and ignores it.","default":"0.5","maximum":10,"minimum":0,"example":0.5,"uniqueKey":"slippage.oneOf.0","typeLabel":"number"},{"type":"string","title":"Slippage","description":"Maximum slippage tolerance as a percentage (e.g., 0.5 = 0.5%). Bounds the market route only; a firm quote fills exactly and ignores it.","default":"0.5","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","example":0.5,"uniqueKey":"slippage.oneOf.1","typeLabel":"string"}],"uniqueKey":"slippage","typeLabel":"number | string"},"gas_sponsorship":{"type":"boolean","title":"Gas Sponsorship","description":"Optionally request gas sponsorship. If `true`, EIP-712 typed data will be returned that must be signed by the `owner` and submitted to the 'Prepare gas-sponsored transaction' endpoint (`/gas_sponsorship/prepare`). Gas-sponsored builds always execute at market rate.","default":false,"examples":[false],"uniqueKey":"gas_sponsorship","typeLabel":"boolean"},"preview":{"type":"boolean","title":"Preview","description":"If true, build a display ESTIMATE: no firm RFQ quote is ever requested (quote_expires_at stays null). NOTE that this guarantees only that no firm quote was spent — it does not guarantee an absent payload: under 'auto' when the firm provider does not cover or cannot currently price the pair, and always under pricing=market, the call falls through to the aggregator and returns a signable market build (an unsigned transaction, or EIP-712 typed data when gas_sponsorship=true), without requiring the account to hold token_in yet. How the estimate is priced follows `pricing`: on a firm-covered pair whose size the firm provider's live price levels can serve, 'auto' and 'firm' price it from those levels (indicative, transaction stays null — re-call with preview=false for the signable build); otherwise it comes from the market build above (pricing='firm' instead refuses with a typed error). Set it on every call made while a user is exploring parameters, and leave it false only for the build they actually intend to sign — firm quotes are single-use maker commitments, and requesting them for displays that are never executed degrades the pricing this API is offered.","default":false,"uniqueKey":"preview","typeLabel":"boolean"},"pricing":{"type":"string","enum":["auto","firm","market"],"title":"Pricing","description":"Swap routing policy. 'auto': a firm zero-slippage quote when a firm venue covers the pair, transparent fallback to the market aggregator otherwise. 'firm': never price on the market route; an uncovered pair fails with a typed error instead of silently substituting market pricing — previews included: a preview the firm provider's live price levels cannot price returns the same typed error rather than market numbers. 'market': never route through the firm venue; the swap is priced by the aggregator and bounded by `slippage` (which firm fills ignore). 'firm' is incompatible with gas_sponsorship (sponsored swaps force market routing).","default":"auto","examples":["auto"],"uniqueKey":"pricing","typeLabel":"enum\u003cstring>"}},"type":"object","required":["token_in","token_out","amount_in","owner","chain"],"title":"CreditSwapRequest","description":"Swap one token held in the Credit Account for another, in a single\natomic transaction, at a firm quote where one covers the pair and at market\nrate otherwise.","default":{"owner":"0x06A9aF046187895AcFc7258450B15397CAc67400","chain":"base","token_in":"USDC","token_out":"USDT","amount_in":"0.01","slippage":"0.5","gas_sponsorship":false,"pricing":"auto"},"uniqueKey":"","typeLabel":"CreditSwapRequest · object"},"examples":{"Example":{"title":"Example","value":{"owner":"0x06A9aF046187895AcFc7258450B15397CAc67400","chain":"base","token_in":"USDC","token_out":"USDT","amount_in":"0.01","slippage":"0.5","gas_sponsorship":false,"pricing":"auto"}}},"exampleType":"generated"}},"required":true,"exampleType":"generated"},"responses":{"6a5719eb-ce44-44bf-895d-46357b8494bd":{"description":"Successful Response","content":{"application/json":{"schema":{"properties":{"estimated_amount_out":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Estimated Amount Out","description":"Estimated amount of output token received from the swap. Exact on executable firm builds (a firm quote fills at this amount or reverts). On market builds it is a quote-time estimate, and `slippage` sets how far below it the transaction's enforced minimum output sits. On preview=true responses reporting 'firm' it is INDICATIVE — computed from the firm provider's live price levels without spending a quote.","isRequired":true,"uniqueKey":"estimated_amount_out","typeLabel":"string"},"transaction":{"oneOf":[{"type":"object","title":"UnsignedTransaction","description":"Unsigned transaction for direct execution. Present when gas_sponsorship=false — except firm-priced previews (preview=true responses reporting swap_provider='firm'), which carry the estimate only: the firm quote is fetched at execution time, so there is no payload to sign yet. A preview whose response reports swap_provider='market' does carry this signable payload.","required":["chainId","data","from","gas","to","value","nonce","maxFeePerGas","maxPriorityFeePerGas"],"example":{"chainId":"0x2105","data":"0x1688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c762000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000675f4a3d","from":"0x4A83b4413CF41C3244027e1590E35a0F48403F0c","gas":"0x7a120","maxFeePerGas":"0x59682f00","maxPriorityFeePerGas":"0x3b9aca00","nonce":"0x5","to":"0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67","value":"0x0"},"properties":{"chainId":{"type":"string","title":"Chainid","description":"The chain id of the transaction","isRequired":true,"uniqueKey":"transaction.oneOf.0.chainId","typeLabel":"string"},"data":{"type":"string","title":"Data","description":"The data of the transaction","isRequired":true,"uniqueKey":"transaction.oneOf.0.data","typeLabel":"string"},"from":{"type":"string","title":"From","description":"The sender of the transaction","isRequired":true,"uniqueKey":"transaction.oneOf.0.from","typeLabel":"string"},"gas":{"oneOf":[{"type":"string","title":"Gas","description":"The gas of the transaction","isRequired":true,"uniqueKey":"transaction.oneOf.0.gas.oneOf.0","typeLabel":"string"},{"type":"null","title":"Gas","description":"The gas of the transaction","isRequired":true,"uniqueKey":"transaction.oneOf.0.gas.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"transaction.oneOf.0.gas","typeLabel":"string | null"},"to":{"type":"string","title":"To","description":"The recipient of the transaction","isRequired":true,"uniqueKey":"transaction.oneOf.0.to","typeLabel":"string"},"value":{"type":"string","title":"Value","description":"The value of the transaction","isRequired":true,"uniqueKey":"transaction.oneOf.0.value","typeLabel":"string"},"nonce":{"type":"string","title":"Nonce","description":"The nonce of the address","isRequired":true,"uniqueKey":"transaction.oneOf.0.nonce","typeLabel":"string"},"maxFeePerGas":{"type":"string","title":"Maxfeepergas","description":"The max fee per gas of the transaction","isRequired":true,"uniqueKey":"transaction.oneOf.0.maxFeePerGas","typeLabel":"string"},"maxPriorityFeePerGas":{"type":"string","title":"Maxpriorityfeepergas","description":"The max priority fee per gas of the transaction","isRequired":true,"uniqueKey":"transaction.oneOf.0.maxPriorityFeePerGas","typeLabel":"string"}},"uniqueKey":"transaction.oneOf.0","typeLabel":"UnsignedTransaction · object"},{"type":"null","description":"Unsigned transaction for direct execution. Present when gas_sponsorship=false — except firm-priced previews (preview=true responses reporting swap_provider='firm'), which carry the estimate only: the firm quote is fetched at execution time, so there is no payload to sign yet. A preview whose response reports swap_provider='market' does carry this signable payload.","uniqueKey":"transaction.oneOf.1","typeLabel":"null"}],"uniqueKey":"transaction","typeLabel":"UnsignedTransaction · object | null"},"eip_712":{"oneOf":[{"type":"object","title":"BatchedSafeOperationsResponse","description":"EIP-712 typed data for gas-sponsored execution. Present when gas_sponsorship=true.","required":["domain","types","primaryType","message"],"example":{"domain":{"chainId":8453,"verifyingContract":"0x6B90E8B4E3E971E74C1A47a3a20976377E2dB4b1"},"message":{"baseGas":"0","data":"0x8d80ff0a0000000000000000000000000000000000000000000000000000000000000020","gasPrice":"0","gasToken":"0x0000000000000000000000000000000000000000","nonce":"7","operation":1,"refundReceiver":"0x0000000000000000000000000000000000000000","safeTxGas":"0","to":"0x93C23AAE4793C14D6DF35D2A2A2234204e1559dA","value":"0"},"primaryType":"SafeTx","types":{"EIP712Domain":[{"name":"chainId","type":"uint256"},{"name":"verifyingContract","type":"address"}],"SafeTx":[{"name":"to","type":"address"},{"name":"value","type":"uint256"},{"name":"data","type":"bytes"},{"name":"operation","type":"uint8"},{"name":"safeTxGas","type":"uint256"},{"name":"baseGas","type":"uint256"},{"name":"gasPrice","type":"uint256"},{"name":"gasToken","type":"address"},{"name":"refundReceiver","type":"address"},{"name":"nonce","type":"uint256"}]}},"properties":{"domain":{"properties":{"chainId":{"type":"integer","title":"Chainid","description":"Chain ID","isRequired":true,"uniqueKey":"eip_712.oneOf.0.domain.chainId","typeLabel":"integer"},"verifyingContract":{"type":"string","title":"Verifyingcontract","description":"Address of the Product Account","isRequired":true,"uniqueKey":"eip_712.oneOf.0.domain.verifyingContract","typeLabel":"string"}},"type":"object","required":["chainId","verifyingContract"],"title":"EIP712Domain","description":"EIP-712 domain separator","isRequired":true,"uniqueKey":"eip_712.oneOf.0.domain","typeLabel":"EIP712Domain · object"},"types":{"properties":{"EIP712Domain":{"items":{"properties":{"name":{"type":"string","title":"Name","isRequired":true,"uniqueKey":"eip_712.oneOf.0.types.EIP712Domain.items.[INDEX].name","typeLabel":"string"},"type":{"type":"string","title":"Type","isRequired":true,"uniqueKey":"eip_712.oneOf.0.types.EIP712Domain.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["name","type"],"title":"EIP712DomainField","description":"A field in the EIP712Domain type definition.","uniqueKey":"eip_712.oneOf.0.types.EIP712Domain.items.[INDEX]","typeLabel":"EIP712DomainField · object"},"type":"array","title":"Eip712Domain","description":"EIP712Domain type definition","isRequired":true,"uniqueKey":"eip_712.oneOf.0.types.EIP712Domain","typeLabel":"EIP712DomainField · object[]"},"SafeTx":{"items":{"properties":{"name":{"type":"string","title":"Name","isRequired":true,"uniqueKey":"eip_712.oneOf.0.types.SafeTx.items.[INDEX].name","typeLabel":"string"},"type":{"type":"string","title":"Type","isRequired":true,"uniqueKey":"eip_712.oneOf.0.types.SafeTx.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["name","type"],"title":"SafeTxField","description":"A field in the SafeTx type definition.","uniqueKey":"eip_712.oneOf.0.types.SafeTx.items.[INDEX]","typeLabel":"SafeTxField · object"},"type":"array","title":"Safetx","description":"SafeTx type definition","isRequired":true,"uniqueKey":"eip_712.oneOf.0.types.SafeTx","typeLabel":"SafeTxField · object[]"}},"type":"object","required":["EIP712Domain","SafeTx"],"title":"EIP712Types","description":"EIP-712 type definitions","isRequired":true,"uniqueKey":"eip_712.oneOf.0.types","typeLabel":"EIP712Types · object"},"primaryType":{"type":"string","const":"SafeTx","title":"Primarytype","description":"Primary type for the structured data","isRequired":true,"uniqueKey":"eip_712.oneOf.0.primaryType","typeLabel":"string"},"message":{"properties":{"to":{"type":"string","title":"To","description":"Destination address","isRequired":true,"uniqueKey":"eip_712.oneOf.0.message.to","typeLabel":"string"},"value":{"type":"string","title":"Value","description":"Value in wei as a string","isRequired":true,"uniqueKey":"eip_712.oneOf.0.message.value","typeLabel":"string"},"data":{"type":"string","title":"Data","description":"Transaction data as hex string","isRequired":true,"uniqueKey":"eip_712.oneOf.0.message.data","typeLabel":"string"},"operation":{"type":"integer","enum":[0,1],"title":"OperationType","description":"Operation type (0=Call, 1=DelegateCall)","isRequired":true,"uniqueKey":"eip_712.oneOf.0.message.operation","typeLabel":"enum\u003cinteger>"},"safeTxGas":{"type":"string","title":"Safetxgas","description":"Gas for the transaction","isRequired":true,"uniqueKey":"eip_712.oneOf.0.message.safeTxGas","typeLabel":"string"},"baseGas":{"type":"string","title":"Basegas","description":"Base gas costs","isRequired":true,"uniqueKey":"eip_712.oneOf.0.message.baseGas","typeLabel":"string"},"gasPrice":{"type":"string","title":"Gasprice","description":"Gas price","isRequired":true,"uniqueKey":"eip_712.oneOf.0.message.gasPrice","typeLabel":"string"},"gasToken":{"type":"string","title":"Gastoken","description":"Token address for gas payment","isRequired":true,"uniqueKey":"eip_712.oneOf.0.message.gasToken","typeLabel":"string"},"refundReceiver":{"type":"string","title":"Refundreceiver","description":"Address to receive gas refund","isRequired":true,"uniqueKey":"eip_712.oneOf.0.message.refundReceiver","typeLabel":"string"},"nonce":{"type":"string","title":"Nonce","description":"Transaction nonce","isRequired":true,"uniqueKey":"eip_712.oneOf.0.message.nonce","typeLabel":"string"}},"type":"object","required":["to","value","data","operation","safeTxGas","baseGas","gasPrice","gasToken","refundReceiver","nonce"],"title":"SafeTxMessage","description":"Safe transaction message data","isRequired":true,"uniqueKey":"eip_712.oneOf.0.message","typeLabel":"SafeTxMessage · object"}},"uniqueKey":"eip_712.oneOf.0","typeLabel":"BatchedSafeOperationsResponse · object"},{"type":"null","description":"EIP-712 typed data for gas-sponsored execution. Present when gas_sponsorship=true.","uniqueKey":"eip_712.oneOf.1","typeLabel":"null"}],"uniqueKey":"eip_712","typeLabel":"BatchedSafeOperationsResponse · object | null"},"swap_provider":{"type":"string","enum":["market","firm"],"title":"Swap Provider","description":"Identifies which route priced the swap. 'market': a DEX aggregator, slippage-bounded. 'firm': a zero-slippage quote that fills exactly or reverts. On preview=true responses 'firm' means the estimate is INDICATIVE, computed from live maker price levels without spending any quote; execution fetches the firm quote at signing time. Always present. This is the authoritative firm-vs-market signal and clients do need to read it: `pricing` is only what was REQUESTED, and under 'auto' a firm build can fall back to market transparently.","default":"market","uniqueKey":"swap_provider","typeLabel":"enum\u003cstring>"},"quote_expires_at":{"oneOf":[{"type":"string","title":"Quote Expires At","description":"Deadline of the firm swap quote. Sign and broadcast before it or the transaction reverts on-chain; refresh by re-calling this endpoint (discard the previous payload). Null on market builds and on every preview (a preview never holds a firm quote).","format":"date-time","uniqueKey":"quote_expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Quote Expires At","description":"Deadline of the firm swap quote. Sign and broadcast before it or the transaction reverts on-chain; refresh by re-calling this endpoint (discard the previous payload). Null on market builds and on every preview (a preview never holds a firm quote).","uniqueKey":"quote_expires_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"quote_expires_at","typeLabel":"string\u003cdate-time> | null"}},"type":"object","required":["estimated_amount_out"],"title":"CreditSwapResponse","description":"The swap transaction to sign, plus which route priced it and how long\nthat price holds.","example":{"estimated_amount_out":"2485.123456","swap_provider":"market","transaction":{"chainId":"0x2105","data":"0x8d80ff0a0000000000000000000000000000000000000000000000000000000000000020","from":"0x4A83b4413CF41C3244027e1590E35a0F48403F0c","gas":"0x7a120","maxFeePerGas":"0x59682f00","maxPriorityFeePerGas":"0x3b9aca00","nonce":"0x5","to":"0x6B90E8B4E3E971E74C1A47a3a20976377E2dB4b1","value":"0x0"}},"uniqueKey":"","typeLabel":"CreditSwapResponse · object"},"examples":{"Example":{"title":"Example","value":{"estimated_amount_out":"2485.123456","swap_provider":"market","transaction":{"chainId":"0x2105","data":"0x8d80ff0a0000000000000000000000000000000000000000000000000000000000000020","from":"0x4A83b4413CF41C3244027e1590E35a0F48403F0c","gas":"0x7a120","maxFeePerGas":"0x59682f00","maxPriorityFeePerGas":"0x3b9aca00","nonce":"0x5","to":"0x6B90E8B4E3E971E74C1A47a3a20976377E2dB4b1","value":"0x0"}}}},"exampleType":"generated"}},"exampleType":"generated"},"fafc5c5a-a7db-4b25-9cac-ef13b0033b0d":{"description":"Validation Error","content":{"application/json":{"schema":{"properties":{"detail":{"items":{"properties":{"loc":{"items":{"oneOf":[{"type":"string","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"detail.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"detail.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"type":"array","title":"Location","isRequired":true,"uniqueKey":"detail.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"type":"string","title":"Message","isRequired":true,"uniqueKey":"detail.items.[INDEX].msg","typeLabel":"string"},"type":{"type":"string","title":"Error Type","isRequired":true,"uniqueKey":"detail.items.[INDEX].type","typeLabel":"string"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError","uniqueKey":"detail.items.[INDEX]","typeLabel":"ValidationError · object"},"type":"array","title":"Detail","uniqueKey":"detail","typeLabel":"ValidationError · object[]"}},"type":"object","title":"HTTPValidationError","uniqueKey":"","typeLabel":"HTTPValidationError · object"},"examples":{"Example":{"title":"Example","value":{"detail":[{"loc":["\u003cstring>"],"msg":"\u003cstring>","type":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"2b04347a-2a38-49d3-af56-889e7b086a78":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your Compass API Key. Get your key [here](https://www.compasslabs.ai/dashboard).","scopes":[],"schemeName":"ApiKeyAuth"}}},"servers":{"247e86be-f363-49e5-ad91-b1f5b38aab79":{"url":"https://api.compasslabs.ai","description":"Production server"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","description":"Your Compass API Key. Get your key [here](https://www.compasslabs.ai/dashboard).","scopes":[],"schemeName":"ApiKeyAuth"},"schema":{"title":"x-api-key","type":"string","description":"Your Compass API Key. Get your key [here](https://www.compasslabs.ai/dashboard).","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"x-api-key"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"v2/combined_spec.json"},"subdomain":"compasslabs-f07467e0","siteName":"Compass API Docs","title":"Swap tokens - Compass API Docs","navMaps":{"firstHrefInVersion":{"V2":{"href":"/v2/api-reference/credit/swap-tokens","matchLevel":0},"V1":{"href":"/v1/api-reference/aave-v3/aave-supported-tokens","matchLevel":2}},"firstHrefInLanguage":{}},"lastModified":"2026-10-30T14:42:44.497Z","originalFileLocation":"v2/api-reference/credit/swap-tokens.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";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=\"light\"}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=\"Swap one token for another inside a Credit Account. Exchanges tokens the Credit Account already holds in a single atomic transaction, so idle or borrowed balances can be converted without moving funds out first. Returns an unsigned transaction to sign, the expected output amount, and which route priced the swap.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Compass API 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/compasslabs-f07467e0/CejAEahS9T_GZmf_/_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/compasslabs-f07467e0/CejAEahS9T_GZmf_/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/compasslabs-f07467e0/CejAEahS9T_GZmf_/_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/compasslabs-f07467e0/CejAEahS9T_GZmf_/_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/compasslabs-f07467e0/CejAEahS9T_GZmf_/_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/compasslabs-f07467e0/CejAEahS9T_GZmf_/_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/compasslabs-f07467e0/CejAEahS9T_GZmf_/_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/compasslabs-f07467e0/CejAEahS9T_GZmf_/_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/compasslabs-f07467e0/CejAEahS9T_GZmf_/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Swap tokens - Compass API Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Swap one token for another inside a Credit Account. Exchanges tokens the Credit Account already holds in a single atomic transaction, so idle or borrowed balances can be converted without moving funds out first. Returns an unsigned transaction to sign, the expected output amount, and which route priced the swap.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Compass API Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.compasslabs.ai/v2/api-reference/credit/swap-tokens\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://compasslabs-f07467e0.mintlify.app/_mintlify/api/og/v2?division=Credit\u0026amp;title=Swap+tokens\u0026amp;description=Swap+one+token+for+another+inside+a+Credit+Account.%0A%0AExchanges+tokens+the+Credit+Account+already+holds+in+a+single+atomic%0Atransaction%2C+so+idle+or+borrowed+balan\u0026amp;theme=2e6095874381ba0da4ce66d4\u0026amp;signature=0e8a39934c8def38a4632feef985145ffc8473b592a8c94848b363fe00b97f7d\">\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=\"Swap tokens - Compass API Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Swap one token for another inside a Credit Account. Exchanges tokens the Credit Account already holds in a single atomic transaction, so idle or borrowed balances can be converted without moving funds out first. Returns an unsigned transaction to sign, the expected output amount, and which route priced the swap.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://compasslabs-f07467e0.mintlify.app/_mintlify/api/og/v2?division=Credit\u0026amp;title=Swap+tokens\u0026amp;description=Swap+one+token+for+another+inside+a+Credit+Account.%0A%0AExchanges+tokens+the+Credit+Account+already+holds+in+a+single+atomic%0Atransaction%2C+so+idle+or+borrowed+balan\u0026amp;theme=2e6095874381ba0da4ce66d4\u0026amp;signature=0e8a39934c8def38a4632feef985145ffc8473b592a8c94848b363fe00b97f7d\">\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/compasslabs-f07467e0/CejAEahS9T_GZmf_/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Compass API Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0284c7\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.compasslabs.ai/v2/api-reference/credit/swap-tokens\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v2/api-reference/credit/swap-tokens.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.compasslabs.ai/#organization\",\"name\":\"Compass API Docs\",\"url\":\"https://docs.compasslabs.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/compasslabs-f07467e0/x2NrFgZ7soJbH6sc/logo/light.svg?fit=max\u0026auto=format\u0026n=x2NrFgZ7soJbH6sc\u0026q=85\u0026s=80a04b06674000990914306c6a833cb9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.compasslabs.ai#website\",\"name\":\"Compass API Docs\",\"url\":\"https://docs.compasslabs.ai\",\"publisher\":{\"@id\":\"https://docs.compasslabs.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.compasslabs.ai/v2/api-reference/credit/swap-tokens#webpage\",\"url\":\"https://docs.compasslabs.ai/v2/api-reference/credit/swap-tokens\",\"name\":\"Swap tokens\",\"description\":\"Swap one token for another inside a Credit Account. Exchanges tokens the Credit Account already holds in a single atomic transaction, so idle or borrowed balances can be converted without moving funds out first. Returns an unsigned transaction to sign, the expected output amount, and which route priced the swap.\",\"dateModified\":\"2026-10-30T14:42:44.497Z\",\"isPartOf\":{\"@id\":\"https://docs.compasslabs.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.compasslabs.ai/v2/api-reference/credit/swap-tokens#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.compasslabs.ai/v2/api-reference/credit/swap-tokens#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.compasslabs.ai/v2/api-reference/gas-sponsorship/prepare-gas-sponsored-transaction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Credit\",\"item\":\"https://docs.compasslabs.ai/v2/api-reference/credit/list-credit-positions\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Swap tokens\",\"item\":\"https://docs.compasslabs.ai/v2/api-reference/credit/swap-tokens\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.compasslabs.ai/v2/api-reference/credit/swap-tokens#apireference\",\"headline\":\"Swap tokens\",\"name\":\"Swap tokens\",\"description\":\"Swap one token for another inside a Credit Account. Exchanges tokens the Credit Account already holds in a single atomic transaction, so idle or borrowed balances can be converted without moving funds out first. Returns an unsigned transaction to sign, the expected output amount, and which route priced the swap.\",\"url\":\"https://docs.compasslabs.ai/v2/api-reference/credit/swap-tokens\",\"mainEntityOfPage\":{\"@id\":\"https://docs.compasslabs.ai/v2/api-reference/credit/swap-tokens#webpage\"},\"dateModified\":\"2026-10-30T14:42:44.497Z\",\"publisher\":{\"@id\":\"https://docs.compasslabs.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.compasslabs.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Compass API Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Compass API Docs","nav":{"global":{"tabs":[],"anchors":[]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/v2/get_started/overview"}]},{"tab":"API Reference","versions":[{"version":"V2","groups":[{"group":"API Reference","pages":[{"group":"Gas Sponsorship","pages":[{"title":"Prepare gas-sponsored transaction","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/gas_sponsorship/prepare","href":"/v2/api-reference/gas-sponsorship/prepare-gas-sponsored-transaction"},{"title":"Approve token transfer","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/gas_sponsorship/approve_transfer","href":"/v2/api-reference/gas-sponsorship/approve-token-transfer"}]},{"group":"Earn","pages":[{"title":"List earn positions","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/earn/positions","href":"/v2/api-reference/earn/list-earn-positions"},{"title":"List earn positions across all chains","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/earn/positions_all","href":"/v2/api-reference/earn/list-earn-positions-across-all-chains"},{"title":"List vaults","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/earn/vaults","href":"/v2/api-reference/earn/list-vaults"},{"title":"List aave markets","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/earn/aave_markets","href":"/v2/api-reference/earn/list-aave-markets"},{"title":"List pendle markets","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/earn/pendle_markets","href":"/v2/api-reference/earn/list-pendle-markets"},{"title":"List maple pools","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/earn/maple_pools","href":"/v2/api-reference/earn/list-maple-pools"},{"title":"Quote a swap","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/earn/swap_quote","href":"/v2/api-reference/earn/quote-a-swap"},{"title":"Get token balances","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/earn/balances","href":"/v2/api-reference/earn/get-token-balances"},{"title":"Create earn account","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/earn/create_account","href":"/v2/api-reference/earn/create-earn-account"},{"title":"Transfer tokens to/from account","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/earn/transfer","href":"/v2/api-reference/earn/transfer-tokens-tofrom-account"},{"title":"Manage earn position","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/earn/manage","href":"/v2/api-reference/earn/manage-earn-position"},{"title":"Swap tokens","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/earn/swap","href":"/v2/api-reference/earn/swap-tokens"},{"title":"Execute multiple earn actions","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/earn/bundle","href":"/v2/api-reference/earn/execute-multiple-earn-actions"}]},{"group":"Bridge","pages":[{"title":"Initiate USDC bridging","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/cctp/burn","href":"/v2/api-reference/bridge/initiate-usdc-bridging"},{"title":"Complete USDC bridging","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/cctp/mint","href":"/v2/api-reference/bridge/complete-usdc-bridging"}]},{"group":"Credit","pages":[{"title":"List credit positions","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/credit/positions","href":"/v2/api-reference/credit/list-credit-positions"},{"title":"Get credit account token balances","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/credit/balances","href":"/v2/api-reference/credit/get-credit-account-token-balances"},{"title":"List looped (leveraged) credit positions","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/credit/looped_positions","href":"/v2/api-reference/credit/list-looped-leveraged-credit-positions"},{"title":"List Euler markets","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/credit/euler_markets","href":"/v2/api-reference/credit/list-euler-markets"},{"title":"List Morpho markets","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/credit/morpho_markets","href":"/v2/api-reference/credit/list-morpho-markets"},{"title":"List Aave markets","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/credit/aave_markets","href":"/v2/api-reference/credit/list-aave-markets"},{"title":"Create credit account","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/credit/create_account","href":"/v2/api-reference/credit/create-credit-account"},{"title":"Borrow against collateral","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/credit/borrow","href":"/v2/api-reference/credit/borrow-against-collateral"},{"title":"Open a leveraged loop","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/credit/loop","href":"/v2/api-reference/credit/open-a-leveraged-loop"},{"title":"Unwind a leveraged loop","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/credit/unloop","href":"/v2/api-reference/credit/unwind-a-leveraged-loop"},{"title":"Rebalance the leveraged credit book","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/credit/rebalance","href":"/v2/api-reference/credit/rebalance-the-leveraged-credit-book"},{"title":"Transfer tokens to/from Credit Account","description":"Transfer tokens between the owner's EOA and their Credit Account.\n\n**DEPOSIT** (EOA → Credit Account):\n- With `gas_sponsorship=true`: returns Permit2 EIP-712 typed data to sign. The gas sponsor\n calls `permitTransferFrom` to pull tokens (1 signature).\n- With `gas_sponsorship=false`: returns an unsigned ERC-20 transfer transaction.\n\n**WITHDRAW** (Credit Account → EOA):\n- With `gas_sponsorship=true`: returns SafeTx EIP-712 typed data to sign. The gas sponsor\n broadcasts the `execTransaction` (1 signature).\n- With `gas_sponsorship=false`: returns an unsigned `execTransaction`.","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/credit/transfer","href":"/v2/api-reference/credit/transfer-tokens-tofrom-credit-account"},{"title":"Swap tokens","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/credit/swap","href":"/v2/api-reference/credit/swap-tokens"},{"title":"Repay debt and withdraw collateral","description":"Repay an Aave debt and withdraw collateral from a Credit Account.\n\nBundles repayment, collateral withdrawal, and an optional swap into a single atomic Safe transaction.\n\n- If `token_out` is None or equals `withdraw_token`, the withdrawn collateral is kept as-is.\n- If `token_out` differs from `withdraw_token`, a market swap is performed after withdrawal.\n\nThe Credit Account must already have a borrow position created via `/v2/credit/borrow`.\nThe repay_token must be available in the Credit Account (or pulled from EOA via Permit2).","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/credit/repay","href":"/v2/api-reference/credit/repay-debt-and-withdraw-collateral"},{"title":"Execute multiple credit actions","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/credit/bundle","href":"/v2/api-reference/credit/execute-multiple-credit-actions"}]},{"group":"Perpetual Trading","pages":[{"title":"List perpetual trading markets","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/perpetual_trading/opportunities","href":"/v2/api-reference/perpetual-trading/list-perpetual-trading-markets"},{"title":"List perpetual trading positions","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/perpetual_trading/positions","href":"/v2/api-reference/perpetual-trading/list-perpetual-trading-positions"},{"title":"Get OHLCV candles","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/perpetual_trading/candles","href":"/v2/api-reference/perpetual-trading/get-ohlcv-candles"},{"title":"Aggregated Hyperliquid activity for a user","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/perpetual_trading/activity","href":"/v2/api-reference/perpetual-trading/aggregated-hyperliquid-activity-for-a-user"},{"title":"Deposit USDC to perpetual trading account","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/perpetual_trading/deposit","href":"/v2/api-reference/perpetual-trading/deposit-usdc-to-perpetual-trading-account"},{"title":"Build the Bridge2 deposit tx from a signed permit","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/perpetual_trading/deposit/sponsor_prepare","href":"/v2/api-reference/perpetual-trading/build-the-bridge2-deposit-tx-from-a-signed-permit"},{"title":"Withdraw USDC from perpetual trading account","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/perpetual_trading/withdraw","href":"/v2/api-reference/perpetual-trading/withdraw-usdc-from-perpetual-trading-account"},{"title":"Place market order","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/perpetual_trading/market_order","href":"/v2/api-reference/perpetual-trading/place-market-order"},{"title":"Place limit order","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/perpetual_trading/limit_order","href":"/v2/api-reference/perpetual-trading/place-limit-order"},{"title":"Cancel order","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/perpetual_trading/cancel_order","href":"/v2/api-reference/perpetual-trading/cancel-order"},{"title":"Execute signed action","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/perpetual_trading/execute","href":"/v2/api-reference/perpetual-trading/execute-signed-action"},{"title":"Approve builder fee","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/perpetual_trading/approve_builder_fee","href":"/v2/api-reference/perpetual-trading/approve-builder-fee"},{"title":"Enable unified account mode","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/perpetual_trading/enable_unified_account","href":"/v2/api-reference/perpetual-trading/enable-unified-account-mode"},{"title":"Ensure 1x cross leverage","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/perpetual_trading/ensure_leverage","href":"/v2/api-reference/perpetual-trading/ensure-1x-cross-leverage"},{"title":"Set leverage (defaults to market maximum)","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/perpetual_trading/set_leverage","href":"/v2/api-reference/perpetual-trading/set-leverage-defaults-to-market-maximum"}]},{"group":"Tokenized Assets","pages":[{"title":"List markets","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/tokenized_assets/markets","href":"/v2/api-reference/tokenized-assets/list-markets"},{"title":"Get a market","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/tokenized_assets/markets/{symbol}","href":"/v2/api-reference/tokenized-assets/get-a-market"},{"title":"List positions","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/tokenized_assets/positions","href":"/v2/api-reference/tokenized-assets/list-positions"},{"title":"Get token balances","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/tokenized_assets/balances","href":"/v2/api-reference/tokenized-assets/get-token-balances"},{"title":"Get order status","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/tokenized_assets/order/{order_hash}","href":"/v2/api-reference/tokenized-assets/get-order-status"},{"title":"List redemption requests","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json get /v2/tokenized_assets/redemptions","href":"/v2/api-reference/tokenized-assets/list-redemption-requests"},{"title":"Create account","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/tokenized_assets/create_account","href":"/v2/api-reference/tokenized-assets/create-account"},{"title":"Transfer tokens to/from account","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/tokenized_assets/transfer","href":"/v2/api-reference/tokenized-assets/transfer-tokens-tofrom-account"},{"title":"Quote an order","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/tokenized_assets/quote","href":"/v2/api-reference/tokenized-assets/quote-an-order"},{"title":"Build an order","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/tokenized_assets/order","href":"/v2/api-reference/tokenized-assets/build-an-order"},{"title":"Submit a signed order","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/tokenized_assets/order/submit","href":"/v2/api-reference/tokenized-assets/submit-a-signed-order"},{"title":"Cancel an order","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/tokenized_assets/order/{order_hash}/cancel","href":"/v2/api-reference/tokenized-assets/cancel-an-order"},{"title":"Charge a partner fee","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/tokenized_assets/order/{order_hash}/charge_fee","href":"/v2/api-reference/tokenized-assets/charge-a-partner-fee"},{"title":"Buy an RWA yield token","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/tokenized_assets/transact/buy","href":"/v2/api-reference/tokenized-assets/buy-an-rwa-yield-token"},{"title":"Sell an RWA yield token","deprecated":null,"version":null,"openapi":"/v2/combined_spec.json post /v2/tokenized_assets/transact/sell","href":"/v2/api-reference/tokenized-assets/sell-an-rwa-yield-token"}]}]}]},{"version":"V1","pages":[{"title":"V1","href":"/v1/api-reference/aave-v3/aave-supported-tokens"}]}]}]},"basePath":"","title":"Swap tokens - Compass API Docs","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CS552b7R.js","utils-DDTCYAF2.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-De8ttokP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-DrwRDvAh.js","snippetPresets-DtAN0nWx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D5rWArI6.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-O2i12wsz.js","shallow-DV8xABTt.js","getApiPlaygroundDisplay-DBZ0B5Jx.js","CodeSnippet-BVi0tPUX.js","CodeSnippets-CqASbIwY.js","Page-m07pfKpT.js","getPastedJson-DG9vsMS8.js","icon-CXzRSCr8.js","MethodPill-BdKVtEuX.js","DuplicateIcon-CZlmBrJI.js","createIcon-biFEUKPL.js","DynamicMarkdown-B54_zNBF.js","SectionHeading-DwwHK3Pt.js","axios-vUo_bRtp.js","Markdown-DfhCTwyA.js","clsx-xpJZXxdP.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BTZUMDnx.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-DqdKa2R4.js"]}