Optional API key: Bearer vulcx_.... Anonymous calls are allowed but capped at a small per-IP rate limit — see Rate limits.
Example:
"Bearer vulcx_..."
Body
application/json
Parameters for building the route instruction as a CPI target. Like InstructionsRequest, but the signer is a calling program's PDA (the on-chain authority that will invoke_signed into route) rather than a wallet.
Route corridor: multi-hop routes may only pass through these mints, closing the requiredTokenAccounts set over ATAs you pre-provisioned. Input and output mints are implicitly allowed. Empty/omitted = unrestricted.
Optional referrer wallet (base58). Receives integratorFeeBps in full, paid on-chain in the output token in the same transaction as the swap. Required whenever integratorFeeBps is set.
Your own fee rate in basis points of the output, kept by you in full. Requires referrer — a rate with no wallet to pay it to returns 400. Added to platformFeeBps, not carved out of it; the sum may not exceed 100 bps.
The route instruction shaped for a CPI caller. Forward routeInstruction.accounts into your program's route CPI and sign with the PDA seeds. requiredTokenAccounts are the ATAs the authority PDA must own and fund before the CPI runs — this builder emits no ATA-create or wrap/unwrap instructions.
Show child attributes
Last modified on September 7, 2026
{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"Vulcx","description":"Swap aggregator API for SVM chains. Best-price multi-hop routing, firm quotes, and on-chain CPI composability. Live on Fogo, Solana support in progress.","colors":{"primary":"#FF4F1F","light":"#FF7A52","dark":"#D93D10"},"logo":{"light":"https://mintcdn.com/argyros/qjH8lfqukkZVYYA9/logo/light.svg?fit=max\u0026auto=format\u0026n=qjH8lfqukkZVYYA9\u0026q=85\u0026s=fe690e12b297bd136d1440abf10928a1","dark":"https://mintcdn.com/argyros/qjH8lfqukkZVYYA9/logo/dark.svg?fit=max\u0026auto=format\u0026n=qjH8lfqukkZVYYA9\u0026q=85\u0026s=61aa5f4995a3be23fe3e75370077702c"},"favicon":"https://mintcdn.com/argyros/qjH8lfqukkZVYYA9/favicon.svg?fit=max\u0026auto=format\u0026n=qjH8lfqukkZVYYA9\u0026q=85\u0026s=80394d18ce3c17dd9e85cc99163ade19","api":{"asyncapi":"api-reference/asyncapi.json","playground":{"proxy":false}},"appearance":{"default":"dark","strict":true},"background":{"color":{"light":"#ffffff","dark":"#000000"}},"navbar":{"primary":{"type":"button","label":"Get API key","href":"https://portal.vulcx.xyz"}},"footer":{"socials":{"x":"https://x.com/vulcx_xyz","github":"https://github.com/vulcx","telegram":"https://t.me/vulcxsupport"}},"seo":{"metatags":{"og:type":"website","og:site_name":"Vulcx Docs","og:locale":"en_US","og:image":"https://vulcx.xyz/assets/og.png","twitter:card":"summary_large_image","twitter:image":"https://vulcx.xyz/assets/og.png","msvalidate.01":"D0649C9A3D18AD8578956ADCD7C927AB"},"indexing":"navigable"},"fonts":{"heading":{"family":"Geist","weight":600},"body":{"family":"Geist","weight":400}},"styling":{"codeblocks":{"theme":"github-dark"},"latex":false},"contextual":{"options":["copy","view","chatgpt","claude","cursor"],"display":"header"},"metadata":{"timestamp":true},"navigation":{"global":{"anchors":[{"anchor":"Support","icon":"telegram","href":"https://t.me/vulcxsupport"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"argyros","hasAudioNarration":false,"actualSubdomain":"argyros","customDomains":["docs.vulcx.xyz"],"gitSource":{"type":"github","owner":"vulcx","repo":"vulcx-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ab2089d15c8881f0176d0ee","collectionId":"6397f80b-47a8-43ce-b409-2856697c8514","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ab2089d15c8881f0176d0ee"},"feedback":{"thumbs":false,"agentFeedback":true},"entitlements":{},"buildId":"6ab2089d15c8881f0176d0ee","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"SDK","count":16},{"language":"default","tag":"Docs","count":11},{"language":"default","tag":"API Reference","count":10},{"language":"default","tag":"Get Started","count":10},{"language":"default","tag":"Guides","count":8},{"language":"default","tag":"Endpoints","count":7},{"language":"default","tag":"Swap","count":7},{"language":"default","tag":"Concepts","count":4},{"language":"default","tag":"Overview","count":3},{"language":"default","tag":"AI","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"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":"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},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"::selection{background:rgba(244, 112, 38, 0.28);color:#fff}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2{letter-spacing:-0.02em}body::after{content:\"\";position:fixed;inset:0;background-image:url(\"data:image/svg+xml;utf8,\u003csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'>\u003cfilter id='n'>\u003cfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/>\u003cfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.5 0'/>\u003c/filter>\u003crect width='100%' height='100%' filter='url(%23n)'/>\u003c/svg>\");opacity:0.04;mix-blend-mode:overlay;pointer-events:none;z-index:0}a[class*=\"bg-primary\"],button[class*=\"bg-primary\"]{background-image:linear-gradient(135deg, #FD944C, #B03118)!important;color:#08080a!important}#sidebar a:hover,nav[aria-label=\"Sidebar\"] a:hover{background-color:rgba(244, 112, 38, 0.07);border-radius:8px}#sidebar a[aria-current=\"page\"],nav[aria-label=\"Sidebar\"] a[aria-current=\"page\"]{background-color:rgba(244, 112, 38, 0.12);color:#ffffff;border-radius:8px}hr{border-color:rgba(244, 112, 38, 0.12)}"}],"page":{"pagePath":"api-reference/cpi-route-accounts/index","slug":"/api-reference/cpi-route-accounts/index","pageMetadata":{"title":"CPI Route Accounts","description":"POST /api/v1/cpi/route-accounts — Build the route instruction for another program to call via CPI, signed by its PDA.","llmDescription":"OpenAPI reference for POST /api/v1/cpi/route-accounts on the Vulcx API (SVM chains; live on Fogo, Solana in progress). Builds the `route` instruction shaped for a Cross-Program Invocation: the request supplies a calling program's PDA as the swap authority (signer, readonly) instead of a wallet. Response returns a single RouteInstruction (RawInstruction with accounts/data) to forward into the program's route CPI and sign with invoke_signed, plus requiredTokenAccounts (ATAs the PDA must own and fund — no ATA-create or wrap/unwrap instructions are emitted) and addressLookupTableAddresses for a v0 transaction. Split routes are not yet supported (422). Beta. Interactive playground included.","openapi":"POST /api/v1/cpi/route-accounts","href":"/api-reference/cpi-route-accounts/index"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"POST /api/v1/cpi/route-accounts — Build the route instruction for another program to call via CPI, signed by its PDA.\"\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":{"theme":"github-dark"},"config":{},"pageMetadata":{"title":"CPI Route Accounts","description":"POST /api/v1/cpi/route-accounts — Build the route instruction for another program to call via CPI, signed by its PDA.","llmDescription":"OpenAPI reference for POST /api/v1/cpi/route-accounts on the Vulcx API (SVM chains; live on Fogo, Solana in progress). Builds the `route` instruction shaped for a Cross-Program Invocation: the request supplies a calling program's PDA as the swap authority (signer, readonly) instead of a wallet. Response returns a single RouteInstruction (RawInstruction with accounts/data) to forward into the program's route CPI and sign with invoke_signed, plus requiredTokenAccounts (ATAs the PDA must own and fund — no ATA-create or wrap/unwrap instructions are emitted) and addressLookupTableAddresses for a v0 transaction. Split routes are not yet supported (422). Beta. Interactive playground included.","openapi":"POST /api/v1/cpi/route-accounts","href":"/api-reference/cpi-route-accounts/index"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"buildRouteCpiAccounts","summary":"Get CPI account list for calling route from another program","description":"POST /api/v1/cpi/route-accounts — Build the route instruction for another program to call via CPI, signed by its PDA.","tags":["CPI"],"security":[],"parameters":["c5818978-a9bd-46e4-99e1-0beaab9a4874"],"requestBody":"2f439ab2-af59-412b-9731-e197cd4f011f","responses":{"200":"d62c9fc9-5fce-43f8-ab4d-043cc6014fc1","400":"e04c93c7-367b-4766-92b2-83bfad12328d","403":"3b82d0d5-746c-4c6b-b45b-1f887904d2f6","404":"49c68300-43b4-4a1b-9445-dabc6088dd03","422":"ba362be2-e4c3-45e7-93c6-14273e834cfa","429":"e54fcbef-8873-488d-8708-407dc90fd116","500":"09584c3f-fb94-4fdb-9b90-463b25b49404"},"method":"post","type":"path","servers":["ad775b95-ba76-4dcd-8365-8e1a9f14b2e3"],"path":"/api/v1/cpi/route-accounts","baseUrlOptions":["https://api.vulcx.xyz"],"title":"Get CPI account list for calling route from another program","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated","disableProxy":true},"dependencies":{"parameters":{"c5818978-a9bd-46e4-99e1-0beaab9a4874":{"name":"Authorization","in":"header","required":false,"description":"Optional API key: `Bearer vulcx_...`. Anonymous calls are allowed but capped at a small per-IP rate limit — see [Rate limits](/api-reference/rate-limits).","schema":{"type":"string","example":"Bearer vulcx_...","isRequired":false,"description":"Optional API key: `Bearer vulcx_...`. Anonymous calls are allowed but capped at a small per-IP rate limit — see [Rate limits](/api-reference/rate-limits).","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Parameters for building the `route` instruction as a CPI target. Like InstructionsRequest, but the signer is a calling program's PDA (the on-chain authority that will `invoke_signed` into `route`) rather than a wallet.","properties":{"authority":{"type":"string","description":"The calling program's PDA authority — owns the token accounts and signs the swap via invoke_signed inside the integrating program.","example":"EJxE7RDaP5pmoVzzHRb4fufCNq3wsCgdUbJ8PCXHZNUP","isRequired":true,"uniqueKey":"authority","typeLabel":"string"},"inputMint":{"type":"string","example":"So11111111111111111111111111111111111111112","isRequired":true,"uniqueKey":"inputMint","typeLabel":"string"},"outputMint":{"type":"string","example":"uSd2czE61Evaf76RNbq4KPpXnkiL3irdzgLFUMe3NoG","isRequired":true,"uniqueKey":"outputMint","typeLabel":"string"},"amount":{"type":"string","description":"Amount in the smallest token units.","example":"1000000000","isRequired":true,"uniqueKey":"amount","typeLabel":"string"},"swapMode":{"type":"string","enum":["ExactIn","ExactOut"],"example":"ExactIn","isRequired":true,"uniqueKey":"swapMode","typeLabel":"enum\u003cstring>"},"slippageBps":{"type":"integer","default":50,"example":50,"uniqueKey":"slippageBps","typeLabel":"integer"},"allowedIntermediateMints":{"type":"array","items":{"type":"string","uniqueKey":"allowedIntermediateMints.items.[INDEX]","typeLabel":"string"},"maxItems":16,"description":"Route corridor: multi-hop routes may only pass through these mints, closing the requiredTokenAccounts set over ATAs you pre-provisioned. Input and output mints are implicitly allowed. Empty/omitted = unrestricted.","example":["So11111111111111111111111111111111111111112"],"uniqueKey":"allowedIntermediateMints","typeLabel":"string[]"},"maxHops":{"type":"integer","description":"Cap on route length (1 = direct pools only). 0/omitted = server default.","example":2,"uniqueKey":"maxHops","typeLabel":"integer"},"referrer":{"type":"string","description":"Optional referrer wallet (base58). Receives `integratorFeeBps` in full, paid on-chain in the output token in the same transaction as the swap. Required whenever integratorFeeBps is set.","example":"EJxE7RDaP5pmoVzzHRb4fufCNq3wsCgdUbJ8PCXHZNUP","uniqueKey":"referrer","typeLabel":"string"},"integratorFeeBps":{"type":"integer","description":"Your own fee rate in basis points of the output, kept by you in full. Requires `referrer` — a rate with no wallet to pay it to returns 400. Added to platformFeeBps, not carved out of it; the sum may not exceed 100 bps.","example":20,"minimum":0,"maximum":100,"uniqueKey":"integratorFeeBps","typeLabel":"integer"}},"required":["authority","inputMint","outputMint","amount","swapMode"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"authority":"EJxE7RDaP5pmoVzzHRb4fufCNq3wsCgdUbJ8PCXHZNUP","inputMint":"So11111111111111111111111111111111111111112","outputMint":"uSd2czE61Evaf76RNbq4KPpXnkiL3irdzgLFUMe3NoG","amount":"1000000000","swapMode":"ExactIn","slippageBps":50,"allowedIntermediateMints":["So11111111111111111111111111111111111111112"],"maxHops":2,"referrer":"EJxE7RDaP5pmoVzzHRb4fufCNq3wsCgdUbJ8PCXHZNUP","integratorFeeBps":20}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"d62c9fc9-5fce-43f8-ab4d-043cc6014fc1":{"description":"Route CPI account list built successfully.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true,"uniqueKey":"success","typeLabel":"boolean"},"data":{"type":"object","description":"The `route` instruction shaped for a CPI caller. Forward `routeInstruction.accounts` into your program's `route` CPI and sign with the PDA seeds. `requiredTokenAccounts` are the ATAs the authority PDA must own and fund before the CPI runs — this builder emits no ATA-create or wrap/unwrap instructions.","properties":{"authority":{"type":"string","description":"The calling program's PDA that owns the token accounts and signs the swap. Echoed back for clarity.","example":"EJxE7RDaP5pmoVzzHRb4fufCNq3wsCgdUbJ8PCXHZNUP","isRequired":true,"uniqueKey":"data.authority","typeLabel":"string"},"amountIn":{"type":"string","example":"1000000000","isRequired":true,"uniqueKey":"data.amountIn","typeLabel":"string"},"amountOut":{"type":"string","example":"145320000","isRequired":true,"uniqueKey":"data.amountOut","typeLabel":"string"},"otherAmountThreshold":{"type":"string","description":"Slippage-adjusted threshold. ExactIn: minimum output. ExactOut: maximum input.","example":"144593400","isRequired":true,"uniqueKey":"data.otherAmountThreshold","typeLabel":"string"},"feeAmount":{"type":"string","example":"100005","description":"DEX pool trading fee across every hop, in the pool's fee token — the LP fee the pools take, not Vulcx's. Vulcx's own cut is platformFeeAmount.","isRequired":true,"uniqueKey":"data.feeAmount","typeLabel":"string"},"platformFeeBps":{"type":"integer","example":0,"description":"Vulcx's fee rate in basis points of the output amount. One rate for every caller, from the on-chain protocol config. 0 when the protocol fee is disabled on-chain.","isRequired":true,"uniqueKey":"data.platformFeeBps","typeLabel":"integer"},"platformFeeAmount":{"type":"string","example":"0","description":"platformFeeBps applied to amountOut, in the output token's smallest units.","isRequired":true,"uniqueKey":"data.platformFeeAmount","typeLabel":"string"},"route":{"type":"array","items":{"type":"string","uniqueKey":"data.route.items.[INDEX]","typeLabel":"string"},"description":"Token path from input to output.","isRequired":true,"uniqueKey":"data.route","typeLabel":"string[]"},"hopCount":{"type":"integer","example":1,"isRequired":true,"uniqueKey":"data.hopCount","typeLabel":"integer"},"pools":{"type":"array","items":{"type":"string","uniqueKey":"data.pools.items.[INDEX]","typeLabel":"string"},"description":"Pool addresses used in the route.","isRequired":true,"uniqueKey":"data.pools","typeLabel":"string[]"},"routeInstruction":{"type":"object","description":"The Vulcx `route` instruction to CPI into. Its account list is the ordered set the calling program must forward (authority is marked signer, readonly).","properties":{"programId":{"type":"string","description":"Base58-encoded program ID.","isRequired":true,"uniqueKey":"data.routeInstruction.programId","typeLabel":"string"},"data":{"type":"string","description":"Base64-encoded instruction data.","isRequired":true,"uniqueKey":"data.routeInstruction.data","typeLabel":"string"},"accounts":{"type":"array","items":{"type":"object","properties":{"publicKey":{"type":"string","description":"Base58-encoded account public key.","isRequired":true,"uniqueKey":"data.routeInstruction.accounts.items.[INDEX].publicKey","typeLabel":"string"},"isSigner":{"type":"boolean","isRequired":true,"uniqueKey":"data.routeInstruction.accounts.items.[INDEX].isSigner","typeLabel":"boolean"},"isWritable":{"type":"boolean","isRequired":true,"uniqueKey":"data.routeInstruction.accounts.items.[INDEX].isWritable","typeLabel":"boolean"}},"required":["publicKey","isSigner","isWritable"],"uniqueKey":"data.routeInstruction.accounts.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"data.routeInstruction.accounts","typeLabel":"object[]"}},"required":["programId","data","accounts"],"isRequired":true,"uniqueKey":"data.routeInstruction","typeLabel":"object"},"requiredTokenAccounts":{"type":"array","items":{"type":"string","uniqueKey":"data.requiredTokenAccounts.items.[INDEX]","typeLabel":"string"},"description":"ATAs owned by the authority PDA that must exist and hold the input funds before the CPI runs. Ordered [inputMint, ...intermediates, outputMint].","isRequired":true,"uniqueKey":"data.requiredTokenAccounts","typeLabel":"string[]"},"addressLookupTableAddresses":{"type":"array","items":{"type":"string","uniqueKey":"data.addressLookupTableAddresses.items.[INDEX]","typeLabel":"string"},"description":"Address Lookup Table addresses that compress accounts in routeInstruction.","isRequired":true,"uniqueKey":"data.addressLookupTableAddresses","typeLabel":"string[]"},"referrerAta":{"type":"string","description":"The referrer's output-mint ATA appended to the account list when the request carried a referrer. Must exist before the CPI runs — the on-chain referral transfer fails otherwise.","uniqueKey":"data.referrerAta","typeLabel":"string"},"integratorFeeBps":{"type":"integer","description":"The caller's own fee rate, kept by them IN FULL. Independent of platformFeeBps — the two ADD and are not a split. Their sum is capped at 100 bps.","example":20,"uniqueKey":"data.integratorFeeBps","typeLabel":"integer"},"integratorFeeAmount":{"type":"string","description":"integratorFeeBps applied to amountOut, in the output token's smallest units, paid on-chain to the referrer wallet.","example":"29064","uniqueKey":"data.integratorFeeAmount","typeLabel":"string"}},"required":["authority","amountIn","amountOut","otherAmountThreshold","feeAmount","platformFeeBps","platformFeeAmount","route","hopCount","pools","routeInstruction","requiredTokenAccounts","addressLookupTableAddresses"],"uniqueKey":"data","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"data":{"authority":"EJxE7RDaP5pmoVzzHRb4fufCNq3wsCgdUbJ8PCXHZNUP","amountIn":"1000000000","amountOut":"145320000","otherAmountThreshold":"144593400","feeAmount":"100005","platformFeeBps":0,"platformFeeAmount":"0","route":["\u003cstring>"],"hopCount":1,"pools":["\u003cstring>"],"routeInstruction":{"programId":"\u003cstring>","data":"\u003cstring>","accounts":[{"publicKey":"\u003cstring>","isSigner":true,"isWritable":true}]},"requiredTokenAccounts":["\u003cstring>"],"addressLookupTableAddresses":["\u003cstring>"],"referrerAta":"\u003cstring>","integratorFeeBps":20,"integratorFeeAmount":"29064"}}}},"exampleType":"generated"}},"exampleType":"generated"},"e04c93c7-367b-4766-92b2-83bfad12328d":{"description":"Invalid request parameters, or a split route that CPI does not yet support.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","example":"no route found","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine-readable reason. THIS is the contract: a code is never renamed or reused for a different meaning once shipped, and new ones may be added — treat an unrecognised code as its HTTP status class. `error` is the human sentence and may be reworded at any time; do not branch on it. Absent on responses from before codes existed, and on the admin debug routes.","enum":["INVALID_REQUEST","INVALID_WALLET","FEE_CAP_EXCEEDED","FEE_NEEDS_REFERRER","EXACT_OUT_MULTIHOP","EXACT_OUT_DEX","SESSION_ROUTE_UNSUP","QUOTE_MISMATCH","MISSING_API_KEY","INVALID_API_KEY","ORIGIN_REQUIRED","ORIGIN_NOT_ALLOWED","QUOTE_WRONG_KEY","NO_POOL","POOL_DATA_MISSING","NO_ROUTE","NO_ROUTE_CONSTRAINED","QUOTE_STALE","SIM_SLIPPAGE","SIM_INSUFFICIENT","QUOTE_EXPIRED","ROUTE_TOO_LARGE","CPI_SPLIT_UNSUP","SIM_FAILED","RATE_LIMITED","INTERNAL"],"example":"NO_ROUTE","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Present on some failures and carrying whatever the caller needs to act. On a `/swap` or `/instructions` rejection whose simulation failed (400, 409, 422) it holds `simulation`, whose `insufficientFunds` and `slippageExceeded` booleans are the only stable machine-readable signal for why — branch on those rather than on the `error` string, which is prose and may be reworded.","properties":{"simulation":{"type":"object","description":"Transaction simulation result.","properties":{"success":{"type":"boolean","example":true,"isRequired":true,"uniqueKey":"data.simulation.success","typeLabel":"boolean"},"logs":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.logs.items.[INDEX]","typeLabel":"string"},"description":"Simulation log messages.","isRequired":true,"uniqueKey":"data.simulation.logs","typeLabel":"string[]"},"computeUnitsConsumed":{"type":"integer","description":"Compute units consumed during simulation.","example":85000,"isRequired":true,"uniqueKey":"data.simulation.computeUnitsConsumed","typeLabel":"integer"},"insufficientFunds":{"type":"boolean","description":"True if the wallet has insufficient funds for the swap.","isRequired":true,"uniqueKey":"data.simulation.insufficientFunds","typeLabel":"boolean"},"slippageExceeded":{"type":"boolean","description":"True if the price moved beyond slippage tolerance.","isRequired":true,"uniqueKey":"data.simulation.slippageExceeded","typeLabel":"boolean"},"error":{"type":"string","description":"Error message if simulation failed.","uniqueKey":"data.simulation.error","typeLabel":"string"},"computeUnitsTotal":{"type":"integer","description":"Total compute units the transaction is budgeted for, when the server computed it.","example":90000,"uniqueKey":"data.simulation.computeUnitsTotal","typeLabel":"integer"},"accountsNeeded":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.accountsNeeded.items.[INDEX]","typeLabel":"string"},"description":"Accounts the simulation found missing. Present only when it failed for that reason.","uniqueKey":"data.simulation.accountsNeeded","typeLabel":"string[]"}},"required":["success","logs","computeUnitsConsumed","insufficientFunds","slippageExceeded"],"uniqueKey":"data.simulation","typeLabel":"object"}},"uniqueKey":"data","typeLabel":"object"}},"required":["success","error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":false,"error":"no route found","code":"NO_ROUTE","data":{"simulation":{"success":true,"logs":["\u003cstring>"],"computeUnitsConsumed":85000,"insufficientFunds":true,"slippageExceeded":true,"error":"\u003cstring>","computeUnitsTotal":90000,"accountsNeeded":["\u003cstring>"]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"3b82d0d5-746c-4c6b-b45b-1f887904d2f6":{"description":"The API key is invalid, disabled, revoked, or blocked by its origin allowlist.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","example":"no route found","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine-readable reason. THIS is the contract: a code is never renamed or reused for a different meaning once shipped, and new ones may be added — treat an unrecognised code as its HTTP status class. `error` is the human sentence and may be reworded at any time; do not branch on it. Absent on responses from before codes existed, and on the admin debug routes.","enum":["INVALID_REQUEST","INVALID_WALLET","FEE_CAP_EXCEEDED","FEE_NEEDS_REFERRER","EXACT_OUT_MULTIHOP","EXACT_OUT_DEX","SESSION_ROUTE_UNSUP","QUOTE_MISMATCH","MISSING_API_KEY","INVALID_API_KEY","ORIGIN_REQUIRED","ORIGIN_NOT_ALLOWED","QUOTE_WRONG_KEY","NO_POOL","POOL_DATA_MISSING","NO_ROUTE","NO_ROUTE_CONSTRAINED","QUOTE_STALE","SIM_SLIPPAGE","SIM_INSUFFICIENT","QUOTE_EXPIRED","ROUTE_TOO_LARGE","CPI_SPLIT_UNSUP","SIM_FAILED","RATE_LIMITED","INTERNAL"],"example":"NO_ROUTE","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Present on some failures and carrying whatever the caller needs to act. On a `/swap` or `/instructions` rejection whose simulation failed (400, 409, 422) it holds `simulation`, whose `insufficientFunds` and `slippageExceeded` booleans are the only stable machine-readable signal for why — branch on those rather than on the `error` string, which is prose and may be reworded.","properties":{"simulation":{"type":"object","description":"Transaction simulation result.","properties":{"success":{"type":"boolean","example":true,"isRequired":true,"uniqueKey":"data.simulation.success","typeLabel":"boolean"},"logs":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.logs.items.[INDEX]","typeLabel":"string"},"description":"Simulation log messages.","isRequired":true,"uniqueKey":"data.simulation.logs","typeLabel":"string[]"},"computeUnitsConsumed":{"type":"integer","description":"Compute units consumed during simulation.","example":85000,"isRequired":true,"uniqueKey":"data.simulation.computeUnitsConsumed","typeLabel":"integer"},"insufficientFunds":{"type":"boolean","description":"True if the wallet has insufficient funds for the swap.","isRequired":true,"uniqueKey":"data.simulation.insufficientFunds","typeLabel":"boolean"},"slippageExceeded":{"type":"boolean","description":"True if the price moved beyond slippage tolerance.","isRequired":true,"uniqueKey":"data.simulation.slippageExceeded","typeLabel":"boolean"},"error":{"type":"string","description":"Error message if simulation failed.","uniqueKey":"data.simulation.error","typeLabel":"string"},"computeUnitsTotal":{"type":"integer","description":"Total compute units the transaction is budgeted for, when the server computed it.","example":90000,"uniqueKey":"data.simulation.computeUnitsTotal","typeLabel":"integer"},"accountsNeeded":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.accountsNeeded.items.[INDEX]","typeLabel":"string"},"description":"Accounts the simulation found missing. Present only when it failed for that reason.","uniqueKey":"data.simulation.accountsNeeded","typeLabel":"string[]"}},"required":["success","logs","computeUnitsConsumed","insufficientFunds","slippageExceeded"],"uniqueKey":"data.simulation","typeLabel":"object"}},"uniqueKey":"data","typeLabel":"object"}},"required":["success","error"],"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"error":"invalid api key"},"examples":{"Example":{"title":"Example","value":{"success":false,"error":"invalid api key"}}},"exampleType":"examples"}},"exampleType":"examples"},"49c68300-43b4-4a1b-9445-dabc6088dd03":{"description":"No route found between the tokens.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","example":"no route found","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine-readable reason. THIS is the contract: a code is never renamed or reused for a different meaning once shipped, and new ones may be added — treat an unrecognised code as its HTTP status class. `error` is the human sentence and may be reworded at any time; do not branch on it. Absent on responses from before codes existed, and on the admin debug routes.","enum":["INVALID_REQUEST","INVALID_WALLET","FEE_CAP_EXCEEDED","FEE_NEEDS_REFERRER","EXACT_OUT_MULTIHOP","EXACT_OUT_DEX","SESSION_ROUTE_UNSUP","QUOTE_MISMATCH","MISSING_API_KEY","INVALID_API_KEY","ORIGIN_REQUIRED","ORIGIN_NOT_ALLOWED","QUOTE_WRONG_KEY","NO_POOL","POOL_DATA_MISSING","NO_ROUTE","NO_ROUTE_CONSTRAINED","QUOTE_STALE","SIM_SLIPPAGE","SIM_INSUFFICIENT","QUOTE_EXPIRED","ROUTE_TOO_LARGE","CPI_SPLIT_UNSUP","SIM_FAILED","RATE_LIMITED","INTERNAL"],"example":"NO_ROUTE","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Present on some failures and carrying whatever the caller needs to act. On a `/swap` or `/instructions` rejection whose simulation failed (400, 409, 422) it holds `simulation`, whose `insufficientFunds` and `slippageExceeded` booleans are the only stable machine-readable signal for why — branch on those rather than on the `error` string, which is prose and may be reworded.","properties":{"simulation":{"type":"object","description":"Transaction simulation result.","properties":{"success":{"type":"boolean","example":true,"isRequired":true,"uniqueKey":"data.simulation.success","typeLabel":"boolean"},"logs":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.logs.items.[INDEX]","typeLabel":"string"},"description":"Simulation log messages.","isRequired":true,"uniqueKey":"data.simulation.logs","typeLabel":"string[]"},"computeUnitsConsumed":{"type":"integer","description":"Compute units consumed during simulation.","example":85000,"isRequired":true,"uniqueKey":"data.simulation.computeUnitsConsumed","typeLabel":"integer"},"insufficientFunds":{"type":"boolean","description":"True if the wallet has insufficient funds for the swap.","isRequired":true,"uniqueKey":"data.simulation.insufficientFunds","typeLabel":"boolean"},"slippageExceeded":{"type":"boolean","description":"True if the price moved beyond slippage tolerance.","isRequired":true,"uniqueKey":"data.simulation.slippageExceeded","typeLabel":"boolean"},"error":{"type":"string","description":"Error message if simulation failed.","uniqueKey":"data.simulation.error","typeLabel":"string"},"computeUnitsTotal":{"type":"integer","description":"Total compute units the transaction is budgeted for, when the server computed it.","example":90000,"uniqueKey":"data.simulation.computeUnitsTotal","typeLabel":"integer"},"accountsNeeded":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.accountsNeeded.items.[INDEX]","typeLabel":"string"},"description":"Accounts the simulation found missing. Present only when it failed for that reason.","uniqueKey":"data.simulation.accountsNeeded","typeLabel":"string[]"}},"required":["success","logs","computeUnitsConsumed","insufficientFunds","slippageExceeded"],"uniqueKey":"data.simulation","typeLabel":"object"}},"uniqueKey":"data","typeLabel":"object"}},"required":["success","error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":false,"error":"no route found","code":"NO_ROUTE","data":{"simulation":{"success":true,"logs":["\u003cstring>"],"computeUnitsConsumed":85000,"insufficientFunds":true,"slippageExceeded":true,"error":"\u003cstring>","computeUnitsTotal":90000,"accountsNeeded":["\u003cstring>"]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"ba362be2-e4c3-45e7-93c6-14273e834cfa":{"description":"Route shape not supported for CPI: either a split route (not yet supported for CPI) or too many accounts for one transaction.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","example":"no route found","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine-readable reason. THIS is the contract: a code is never renamed or reused for a different meaning once shipped, and new ones may be added — treat an unrecognised code as its HTTP status class. `error` is the human sentence and may be reworded at any time; do not branch on it. Absent on responses from before codes existed, and on the admin debug routes.","enum":["INVALID_REQUEST","INVALID_WALLET","FEE_CAP_EXCEEDED","FEE_NEEDS_REFERRER","EXACT_OUT_MULTIHOP","EXACT_OUT_DEX","SESSION_ROUTE_UNSUP","QUOTE_MISMATCH","MISSING_API_KEY","INVALID_API_KEY","ORIGIN_REQUIRED","ORIGIN_NOT_ALLOWED","QUOTE_WRONG_KEY","NO_POOL","POOL_DATA_MISSING","NO_ROUTE","NO_ROUTE_CONSTRAINED","QUOTE_STALE","SIM_SLIPPAGE","SIM_INSUFFICIENT","QUOTE_EXPIRED","ROUTE_TOO_LARGE","CPI_SPLIT_UNSUP","SIM_FAILED","RATE_LIMITED","INTERNAL"],"example":"NO_ROUTE","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Present on some failures and carrying whatever the caller needs to act. On a `/swap` or `/instructions` rejection whose simulation failed (400, 409, 422) it holds `simulation`, whose `insufficientFunds` and `slippageExceeded` booleans are the only stable machine-readable signal for why — branch on those rather than on the `error` string, which is prose and may be reworded.","properties":{"simulation":{"type":"object","description":"Transaction simulation result.","properties":{"success":{"type":"boolean","example":true,"isRequired":true,"uniqueKey":"data.simulation.success","typeLabel":"boolean"},"logs":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.logs.items.[INDEX]","typeLabel":"string"},"description":"Simulation log messages.","isRequired":true,"uniqueKey":"data.simulation.logs","typeLabel":"string[]"},"computeUnitsConsumed":{"type":"integer","description":"Compute units consumed during simulation.","example":85000,"isRequired":true,"uniqueKey":"data.simulation.computeUnitsConsumed","typeLabel":"integer"},"insufficientFunds":{"type":"boolean","description":"True if the wallet has insufficient funds for the swap.","isRequired":true,"uniqueKey":"data.simulation.insufficientFunds","typeLabel":"boolean"},"slippageExceeded":{"type":"boolean","description":"True if the price moved beyond slippage tolerance.","isRequired":true,"uniqueKey":"data.simulation.slippageExceeded","typeLabel":"boolean"},"error":{"type":"string","description":"Error message if simulation failed.","uniqueKey":"data.simulation.error","typeLabel":"string"},"computeUnitsTotal":{"type":"integer","description":"Total compute units the transaction is budgeted for, when the server computed it.","example":90000,"uniqueKey":"data.simulation.computeUnitsTotal","typeLabel":"integer"},"accountsNeeded":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.accountsNeeded.items.[INDEX]","typeLabel":"string"},"description":"Accounts the simulation found missing. Present only when it failed for that reason.","uniqueKey":"data.simulation.accountsNeeded","typeLabel":"string[]"}},"required":["success","logs","computeUnitsConsumed","insufficientFunds","slippageExceeded"],"uniqueKey":"data.simulation","typeLabel":"object"}},"uniqueKey":"data","typeLabel":"object"}},"required":["success","error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":false,"error":"no route found","code":"NO_ROUTE","data":{"simulation":{"success":true,"logs":["\u003cstring>"],"computeUnitsConsumed":85000,"insufficientFunds":true,"slippageExceeded":true,"error":"\u003cstring>","computeUnitsTotal":90000,"accountsNeeded":["\u003cstring>"]}}}}},"exampleType":"generated"}},"exampleType":"generated"},"e54fcbef-8873-488d-8708-407dc90fd116":{"description":"Rate limit exceeded for this API key's plan.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","example":"no route found","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine-readable reason. THIS is the contract: a code is never renamed or reused for a different meaning once shipped, and new ones may be added — treat an unrecognised code as its HTTP status class. `error` is the human sentence and may be reworded at any time; do not branch on it. Absent on responses from before codes existed, and on the admin debug routes.","enum":["INVALID_REQUEST","INVALID_WALLET","FEE_CAP_EXCEEDED","FEE_NEEDS_REFERRER","EXACT_OUT_MULTIHOP","EXACT_OUT_DEX","SESSION_ROUTE_UNSUP","QUOTE_MISMATCH","MISSING_API_KEY","INVALID_API_KEY","ORIGIN_REQUIRED","ORIGIN_NOT_ALLOWED","QUOTE_WRONG_KEY","NO_POOL","POOL_DATA_MISSING","NO_ROUTE","NO_ROUTE_CONSTRAINED","QUOTE_STALE","SIM_SLIPPAGE","SIM_INSUFFICIENT","QUOTE_EXPIRED","ROUTE_TOO_LARGE","CPI_SPLIT_UNSUP","SIM_FAILED","RATE_LIMITED","INTERNAL"],"example":"NO_ROUTE","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Present on some failures and carrying whatever the caller needs to act. On a `/swap` or `/instructions` rejection whose simulation failed (400, 409, 422) it holds `simulation`, whose `insufficientFunds` and `slippageExceeded` booleans are the only stable machine-readable signal for why — branch on those rather than on the `error` string, which is prose and may be reworded.","properties":{"simulation":{"type":"object","description":"Transaction simulation result.","properties":{"success":{"type":"boolean","example":true,"isRequired":true,"uniqueKey":"data.simulation.success","typeLabel":"boolean"},"logs":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.logs.items.[INDEX]","typeLabel":"string"},"description":"Simulation log messages.","isRequired":true,"uniqueKey":"data.simulation.logs","typeLabel":"string[]"},"computeUnitsConsumed":{"type":"integer","description":"Compute units consumed during simulation.","example":85000,"isRequired":true,"uniqueKey":"data.simulation.computeUnitsConsumed","typeLabel":"integer"},"insufficientFunds":{"type":"boolean","description":"True if the wallet has insufficient funds for the swap.","isRequired":true,"uniqueKey":"data.simulation.insufficientFunds","typeLabel":"boolean"},"slippageExceeded":{"type":"boolean","description":"True if the price moved beyond slippage tolerance.","isRequired":true,"uniqueKey":"data.simulation.slippageExceeded","typeLabel":"boolean"},"error":{"type":"string","description":"Error message if simulation failed.","uniqueKey":"data.simulation.error","typeLabel":"string"},"computeUnitsTotal":{"type":"integer","description":"Total compute units the transaction is budgeted for, when the server computed it.","example":90000,"uniqueKey":"data.simulation.computeUnitsTotal","typeLabel":"integer"},"accountsNeeded":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.accountsNeeded.items.[INDEX]","typeLabel":"string"},"description":"Accounts the simulation found missing. Present only when it failed for that reason.","uniqueKey":"data.simulation.accountsNeeded","typeLabel":"string[]"}},"required":["success","logs","computeUnitsConsumed","insufficientFunds","slippageExceeded"],"uniqueKey":"data.simulation","typeLabel":"object"}},"uniqueKey":"data","typeLabel":"object"}},"required":["success","error"],"uniqueKey":"","typeLabel":"object"},"example":{"success":false,"error":"rate limit exceeded"},"examples":{"Example":{"title":"Example","value":{"success":false,"error":"rate limit exceeded"}}},"exampleType":"examples"}},"exampleType":"examples"},"09584c3f-fb94-4fdb-9b90-463b25b49404":{"description":"Failed to build the account list.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":false,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"error":{"type":"string","example":"no route found","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine-readable reason. THIS is the contract: a code is never renamed or reused for a different meaning once shipped, and new ones may be added — treat an unrecognised code as its HTTP status class. `error` is the human sentence and may be reworded at any time; do not branch on it. Absent on responses from before codes existed, and on the admin debug routes.","enum":["INVALID_REQUEST","INVALID_WALLET","FEE_CAP_EXCEEDED","FEE_NEEDS_REFERRER","EXACT_OUT_MULTIHOP","EXACT_OUT_DEX","SESSION_ROUTE_UNSUP","QUOTE_MISMATCH","MISSING_API_KEY","INVALID_API_KEY","ORIGIN_REQUIRED","ORIGIN_NOT_ALLOWED","QUOTE_WRONG_KEY","NO_POOL","POOL_DATA_MISSING","NO_ROUTE","NO_ROUTE_CONSTRAINED","QUOTE_STALE","SIM_SLIPPAGE","SIM_INSUFFICIENT","QUOTE_EXPIRED","ROUTE_TOO_LARGE","CPI_SPLIT_UNSUP","SIM_FAILED","RATE_LIMITED","INTERNAL"],"example":"NO_ROUTE","uniqueKey":"code","typeLabel":"enum\u003cstring>"},"data":{"type":"object","description":"Present on some failures and carrying whatever the caller needs to act. On a `/swap` or `/instructions` rejection whose simulation failed (400, 409, 422) it holds `simulation`, whose `insufficientFunds` and `slippageExceeded` booleans are the only stable machine-readable signal for why — branch on those rather than on the `error` string, which is prose and may be reworded.","properties":{"simulation":{"type":"object","description":"Transaction simulation result.","properties":{"success":{"type":"boolean","example":true,"isRequired":true,"uniqueKey":"data.simulation.success","typeLabel":"boolean"},"logs":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.logs.items.[INDEX]","typeLabel":"string"},"description":"Simulation log messages.","isRequired":true,"uniqueKey":"data.simulation.logs","typeLabel":"string[]"},"computeUnitsConsumed":{"type":"integer","description":"Compute units consumed during simulation.","example":85000,"isRequired":true,"uniqueKey":"data.simulation.computeUnitsConsumed","typeLabel":"integer"},"insufficientFunds":{"type":"boolean","description":"True if the wallet has insufficient funds for the swap.","isRequired":true,"uniqueKey":"data.simulation.insufficientFunds","typeLabel":"boolean"},"slippageExceeded":{"type":"boolean","description":"True if the price moved beyond slippage tolerance.","isRequired":true,"uniqueKey":"data.simulation.slippageExceeded","typeLabel":"boolean"},"error":{"type":"string","description":"Error message if simulation failed.","uniqueKey":"data.simulation.error","typeLabel":"string"},"computeUnitsTotal":{"type":"integer","description":"Total compute units the transaction is budgeted for, when the server computed it.","example":90000,"uniqueKey":"data.simulation.computeUnitsTotal","typeLabel":"integer"},"accountsNeeded":{"type":"array","items":{"type":"string","uniqueKey":"data.simulation.accountsNeeded.items.[INDEX]","typeLabel":"string"},"description":"Accounts the simulation found missing. Present only when it failed for that reason.","uniqueKey":"data.simulation.accountsNeeded","typeLabel":"string[]"}},"required":["success","logs","computeUnitsConsumed","insufficientFunds","slippageExceeded"],"uniqueKey":"data.simulation","typeLabel":"object"}},"uniqueKey":"data","typeLabel":"object"}},"required":["success","error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":false,"error":"no route found","code":"NO_ROUTE","data":{"simulation":{"success":true,"logs":["\u003cstring>"],"computeUnitsConsumed":85000,"insufficientFunds":true,"slippageExceeded":true,"error":"\u003cstring>","computeUnitsTotal":90000,"accountsNeeded":["\u003cstring>"]}}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{},"servers":{"ad775b95-ba76-4dcd-8365-8e1a9f14b2e3":{"url":"https://api.vulcx.xyz","description":"Production"}}},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"argyros","siteName":"Vulcx","title":"CPI Route Accounts - Vulcx","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-06T14:20:05.958Z","gitLastModified":"2026-09-07T13:09:36.000Z","originalFileLocation":"api-reference/cpi-route-accounts/index.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";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=\"POST /api/v1/cpi/route-accounts — Build the route instruction for another program to call via CPI, signed by its PDA.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Vulcx\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/argyros/qhGJzGal7LqQA8kf/_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/argyros/qhGJzGal7LqQA8kf/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/argyros/qhGJzGal7LqQA8kf/_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/argyros/qhGJzGal7LqQA8kf/_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/argyros/qhGJzGal7LqQA8kf/_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/argyros/qhGJzGal7LqQA8kf/_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/argyros/qhGJzGal7LqQA8kf/_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/argyros/qhGJzGal7LqQA8kf/_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/argyros/qhGJzGal7LqQA8kf/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"CPI Route Accounts - Vulcx\">\u003cmeta data-mint-head property=\"og:description\" content=\"POST /api/v1/cpi/route-accounts — Build the route instruction for another program to call via CPI, signed by its PDA.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Vulcx Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.vulcx.xyz/api-reference/cpi-route-accounts\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://vulcx.xyz/assets/og.png\">\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=\"CPI Route Accounts - Vulcx\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"POST /api/v1/cpi/route-accounts — Build the route instruction for another program to call via CPI, signed by its PDA.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://vulcx.xyz/assets/og.png\">\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/argyros/qhGJzGal7LqQA8kf/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Vulcx\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF4F1F\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003cmeta data-mint-head name=\"msvalidate.01\" content=\"D0649C9A3D18AD8578956ADCD7C927AB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.vulcx.xyz/api-reference/cpi-route-accounts\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/cpi-route-accounts/index.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.vulcx.xyz/#organization\",\"name\":\"Vulcx\",\"url\":\"https://docs.vulcx.xyz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/argyros/qjH8lfqukkZVYYA9/logo/light.svg?fit=max\u0026auto=format\u0026n=qjH8lfqukkZVYYA9\u0026q=85\u0026s=fe690e12b297bd136d1440abf10928a1\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.vulcx.xyz#website\",\"name\":\"Vulcx\",\"url\":\"https://docs.vulcx.xyz\",\"publisher\":{\"@id\":\"https://docs.vulcx.xyz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.vulcx.xyz/api-reference/cpi-route-accounts#webpage\",\"url\":\"https://docs.vulcx.xyz/api-reference/cpi-route-accounts\",\"name\":\"CPI Route Accounts\",\"description\":\"POST /api/v1/cpi/route-accounts — Build the route instruction for another program to call via CPI, signed by its PDA.\",\"dateModified\":\"2026-09-07T13:09:36.000Z\",\"isPartOf\":{\"@id\":\"https://docs.vulcx.xyz#website\"},\"breadcrumb\":{\"@id\":\"https://docs.vulcx.xyz/api-reference/cpi-route-accounts#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.vulcx.xyz/api-reference/cpi-route-accounts#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.vulcx.xyz/api-reference/quote/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CPI Route Accounts\",\"item\":\"https://docs.vulcx.xyz/api-reference/cpi-route-accounts\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.vulcx.xyz/api-reference/cpi-route-accounts#apireference\",\"headline\":\"CPI Route Accounts\",\"name\":\"CPI Route Accounts\",\"description\":\"POST /api/v1/cpi/route-accounts — Build the route instruction for another program to call via CPI, signed by its PDA.\",\"url\":\"https://docs.vulcx.xyz/api-reference/cpi-route-accounts\",\"mainEntityOfPage\":{\"@id\":\"https://docs.vulcx.xyz/api-reference/cpi-route-accounts#webpage\"},\"image\":\"https://vulcx.xyz/assets/og.png\",\"dateModified\":\"2026-09-07T13:09:36.000Z\",\"publisher\":{\"@id\":\"https://docs.vulcx.xyz/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.vulcx.xyz#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Vulcx\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Vulcx","nav":{"global":{"anchors":[{"anchor":"Support","icon":"telegram","href":"https://t.me/vulcxsupport"}]},"tabs":[{"tab":"Get Started","pages":[{"title":"Get Started","href":"/get-started/introduction"}]},{"tab":"Docs","pages":[{"title":"Docs","href":"/docs/swap/overview"}]},{"tab":"SDK","pages":[{"title":"SDK","href":"/sdk/quickstart"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"Vulcx API reference — quote, swap \u0026 instructions","sidebarTitle":"Introduction","href":"/api-reference/introduction"},{"title":"Rate Limits","href":"/api-reference/rate-limits"},{"title":"Error Codes","href":"/api-reference/errors"}]},{"group":"Endpoints","pages":[{"title":"Get Quote","openapi":"GET /api/v1/quote","href":"/api-reference/quote/index"},{"title":"Build Swap","openapi":"POST /api/v1/swap","href":"/api-reference/swap/index"},{"title":"Get Instructions","description":"POST /api/v1/instructions — Get raw instructions for custom transaction composition.","openapi":"POST /api/v1/instructions","href":"/api-reference/instructions/index"},{"title":"CPI Route Accounts","openapi":"POST /api/v1/cpi/route-accounts","href":"/api-reference/cpi-route-accounts/index"},{"title":"Stream Quotes","description":"WS /api/v1/stream — Subscribe to live swap quotes over WebSocket and receive a push whenever the price changes.","asyncapi":"api-reference/stream/api-reference/asyncapi.json stream","href":"/api-reference/stream/index"},{"title":"Get Price","openapi":"GET /api/v1/price/{mint}","href":"/api-reference/price/index"},{"title":"Health Check","openapi":"GET /health","href":"/api-reference/health/index"}]}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/executing-swaps"}]},{"tab":"AI","pages":[{"title":"AI","href":"/ai/overview"}]},{"tab":"Updates","pages":[{"title":"Updates","href":"/updates"}]}]},"basePath":"","title":"CPI Route Accounts - Vulcx","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","Page-CxAy5y67.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js","Markdown-CpxgzsKA.js","clsx-C5EfhVm0.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CJ9Oly2E.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Mk6P3qvh.js"]}