Destination address on the output chain. Only required by routes whose approval step signs the destination, currently HyperCore withdrawals. Format follows the output chain, so it is not restricted to EVM.
Messages to sign instead of sending an approval transaction, when the token and provider both support it. Pass the signed results to signatures on Create exchange.
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Houdini documentation","colors":{"primary":"#A955F7","light":"#A955F7","dark":"#6D19BB"},"logo":{"light":"https://mintcdn.com/houdini/1qxWMAnpbp51-Yh3/logo/wordmark-black.svg?fit=max\u0026auto=format\u0026n=1qxWMAnpbp51-Yh3\u0026q=85\u0026s=835e11b4170923b979bdf1ba4cb302b8","dark":"https://mintcdn.com/houdini/1qxWMAnpbp51-Yh3/logo/wordmark-white.svg?fit=max\u0026auto=format\u0026n=1qxWMAnpbp51-Yh3\u0026q=85\u0026s=93f5cefb108d85fa5bf5397fa325f004"},"favicon":"https://mintcdn.com/houdini/J_K5qV0WwrgjImSc/favicon.svg?fit=max\u0026auto=format\u0026n=J_K5qV0WwrgjImSc\u0026q=85\u0026s=590f308a0168b015c97bd34e59347cc6","appearance":{"default":"dark"},"background":{"decoration":"gradient"},"footer":{"socials":{"x":"https://x.com/HoudiniSwap","github":"https://github.com/HoudiniSwap"}},"fonts":{"family":"Inter"},"integrations":{"posthog":{"apiKey":"phc_w4HfQH4UqlUBDknwuvTDJMJLJ9CpshxIwzH3eZFa32c","apiHost":"https://api4.houdiniswap.com"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"houdini","hasAudioNarration":false,"actualSubdomain":"houdini","customDomains":["docs.houdiniswap.com"],"gitSource":{"type":"github","owner":"houdiniswap","repo":"docs-v2","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adf551c362b83303f22ca3e","collectionId":"21cee0d4-33ce-4bea-ac75-bfa3750b351e","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adf551c362b83303f22ca3e"},"entitlements":{},"buildId":"6adf551c362b83303f22ca3e","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"API V2 Reference ","count":41},{"language":"default","tag":"Developer Hub","count":23},{"language":"default","tag":"Overview","count":16},{"language":"default","tag":"Multi-Exchange","count":9},{"language":"default","tag":"On-chain DEX or Bridge","count":9},{"language":"default","tag":"Partner Account","count":9},{"language":"default","tag":"Swap Flow Guides","count":8},{"language":"default","tag":"Private and Standard Swaps","count":5},{"language":"default","tag":"Core Concepts","count":5},{"language":"default","tag":"Guides","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/on-chain-dex-or-bridge/get-token-approval-data","slug":"/api-reference/on-chain-dex-or-bridge/get-token-approval-data","pageMetadata":{"title":"Get token approval data","description":"Returns what the wallet must approve before a DEX swap. Call this first — both arrays come back empty when the allowance already covers the swap.\n\n- `approvals` — transactions to send. After sending them, poll [Check token allowance](/api-reference/on-chain-dex-or-bridge/check-token-allowance) until it returns true.\n- `signatures` — EIP-712 permits to sign instead, when the token and provider both support EIP-2612","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /dex/approve","href":"/api-reference/on-chain-dex-or-bridge/get-token-approval-data","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Returns what the wallet must approve before a DEX swap. Call this first — both arrays come back empty when the allowance already covers the swap.\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"approvals\"\n }), \" — transactions to send. After sending them, poll \", _jsx(_components.a, {\n href: \"/api-reference/on-chain-dex-or-bridge/check-token-allowance\",\n children: \"Check token allowance\"\n }), \" until it returns true.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"signatures\"\n }), \" — EIP-712 permits to sign instead, when the token and provider both support EIP-2612\"]\n }), \"\\n\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Get token approval data","description":"Returns what the wallet must approve before a DEX swap. Call this first — both arrays come back empty when the allowance already covers the swap.\n\n- `approvals` — transactions to send. After sending them, poll [Check token allowance](/api-reference/on-chain-dex-or-bridge/check-token-allowance) until it returns true.\n- `signatures` — EIP-712 permits to sign instead, when the token and provider both support EIP-2612","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /dex/approve","href":"/api-reference/on-chain-dex-or-bridge/get-token-approval-data","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"Approve","responses":{"200":"bb3940b7-e4b6-47a0-8a43-b26a43eb585b","401":"7e78cbd9-690c-4f41-86d9-2c419384dab3","402":"48aa8f49-5acb-4448-86d4-a778fc755f4e","403":"12c12a41-a486-445f-9cab-abec39b4d842","422":"64156d9d-31c5-4906-ac8e-c633d8e3ecbc","429":"905d3988-4e62-4bcd-9f35-0ba2bd2a7902","500":"bdcbbcd6-2218-4a2e-981a-07104825b554"},"description":"Returns what the wallet must approve before a DEX swap. Call this first — both arrays come back empty when the allowance already covers the swap.\n\n- `approvals` — transactions to send. After sending them, poll [Check token allowance](/api-reference/on-chain-dex-or-bridge/check-token-allowance) until it returns true.\n- `signatures` — EIP-712 permits to sign instead, when the token and provider both support EIP-2612","summary":"Get token approval data","tags":["On-chain DEX or Bridge"],"security":["3a157001-f105-40bc-9acd-9c9eb4d45956"],"parameters":[],"requestBody":"a3f3e3d9-a918-47a0-86ec-44f64e684d6b","method":"post","type":"path","servers":["8ebb4976-baf3-411c-8a1c-cd4d2c55015e"],"path":"/dex/approve","baseUrlOptions":["http://localhost:3003/v2"],"title":"Get token approval data","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"quoteId":{"type":"string","description":"Quote ID from a prior quote response.","example":"69a02882f48d56c923119d95","isRequired":true,"uniqueKey":"quoteId","typeLabel":"string"},"addressFrom":{"type":"string","description":"Address from which the amount will be deducted (EVM or Tron)","example":"0xb7dE6b6eEBF7401aFea5a49D6405C9048fEf2d40","pattern":"^(0x[0-9a-fA-F]{40}|T[1-9A-HJ-NP-Za-km-z]{33})$","isRequired":true,"uniqueKey":"addressFrom","typeLabel":"string"},"addressTo":{"type":"string","description":"Destination address on the output chain. Only required by routes whose approval step signs the destination, currently HyperCore withdrawals. Format follows the output chain, so it is not restricted to EVM.","example":"8jZnXYnZB1MJQG6zBXyouzcycsaPTrZtPXPHDNifjYaC","uniqueKey":"addressTo","typeLabel":"string"},"usePermit":{"type":"boolean","description":"Whether to use permit instead of approve. Defaults to true for swaps that support it.","example":false,"uniqueKey":"usePermit","typeLabel":"boolean"}},"required":["quoteId","addressFrom"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"quoteId":"69a02882f48d56c923119d95","addressFrom":"0xb7dE6b6eEBF7401aFea5a49D6405C9048fEf2d40","addressTo":"8jZnXYnZB1MJQG6zBXyouzcycsaPTrZtPXPHDNifjYaC","usePermit":false}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"bb3940b7-e4b6-47a0-8a43-b26a43eb585b":{"description":"What the wallet must approve; both arrays empty if nothing is needed","content":{"application/json":{"schema":{"properties":{"approvals":{"items":{"properties":{"data":{"type":"string","description":"Calldata to send. Encodes the approval for the amount this swap needs.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].data","typeLabel":"string"},"to":{"type":"string","description":"Send the transaction to this address — the contract of the token being approved.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].to","typeLabel":"string"},"from":{"type":"string","description":"Wallet that must send the transaction — the `addressFrom` you supplied.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].from","typeLabel":"string"},"fromChain":{"properties":{"icon":{"type":"string","description":"Chain icon URL.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.icon","typeLabel":"string"},"addressValidation":{"type":"string","description":"Regex a wallet address on this chain must match. Use it to validate `addressTo` before creating an exchange.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.addressValidation","typeLabel":"string"},"tokenAddressValidation":{"type":"string","description":"Regex a token contract address on this chain must match.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.tokenAddressValidation","typeLabel":"string"},"id":{"type":"string","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.id","typeLabel":"string"},"created":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.created","typeLabel":"string\u003cdate-time>"},"name":{"type":"string","description":"Readable chain name, e.g. `Bitcoin`.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.name","typeLabel":"string"},"shortName":{"type":"string","description":"The chain's identifier. Pass this wherever an endpoint takes a chain, e.g. `ethereum`.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.shortName","typeLabel":"string"},"explorerUrl":{"type":"string","description":"Template for a transaction link — substitute `{txHash}`, e.g. `https://blockchair.com/bitcoin/transaction/{txHash}`.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.explorerUrl","typeLabel":"string"},"addressUrl":{"type":"string","description":"Template for an address link — substitute `{address}`, e.g. `https://blockchair.com/bitcoin/address/{address}`.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.addressUrl","typeLabel":"string"},"priority":{"type":"number","format":"double","description":"Display order, lower sorts first.\n* `0` is the highest priority and `99999` the lowest.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.priority","typeLabel":"number\u003cdouble>"},"kind":{"type":"string","description":"Chain family, e.g. `evm`, `sol`, `bitcoin`, `xmr`, `ltc`. Determines the address format and which on-chain steps a DEX swap needs.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.kind","typeLabel":"string"},"enabled":{"type":"boolean","description":"False when the chain is temporarily not routing swaps.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.enabled","typeLabel":"boolean"},"shortNameV1":{"type":"string","description":"The chain's name in the v1 API. Use `shortName` instead.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain.shortNameV1","typeLabel":"string"},"modified":{"type":"string","format":"date-time","uniqueKey":"approvals.items.[INDEX].fromChain.modified","typeLabel":"string\u003cdate-time>"},"memoNeeded":{"oneOf":[{"type":"boolean","description":"True when an address on this chain needs a memo or destination tag, e.g. XRP or TON. Send it as `destinationTag` for the payout address, or `refundExtraId` for the refund address.","uniqueKey":"approvals.items.[INDEX].fromChain.memoNeeded.oneOf.0","typeLabel":"boolean"},{"type":"null","description":"True when an address on this chain needs a memo or destination tag, e.g. XRP or TON. Send it as `destinationTag` for the payout address, or `refundExtraId` for the refund address.","uniqueKey":"approvals.items.[INDEX].fromChain.memoNeeded.oneOf.1","typeLabel":"null"}],"uniqueKey":"approvals.items.[INDEX].fromChain.memoNeeded","typeLabel":"boolean | null"},"hashUrl":{"type":"string","description":"Explorer link for a transaction hash, when it differs from `explorerUrl`.","uniqueKey":"approvals.items.[INDEX].fromChain.hashUrl","typeLabel":"string"},"chainId":{"oneOf":[{"type":"number","format":"double","description":"EVM chain id, e.g. `1` for Ethereum. Null on non-EVM chains.","uniqueKey":"approvals.items.[INDEX].fromChain.chainId.oneOf.0","typeLabel":"number\u003cdouble>"},{"type":"null","format":"double","description":"EVM chain id, e.g. `1` for Ethereum. Null on non-EVM chains.","uniqueKey":"approvals.items.[INDEX].fromChain.chainId.oneOf.1","typeLabel":"null"}],"uniqueKey":"approvals.items.[INDEX].fromChain.chainId","typeLabel":"number\u003cdouble> | null"}},"required":["icon","addressValidation","tokenAddressValidation","id","created","name","shortName","explorerUrl","addressUrl","priority","kind","enabled","shortNameV1"],"type":"object","additionalProperties":false,"description":"Chain the transaction runs on.","isRequired":true,"uniqueKey":"approvals.items.[INDEX].fromChain","typeLabel":"object"}},"required":["data","to","from","fromChain"],"type":"object","additionalProperties":false,"uniqueKey":"approvals.items.[INDEX]","typeLabel":"object"},"type":"array","description":"Transactions the wallet must send before the swap. Empty when the allowance already covers it.","isRequired":true,"uniqueKey":"approvals","typeLabel":"object[]"},"signatures":{"items":{"properties":{"data":{"properties":{"domain":{"properties":{"name":{"type":"string","uniqueKey":"signatures.items.[INDEX].data.domain.name","typeLabel":"string"},"version":{"type":"string","uniqueKey":"signatures.items.[INDEX].data.domain.version","typeLabel":"string"},"chainId":{"type":"number","format":"double","uniqueKey":"signatures.items.[INDEX].data.domain.chainId","typeLabel":"number\u003cdouble>"},"verifyingContract":{"type":"string","uniqueKey":"signatures.items.[INDEX].data.domain.verifyingContract","typeLabel":"string"},"salt":{"type":"string","uniqueKey":"signatures.items.[INDEX].data.domain.salt","typeLabel":"string"}},"type":"object","additionalProperties":false,"isRequired":true,"uniqueKey":"signatures.items.[INDEX].data.domain","typeLabel":"object"},"types":{"properties":{},"additionalProperties":{"items":{"properties":{"name":{"type":"string","isRequired":true,"uniqueKey":"signatures.items.[INDEX].data.types.additionalProperties.items.[INDEX].name","typeLabel":"string"},"type":{"type":"string","isRequired":true,"uniqueKey":"signatures.items.[INDEX].data.types.additionalProperties.items.[INDEX].type","typeLabel":"string"}},"required":["name","type"],"type":"object","additionalProperties":false,"uniqueKey":"signatures.items.[INDEX].data.types.additionalProperties.items.[INDEX]","typeLabel":"object"},"type":"array","uniqueKey":"signatures.items.[INDEX].data.types.additionalProperties","typeLabel":"object[]"},"type":"object","description":"Construct a type with a set of properties K of type T","isRequired":true,"uniqueKey":"signatures.items.[INDEX].data.types","typeLabel":"object"},"primaryType":{"type":"string","isRequired":true,"uniqueKey":"signatures.items.[INDEX].data.primaryType","typeLabel":"string"},"message":{"properties":{},"additionalProperties":{"oneOf":[{}],"uniqueKey":"signatures.items.[INDEX].data.message.additionalProperties","typeLabel":"any"},"type":"object","description":"Construct a type with a set of properties K of type T","isRequired":true,"uniqueKey":"signatures.items.[INDEX].data.message","typeLabel":"object"}},"required":["domain","types","primaryType","message"],"type":"object","additionalProperties":false,"description":"The EIP-712 payload for the wallet to sign.","isRequired":true,"uniqueKey":"signatures.items.[INDEX].data","typeLabel":"object"},"type":{"enum":["single","chained"],"type":"string","description":"`single` — sign it and you are done. `chained` — sign it, then call [Get next chain signature](/api-reference/on-chain-dex-or-bridge/get-next-chain-signature) for the next one.","isRequired":true,"uniqueKey":"signatures.items.[INDEX].type","typeLabel":"enum\u003cstring>"},"totalSteps":{"type":"number","format":"double","description":"How many signatures this chain needs in total. `1` for a single signature.","isRequired":true,"uniqueKey":"signatures.items.[INDEX].totalSteps","typeLabel":"number\u003cdouble>"},"step":{"type":"number","format":"double","description":"Which signature this is, counting from 1.","isRequired":true,"uniqueKey":"signatures.items.[INDEX].step","typeLabel":"number\u003cdouble>"},"isComplete":{"type":"boolean","description":"True on the last signature of the chain — stop asking for more once you see it.","isRequired":true,"uniqueKey":"signatures.items.[INDEX].isComplete","typeLabel":"boolean"},"key":{"type":"string","description":"Identifies this signature. Pass it as `key` to [Get next chain signature](/api-reference/on-chain-dex-or-bridge/get-next-chain-signature) to fetch the next step.","isRequired":true,"uniqueKey":"signatures.items.[INDEX].key","typeLabel":"string"},"swapRequiredMetadata":{"properties":{},"additionalProperties":{"oneOf":[{}],"uniqueKey":"signatures.items.[INDEX].swapRequiredMetadata.additionalProperties","typeLabel":"any"},"type":"object","description":"Provider data attached to this signature. Send it back unchanged with the signed result — the swap fails without it.","uniqueKey":"signatures.items.[INDEX].swapRequiredMetadata","typeLabel":"object"}},"required":["data","type","totalSteps","step","isComplete","key"],"type":"object","additionalProperties":false,"uniqueKey":"signatures.items.[INDEX]","typeLabel":"object"},"type":"array","description":"Messages to sign instead of sending an approval transaction, when the token and provider both support it. Pass the signed results to `signatures` on [Create exchange](/api-reference/private-and-standard-swaps/create-exchange).","isRequired":true,"uniqueKey":"signatures","typeLabel":"object[]"}},"required":["approvals","signatures"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example 1":{"title":"Example 1","value":{"approvals":[{"from":"0xb7dE6b6eEBF7401aFea5a49D6405C9048fEf2d40","to":"0xdac17f958d2ee523a2206206994597c13d831ec7","data":"0x095ea7b30000000000000000000000001111111254eeb25477b68fb85ed929f73a960582000000000000000000000000000000000000000000000000000000003b9aca00","fromChain":{"id":"6689b73ec90e45f3b3e5150a","name":"Ethereum","shortName":"ethereum","shortNameV1":"ETH","kind":"evm","chainId":1,"enabled":true,"icon":"https://api.houdiniswap.com/assets/networks/ETH.png","created":"2024-07-06T10:21:18.000Z","explorerUrl":"https://etherscan.io/tx/{txHash}","addressUrl":"https://etherscan.io/address/{address}","addressValidation":"^0x[a-fA-F0-9]{40}$","tokenAddressValidation":"^0x[a-fA-F0-9]{40}$"}}],"signatures":[]}}},"exampleType":"examples"}},"exampleType":"examples"},"7e78cbd9-690c-4f41-86d9-2c419384dab3":{"description":"Credentials missing, malformed, or rejected — all return `INVALID_API_CREDENTIALS`. Sending only `partner-id` returns `PARTNER_ID_NOT_SUPPORTED`.","content":{"application/json":{"schema":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable reason for the failure. Branch on this, not on `message` — messages are free to change.\n\nThe value depends on the HTTP status. The common ones:\n\n- `400` — `BAD_REQUEST`\n- `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`\n- `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`\n- `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`\n- `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`\n- `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`, `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems\n- `429` — `RATE_LIMIT_EXCEEDED`\n- `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`, `SERVICE_UNAVAILABLE`\n\nNew codes are added over time, so treat this as an open set: match the ones you handle and fall back to the HTTP status for the rest.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"requestId":{"type":"string","description":"Unique id for this request. Quote it when contacting support — it is how we find the failure in our logs.","uniqueKey":"requestId","typeLabel":"string"}},"required":["message","code"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>","code":"\u003cstring>","requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"48aa8f49-5acb-4448-86d4-a778fc755f4e":{"description":"Payment required — x402 protocol. The body is empty; what to pay is in the `payment-required` header. Not returned when you send an `Authorization` header.","content":{"application/json":{"schema":{"description":"Body of a `402 Payment required`. Empty — `{}` — for API clients; a request that looks like a browser gets an HTML paywall page instead.\n\nThis is the x402 payment protocol, not the normal error format, so there is no `code` or `message` to branch on. What to pay is always in the `payment-required` response header, in both cases: base64-encoded JSON whose `accepts[]` entries each carry the `network`, the `asset` to pay in, the `amount`, and the `payTo` address, alongside `maxTimeoutSeconds` and the x402 `scheme`.\n\nSending `Authorization` skips the payment flow, so a 402 only reaches callers paying per request. An `apiKey` query param also skips it but is not a credential — those requests fail with `401 INVALID_API_CREDENTIALS`.","properties":{},"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{}}},"exampleType":"generated"}},"headers":{"payment-required":{"schema":{"type":"string"},"required":true}},"exampleType":"generated"},"12c12a41-a486-445f-9cab-abec39b4d842":{"description":"Access Denied","content":{"application/json":{"schema":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable reason for the failure. Branch on this, not on `message` — messages are free to change.\n\nThe value depends on the HTTP status. The common ones:\n\n- `400` — `BAD_REQUEST`\n- `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`\n- `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`\n- `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`\n- `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`\n- `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`, `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems\n- `429` — `RATE_LIMIT_EXCEEDED`\n- `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`, `SERVICE_UNAVAILABLE`\n\nNew codes are added over time, so treat this as an open set: match the ones you handle and fall back to the HTTP status for the rest.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"requestId":{"type":"string","description":"Unique id for this request. Quote it when contacting support — it is how we find the failure in our logs.","uniqueKey":"requestId","typeLabel":"string"}},"required":["message","code"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>","code":"\u003cstring>","requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"64156d9d-31c5-4906-ac8e-c633d8e3ecbc":{"description":"Validation Failed","content":{"application/json":{"schema":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable reason for the failure. Branch on this, not on `message` — messages are free to change.\n\nThe value depends on the HTTP status. The common ones:\n\n- `400` — `BAD_REQUEST`\n- `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`\n- `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`\n- `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`\n- `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`\n- `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`, `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems\n- `429` — `RATE_LIMIT_EXCEEDED`\n- `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`, `SERVICE_UNAVAILABLE`\n\nNew codes are added over time, so treat this as an open set: match the ones you handle and fall back to the HTTP status for the rest.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"fields":{"properties":{},"type":"object","additionalProperties":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"fields.additionalProperties.message","typeLabel":"string"},"value":{"oneOf":[{}],"uniqueKey":"fields.additionalProperties.value","typeLabel":"any"}},"required":["message"],"type":"object","uniqueKey":"fields.additionalProperties","typeLabel":"object"},"description":"The inputs that failed, keyed by field name — or by path for a nested field, e.g. `filters.rotatePayoutWallets`. Each entry has a `message` and, when you sent one, the `value`.\n\nNot every `422` names its input, so `fields` can be `{}`: branch on `code`, and use `fields` to highlight the input when one is named.","isRequired":true,"uniqueKey":"fields","typeLabel":"object"},"requestId":{"type":"string","description":"Unique id for this request. Quote it when contacting support — it is how we find the failure in our logs.","uniqueKey":"requestId","typeLabel":"string"}},"required":["message","code","fields"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>","code":"\u003cstring>","fields":{},"requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"905d3988-4e62-4bcd-9f35-0ba2bd2a7902":{"description":"Rate limit exceeded — back off and retry","content":{"application/json":{"schema":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable reason for the failure. Branch on this, not on `message` — messages are free to change.\n\nThe value depends on the HTTP status. The common ones:\n\n- `400` — `BAD_REQUEST`\n- `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`\n- `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`\n- `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`\n- `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`\n- `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`, `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems\n- `429` — `RATE_LIMIT_EXCEEDED`\n- `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`, `SERVICE_UNAVAILABLE`\n\nNew codes are added over time, so treat this as an open set: match the ones you handle and fall back to the HTTP status for the rest.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"requestId":{"type":"string","description":"Unique id for this request. Quote it when contacting support — it is how we find the failure in our logs.","uniqueKey":"requestId","typeLabel":"string"}},"required":["message","code"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>","code":"\u003cstring>","requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"bdcbbcd6-2218-4a2e-981a-07104825b554":{"description":"Internal Server Error","content":{"application/json":{"schema":{"properties":{"message":{"type":"string","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable reason for the failure. Branch on this, not on `message` — messages are free to change.\n\nThe value depends on the HTTP status. The common ones:\n\n- `400` — `BAD_REQUEST`\n- `401` — `INVALID_API_CREDENTIALS`, `PARTNER_ID_NOT_SUPPORTED`\n- `403` — `ACCESS_DENIED`, `FIXED_RATE_NOT_ALLOWED`\n- `404` — `NOT_FOUND`, `TOKEN_NOT_FOUND`, `TOKEN_DISABLED`\n- `409` — `ALREADY_SUBMITTED`, `STATIC_DEPOSIT_IN_USE`\n- `422` — `VALIDATION_ERROR`, `AMOUNT_TOO_LOW`, `INVALID_SWAP`, `FIXED_RATE_QUOTE_EXPIRED`, and most other request problems\n- `429` — `RATE_LIMIT_EXCEEDED`\n- `5xx` — `INTERNAL_SERVER_ERROR`, `PROVIDER_EXCHANGE_FAILED`, `SERVICE_UNAVAILABLE`\n\nNew codes are added over time, so treat this as an open set: match the ones you handle and fall back to the HTTP status for the rest.","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"requestId":{"type":"string","description":"Unique id for this request. Quote it when contacting support — it is how we find the failure in our logs.","uniqueKey":"requestId","typeLabel":"string"}},"required":["message","code"],"type":"object","additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"message":"\u003cstring>","code":"\u003cstring>","requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"3a157001-f105-40bc-9acd-9c9eb4d45956":{"apiKey":{"type":"apiKey","name":"Authorization","in":"header","description":"Send `Authorization: \u003cApiKey>:\u003cApiSecret>` — joined by a colon, raw. No `Bearer` prefix, no base64.\n\n[Get your credentials](https://docs.houdini.com/developer-hub/getting-started/authentication)","scopes":[],"schemeName":"apiKey"}}},"servers":{"8ebb4976-baf3-411c-8a1c-cd4d2c55015e":{"url":"http://localhost:3003/v2"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","name":"Authorization","in":"header","description":"Send `Authorization: \u003cApiKey>:\u003cApiSecret>` — joined by a colon, raw. No `Bearer` prefix, no base64.\n\n[Get your credentials](https://docs.houdini.com/developer-hub/getting-started/authentication)","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Authorization","type":"string","description":"Send `Authorization: \u003cApiKey>:\u003cApiSecret>` — joined by a colon, raw. No `Bearer` prefix, no base64.\n\n[Get your credentials](https://docs.houdini.com/developer-hub/getting-started/authentication)","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"https://api-partner.houdiniswap.com/v2/openapi.json"},"subdomain":"houdini","siteName":"Houdini documentation","title":"Get token approval data - Houdini documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T13:26:58.013Z","originalFileLocation":"api-reference/on-chain-dex-or-bridge/get-token-approval-data.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Returns what the wallet must approve before a DEX swap. Call this first — both arrays come back empty when the allowance already covers the swap. - approvals — transactions to send. After sending them, poll Check token allowance until it returns true. - signatures — EIP-712 permits to sign instead, when the token and provider both support EIP-2612\">\u003cmeta data-mint-head name=\"application-name\" content=\"Houdini documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Get token approval data - Houdini documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns what the wallet must approve before a DEX swap. Call this first — both arrays come back empty when the allowance already covers the swap. - approvals — transactions to send. After sending them, poll Check token allowance until it returns true. - signatures — EIP-712 permits to sign instead, when the token and provider both support EIP-2612\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Houdini documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.houdiniswap.com/api-reference/on-chain-dex-or-bridge/get-token-approval-data\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://houdini.mintlify.app/_mintlify/api/og/v2?division=On-chain+DEX+or+Bridge\u0026amp;title=Get+token+approval+data\u0026amp;description=Returns+what+the+wallet+must+approve+before+a+DEX+swap.+Call+this+first+%E2%80%94+both+arrays+come+back+empty+when+the+allowance+already+covers+the+swap.%0A%0A-+%60approvals%60\u0026amp;theme=9ee3d943f07b0e7ca37035be\u0026amp;signature=e3ee2147b62335318fc5b2215077ca681da4efc29a90d326ae88c693162d04c1\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Get token approval data - Houdini documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns what the wallet must approve before a DEX swap. Call this first — both arrays come back empty when the allowance already covers the swap. - approvals — transactions to send. After sending them, poll Check token allowance until it returns true. - signatures — EIP-712 permits to sign instead, when the token and provider both support EIP-2612\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://houdini.mintlify.app/_mintlify/api/og/v2?division=On-chain+DEX+or+Bridge\u0026amp;title=Get+token+approval+data\u0026amp;description=Returns+what+the+wallet+must+approve+before+a+DEX+swap.+Call+this+first+%E2%80%94+both+arrays+come+back+empty+when+the+allowance+already+covers+the+swap.%0A%0A-+%60approvals%60\u0026amp;theme=9ee3d943f07b0e7ca37035be\u0026amp;signature=e3ee2147b62335318fc5b2215077ca681da4efc29a90d326ae88c693162d04c1\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/houdini/yzTfSRPGdvC9032C/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Houdini documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#A955F7\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.houdiniswap.com/api-reference/on-chain-dex-or-bridge/get-token-approval-data\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/on-chain-dex-or-bridge/get-token-approval-data.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.houdiniswap.com/#organization\",\"name\":\"Houdini documentation\",\"url\":\"https://docs.houdiniswap.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/houdini/1qxWMAnpbp51-Yh3/logo/wordmark-black.svg?fit=max\u0026auto=format\u0026n=1qxWMAnpbp51-Yh3\u0026q=85\u0026s=835e11b4170923b979bdf1ba4cb302b8\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.houdiniswap.com#website\",\"name\":\"Houdini documentation\",\"url\":\"https://docs.houdiniswap.com\",\"publisher\":{\"@id\":\"https://docs.houdiniswap.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.houdiniswap.com/api-reference/on-chain-dex-or-bridge/get-token-approval-data#webpage\",\"url\":\"https://docs.houdiniswap.com/api-reference/on-chain-dex-or-bridge/get-token-approval-data\",\"name\":\"Get token approval data\",\"description\":\"Returns what the wallet must approve before a DEX swap. Call this first — both arrays come back empty when the allowance already covers the swap. - approvals — transactions to send. After sending them, poll Check token allowance until it returns true. - signatures — EIP-712 permits to sign instead, when the token and provider both support EIP-2612\",\"dateModified\":\"2026-10-26T13:26:58.013Z\",\"isPartOf\":{\"@id\":\"https://docs.houdiniswap.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.houdiniswap.com/api-reference/on-chain-dex-or-bridge/get-token-approval-data#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.houdiniswap.com/api-reference/on-chain-dex-or-bridge/get-token-approval-data#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"On-chain DEX or Bridge\",\"item\":\"https://docs.houdiniswap.com/api-reference/on-chain-dex-or-bridge/get-tokens\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Get token approval data\",\"item\":\"https://docs.houdiniswap.com/api-reference/on-chain-dex-or-bridge/get-token-approval-data\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.houdiniswap.com/api-reference/on-chain-dex-or-bridge/get-token-approval-data#apireference\",\"headline\":\"Get token approval data\",\"name\":\"Get token approval data\",\"description\":\"Returns what the wallet must approve before a DEX swap. Call this first — both arrays come back empty when the allowance already covers the swap. - approvals — transactions to send. After sending them, poll Check token allowance until it returns true. - signatures — EIP-712 permits to sign instead, when the token and provider both support EIP-2612\",\"url\":\"https://docs.houdiniswap.com/api-reference/on-chain-dex-or-bridge/get-token-approval-data\",\"mainEntityOfPage\":{\"@id\":\"https://docs.houdiniswap.com/api-reference/on-chain-dex-or-bridge/get-token-approval-data#webpage\"},\"dateModified\":\"2026-10-26T13:26:58.013Z\",\"publisher\":{\"@id\":\"https://docs.houdiniswap.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.houdiniswap.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Houdini documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Houdini documentation","nav":{"global":null,"tabs":[{"tab":"Overview","pages":[{"title":"Overview","href":"/overview/getting-started/what-is-houdini"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/how-to/private-swap"}]},{"tab":"Developer Hub","pages":[{"title":"Developer Hub","href":"/developer-hub/overview/what-you-can-build"}]},{"tab":"API V2 Reference ","icon":"folder-gear","groups":[{"group":"Private and Standard Swaps","pages":[{"title":"Get tokens","openapi":"GET /tokens","href":"/api-reference/private-and-standard-swaps/get-tokens"},{"title":"Get quotes","openapi":"GET /quotes","href":"/api-reference/private-and-standard-swaps/get-quotes"},{"title":"Get quotes by token address","openapi":"GET /quotes/byChainAddress","href":"/api-reference/private-and-standard-swaps/get-quotes-by-token-address"},{"title":"Create exchange","openapi":"POST /exchanges","href":"/api-reference/private-and-standard-swaps/create-exchange"},{"title":"Get order details","openapi":"GET /orders/{houdiniId}","href":"/api-reference/private-and-standard-swaps/get-order-details"}]},{"group":"Private Send","pages":[{"title":"Get tokens","openapi":"GET /tokens","href":"/api-reference/private-send/get-tokens"},{"title":"Get private send quote","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /quotes/private-send","href":"/api-reference/private-send/get-private-send-quote"},{"title":"Create private send order","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges/private-send","href":"/api-reference/private-send/create-private-send-order"},{"title":"Get order details","openapi":"GET /orders/{houdiniId}","href":"/api-reference/private-send/get-order-details"}]},{"group":"Multi-Exchange","pages":[{"title":"Get tokens","openapi":"GET /tokens","href":"/api-reference/multi-exchange/get-tokens"},{"title":"Get multi quotes","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /quotes/multi","href":"/api-reference/multi-exchange/get-multi-quotes"},{"title":"Create multi exchange","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges/multi","href":"/api-reference/multi-exchange/create-multi-exchange"},{"title":"Get batch status","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /exchanges/multi/{multiId}","href":"/api-reference/multi-exchange/get-batch-status"},{"group":"Bundler SOL","pages":[{"title":"Get batch transaction","openapi":"GET /exchanges/multi/{multiId}/tx","href":"/api-reference/bundler-sol/get-batch-transaction"}]},{"group":"Bundler EVM","pages":[{"title":"Build batch transaction","openapi":"POST /exchanges/multi/{multiId}/tx/build","href":"/api-reference/bundler-evm/build-batch-transaction"},{"title":"Submit signed transaction","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges/multi/{multiId}/tx","href":"/api-reference/bundler-evm/submit-signed-transaction"},{"title":"Retry failed orders","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges/multi/{multiId}/retry","href":"/api-reference/bundler-evm/retry-failed-orders"},{"title":"Recover stuck assets","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /exchanges/multi/recovery","href":"/api-reference/bundler-evm/recover-stuck-assets"}]}]},{"group":"On-chain DEX or Bridge","pages":[{"title":"Get tokens","openapi":"GET /tokens","href":"/api-reference/on-chain-dex-or-bridge/get-tokens"},{"title":"Get quotes","openapi":"GET /quotes","href":"/api-reference/on-chain-dex-or-bridge/get-quotes"},{"title":"Get quotes by token address","openapi":"GET /quotes/byChainAddress","href":"/api-reference/on-chain-dex-or-bridge/get-quotes-by-token-address"},{"title":"Create exchange","description":"Creates an on-chain DEX or bridge swap order from a quoteId.","openapi":"POST /exchanges","href":"/api-reference/on-chain-dex-or-bridge/create-exchange"},{"title":"Get token approval data","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /dex/approve","href":"/api-reference/on-chain-dex-or-bridge/get-token-approval-data"},{"title":"Check token allowance","description":"Check if token allowance is sufficient for a DEX swap\n\nReturns true when the current allowance covers the swap. Poll this after sending an approval from [Get token approval data](/api-reference/on-chain-dex-or-bridge/get-token-approval-data), and create the exchange once it turns true.","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /dex/allowance","href":"/api-reference/on-chain-dex-or-bridge/check-token-allowance"},{"title":"Get next chain signature","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /dex/chainSignatures","href":"/api-reference/on-chain-dex-or-bridge/get-next-chain-signature"},{"title":"Confirm DEX transaction","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json post /dex/confirmTx","href":"/api-reference/on-chain-dex-or-bridge/confirm-dex-transaction"},{"title":"Get order details","openapi":"GET /orders/{houdiniId}","href":"/api-reference/on-chain-dex-or-bridge/get-order-details"}]},{"group":"Reference Data","pages":[{"title":"Get token by ID","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /tokens/{id}","href":"/api-reference/reference-data/get-token-by-id"},{"title":"Get chains","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /chains","href":"/api-reference/reference-data/get-chains"},{"title":"Get swap providers","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /swaps","href":"/api-reference/reference-data/get-swap-providers"},{"title":"Get min and max amounts","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /minMax","href":"/api-reference/reference-data/get-min-and-max-amounts"}]},{"group":"Partner Account","pages":[{"title":"Get orders","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /orders","href":"/api-reference/partner-account/get-orders"},{"title":"Get partner profile","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /me","href":"/api-reference/partner-account/get-partner-profile"},{"title":"Get rate limits","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /rateLimits","href":"/api-reference/partner-account/get-rate-limits"},{"title":"Get commissions","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /commissions","href":"/api-reference/partner-account/get-commissions"},{"title":"Get commission summary","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /commissions/summary","href":"/api-reference/partner-account/get-commission-summary"},{"title":"Get withdrawals","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /withdrawals","href":"/api-reference/partner-account/get-withdrawals"},{"title":"Get volume stats","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /stats/volume","href":"/api-reference/partner-account/get-volume-stats"},{"title":"Get weekly volume","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /stats/weeklyVolume","href":"/api-reference/partner-account/get-weekly-volume"},{"title":"Get chart stats","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /stats/chart","href":"/api-reference/partner-account/get-chart-stats"}]},{"group":"System","pages":[{"title":"Get system health","deprecated":null,"version":null,"openapi":"https://api-partner.houdiniswap.com/v2/openapi.json get /status","href":"/api-reference/system/get-system-health"}]}]},{"tab":"API v1","hidden":true,"pages":[{"title":"API v1","href":"/migration/v1-to-v2"}]},{"tab":"Changelog","pages":[{"title":"Changelog","href":"/changelog/release-notes"}]},{"tab":"Support \u0026 FAQs","pages":[{"title":"Support \u0026 FAQs","href":"/support-and-faqs/faqs"}]}]},"title":"Get token approval data - Houdini documentation","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-rfhihCWU.js","utils-BmH1XFxk.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-BcNsxPKB.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BAES3tkd.js","snippetPresets-DCMQBKLP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-D6l_bzE9.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BOktbnNh.js","shallow-BCs8SgM7.js","getApiPlaygroundDisplay-DEmW5bJB.js","CodeSnippet-CpZOpB9C.js","CodeSnippets-BOBDqibl.js","Page-D5fEM6aW.js","getPastedJson-DH2JBvmr.js","icon-BBJH-kKh.js","MethodPill-D2Sd5NLC.js","DuplicateIcon-CGgfL2qN.js","createIcon-BKudBBzi.js","DynamicMarkdown-85clUA0i.js","SectionHeading-D0JiMgDx.js","axios-vUo_bRtp.js","Markdown-Cfiy0xZO.js","clsx-rL8ZCCw4.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-aeztFa9U.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BywkCr5C.js"]}