This is the second step when bridging tokens. After computing a route with Compute Route (POST /v2/fungible/route), pass the route details and your addresses to this endpoint. It returns signable transaction messages that you can broadcast to the source chain.
The typical flow is: Compute Route → Generate Transaction → sign and broadcast → Track Transaction.
Array of recipient and/or sender address for each chain in the path, corresponding to the required_chain_addresses array returned from a route request.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Initia Docs","colors":{"primary":"#324242","light":"#7ad9f7","dark":"#4349FF"},"logo":{"light":"https://mintcdn.com/initialabs/Uwhc6AAplUb4pVeK/logo/logo_light.svg?fit=max\u0026auto=format\u0026n=Uwhc6AAplUb4pVeK\u0026q=85\u0026s=ac94fed481d8ea8bc33f6ed287d41767","dark":"https://mintcdn.com/initialabs/Uwhc6AAplUb4pVeK/logo/logo_dark.svg?fit=max\u0026auto=format\u0026n=Uwhc6AAplUb4pVeK\u0026q=85\u0026s=7c64051e297de71f104d0622d2050fb1"},"favicon":"https://mintcdn.com/initialabs/Uwhc6AAplUb4pVeK/favicon.svg?fit=max\u0026auto=format\u0026n=Uwhc6AAplUb4pVeK\u0026q=85\u0026s=632e02bc14dd8d68d7a088ccb36d92fc","api":{"openapi":["api-reference/router-api/openapi.yaml","api-reference/rollup-indexer/openapi.yaml"],"playground":{"display":"interactive","proxy":true},"mdx":{"server":"https://rest.testnet.initia.xyz"}},"appearance":{"default":"dark"},"background":{"decoration":"grid","color":{"dark":"#060606"}},"footer":{"socials":{"twitter":"https://x.com/initia","discord":"https://discord.gg/initia","github":"https://github.com/initia-labs"}},"integrations":{"ga4":{"measurementId":"G-MEX41J56YX"}},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Twitter","icon":"twitter","href":"https://x.com/initia"},{"anchor":"Discord","icon":"discord","href":"https://discord.gg/initia"},{"anchor":"GitHub","icon":"github","href":"https://github.com/initia-labs"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"initialabs","hasAudioNarration":false,"actualSubdomain":"initialabs","customDomains":["docs.initia.xyz"],"gitSource":{"type":"github","owner":"initia-labs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a67696b99c83776a49bc5dd","collectionId":"a0dca5b1-7b51-4b8f-a147-4b0659afb2a7","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a67696b99c83776a49bc5dd"},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6a67696b99c83776a49bc5dd:success","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Developers","count":58},{"language":"default","tag":"API Reference","count":56},{"language":"default","tag":"InterwovenKit","count":34},{"language":"default","tag":"Home","count":28},{"language":"default","tag":"Tools","count":25},{"language":"default","tag":"Core Concepts","count":25},{"language":"default","tag":"Indexer API","count":24},{"language":"default","tag":"VM Specific Tutorials","count":15},{"language":"default","tag":"CLIs","count":14},{"language":"default","tag":"EVM","count":14}]},"assistantConfig":{"enableAskAiButton":true,"enableAskAiSearchBar":false},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/routing/generate-transaction","slug":"/api-reference/routing/generate-transaction","pageMetadata":{"title":"Generate Transaction","description":"This is the second step when bridging tokens. After computing a route with Compute Route (`POST /v2/fungible/route`), pass the route details and your addresses to this endpoint. It returns signable transaction messages that you can broadcast to the source chain.\n\nThe typical flow is: **Compute Route** → **Generate Transaction** → sign and broadcast → **Track Transaction**.","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml post /v2/fungible/msgs","href":"/api-reference/routing/generate-transaction","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 code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"This is the second step when bridging tokens. After computing a route with Compute Route (\", _jsx(_components.code, {\n children: \"POST /v2/fungible/route\"\n }), \"), pass the route details and your addresses to this endpoint. It returns signable transaction messages that you can broadcast to the source chain.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The typical flow is: \", _jsx(_components.strong, {\n children: \"Compute Route\"\n }), \" → \", _jsx(_components.strong, {\n children: \"Generate Transaction\"\n }), \" → sign and broadcast → \", _jsx(_components.strong, {\n children: \"Track Transaction\"\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":"Generate Transaction","description":"This is the second step when bridging tokens. After computing a route with Compute Route (`POST /v2/fungible/route`), pass the route details and your addresses to this endpoint. It returns signable transaction messages that you can broadcast to the source chain.\n\nThe typical flow is: **Compute Route** → **Generate Transaction** → sign and broadcast → **Track Transaction**.","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml post /v2/fungible/msgs","href":"/api-reference/routing/generate-transaction","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"generateTransaction","summary":"Generate Transaction","description":"This is the second step when bridging tokens. After computing a route with Compute Route (`POST /v2/fungible/route`), pass the route details and your addresses to this endpoint. It returns signable transaction messages that you can broadcast to the source chain.\n\nThe typical flow is: **Compute Route** → **Generate Transaction** → sign and broadcast → **Track Transaction**.","tags":["Routing"],"requestBody":"f9557db6-fd92-446f-bc57-a92a7128c974","responses":{"200":"0874459e-ba4f-43c4-bbfa-89efa31b6ed2"},"method":"post","type":"path","servers":["9dfeb694-461d-4028-9e98-aaaaac0c780b","e38be52a-8309-4cb1-8e99-b8079cc517da"],"security":[],"path":"/v2/fungible/msgs","baseUrlOptions":["https://router-api.initia.xyz","https://router-api.initiation-2.initia.xyz"],"title":"Generate Transaction","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["amount_in","amount_out","source_asset_chain_id","source_asset_denom","dest_asset_chain_id","dest_asset_denom","address_list","operations","slippage_tolerance_percent"],"properties":{"amount_in":{"type":"string","description":"Input amount in smallest denomination.","isRequired":true,"uniqueKey":"amount_in","typeLabel":"string"},"amount_out":{"type":"string","description":"Expected output amount from the route response.","isRequired":true,"uniqueKey":"amount_out","typeLabel":"string"},"source_asset_chain_id":{"type":"string","description":"Source chain ID.","isRequired":true,"uniqueKey":"source_asset_chain_id","typeLabel":"string"},"source_asset_denom":{"type":"string","description":"Source asset denomination.","isRequired":true,"uniqueKey":"source_asset_denom","typeLabel":"string"},"dest_asset_chain_id":{"type":"string","description":"Destination chain ID.","isRequired":true,"uniqueKey":"dest_asset_chain_id","typeLabel":"string"},"dest_asset_denom":{"type":"string","description":"Destination asset denomination.","isRequired":true,"uniqueKey":"dest_asset_denom","typeLabel":"string"},"address_list":{"type":"array","description":"Array of recipient and/or sender address for each chain in the path, corresponding to the required_chain_addresses array returned from a route request.","minItems":2,"items":{"type":"string","uniqueKey":"address_list.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"address_list","typeLabel":"string[]"},"operations":{"type":"array","description":"Route operations from the /v2/fungible/route response.","items":{"type":"object","uniqueKey":"operations.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"operations","typeLabel":"object[]"},"slippage_tolerance_percent":{"type":"string","description":"Slippage tolerance as a percentage (e.g. \"1\" for 1%).","isRequired":true,"uniqueKey":"slippage_tolerance_percent","typeLabel":"string"},"signed_op_hook":{"type":"object","description":"Signed OP hook data, required when the route has required_op_hook true.","properties":{"hook":{"type":"string","description":"Hook data.","uniqueKey":"signed_op_hook.hook","typeLabel":"string"},"signer":{"type":"string","description":"Signer address.","uniqueKey":"signed_op_hook.signer","typeLabel":"string"}},"uniqueKey":"signed_op_hook","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"amount_in":"1000000","amount_out":"999000","source_asset_chain_id":"interwoven-1","source_asset_denom":"uinit","dest_asset_chain_id":"8453","dest_asset_denom":"0x...","address_list":["init1abc...","0xdef..."],"operations":[],"slippage_tolerance_percent":"1"},"examples":{"Example":{"title":"Example","value":{"amount_in":"1000000","amount_out":"999000","source_asset_chain_id":"interwoven-1","source_asset_denom":"uinit","dest_asset_chain_id":"8453","dest_asset_denom":"0x...","address_list":["init1abc...","0xdef..."],"operations":[],"slippage_tolerance_percent":"1"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"0874459e-ba4f-43c4-bbfa-89efa31b6ed2":{"description":"Successful response","content":{"application/json":{"schema":{"type":"object","properties":{"txs":{"type":"array","description":"Array of transaction objects. Each can be a cosmos_tx, evm_tx, or svm_tx.","items":{"type":"object","properties":{"cosmos_tx":{"type":"object","properties":{"chain_id":{"type":"string","description":"Target chain ID.","uniqueKey":"txs.items.[INDEX].cosmos_tx.chain_id","typeLabel":"string"},"msgs":{"type":"array","description":"Array of Cosmos SDK messages.","items":{"type":"object","uniqueKey":"txs.items.[INDEX].cosmos_tx.msgs.items.[INDEX]","typeLabel":"object"},"uniqueKey":"txs.items.[INDEX].cosmos_tx.msgs","typeLabel":"object[]"},"signer_address":{"type":"string","description":"Address that must sign the transaction.","uniqueKey":"txs.items.[INDEX].cosmos_tx.signer_address","typeLabel":"string"}},"uniqueKey":"txs.items.[INDEX].cosmos_tx","typeLabel":"object"}},"uniqueKey":"txs.items.[INDEX]","typeLabel":"object"},"uniqueKey":"txs","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"txs":[{"cosmos_tx":{"chain_id":"interwoven-1","msgs":[],"signer_address":"init1abc..."}}]},"examples":{"Example":{"title":"Example","value":{"txs":[{"cosmos_tx":{"chain_id":"interwoven-1","msgs":[],"signer_address":"init1abc..."}}]}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{},"servers":{"9dfeb694-461d-4028-9e98-aaaaac0c780b":{"url":"https://router-api.initia.xyz","description":"Mainnet"},"e38be52a-8309-4cb1-8e99-b8079cc517da":{"url":"https://router-api.initiation-2.initia.xyz","description":"Testnet"}}},"originalFileLocation":"api-reference/router-api/openapi.yaml"},"subdomain":"initialabs","siteName":"Initia Docs","title":"Generate Transaction - Initia Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-05-27T07:10:49.463Z","originalFileLocation":"api-reference/routing/generate-transaction.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=\"This is the second step when bridging tokens. After computing a route with Compute Route (POST /v2/fungible/route), pass the route details and your addresses to this endpoint. It returns signable transaction messages that you can broadcast to the source chain. The typical flow is: Compute Route → Generate Transaction → sign and broadcast → Track Transaction.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Initia Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/initialabs/_d_tyT_z0U8a7tAx/_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/initialabs/_d_tyT_z0U8a7tAx/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/initialabs/_d_tyT_z0U8a7tAx/_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/initialabs/_d_tyT_z0U8a7tAx/_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/initialabs/_d_tyT_z0U8a7tAx/_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/initialabs/_d_tyT_z0U8a7tAx/_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/initialabs/_d_tyT_z0U8a7tAx/_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/initialabs/_d_tyT_z0U8a7tAx/_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/initialabs/_d_tyT_z0U8a7tAx/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Generate Transaction - Initia Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"This is the second step when bridging tokens. After computing a route with Compute Route (POST /v2/fungible/route), pass the route details and your addresses to this endpoint. It returns signable transaction messages that you can broadcast to the source chain. The typical flow is: Compute Route → Generate Transaction → sign and broadcast → Track Transaction.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Initia Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.initia.xyz/api-reference/routing/generate-transaction\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://initialabs.mintlify.app/_mintlify/api/og/v2?division=Routing\u0026amp;title=Generate+Transaction\u0026amp;description=This+is+the+second+step+when+bridging+tokens.+After+computing+a+route+with+Compute+Route+%28%60POST+%2Fv2%2Ffungible%2Froute%60%29%2C+pass+the+route+details+and+your+addresses+\u0026amp;theme=e29f2c35b4742e650dd7e8e8\u0026amp;signature=1280babea75401caef958b0b305d9307d042e54ada9b20e34fbeacef5ee87be5\">\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=\"Generate Transaction - Initia Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"This is the second step when bridging tokens. After computing a route with Compute Route (POST /v2/fungible/route), pass the route details and your addresses to this endpoint. It returns signable transaction messages that you can broadcast to the source chain. The typical flow is: Compute Route → Generate Transaction → sign and broadcast → Track Transaction.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://initialabs.mintlify.app/_mintlify/api/og/v2?division=Routing\u0026amp;title=Generate+Transaction\u0026amp;description=This+is+the+second+step+when+bridging+tokens.+After+computing+a+route+with+Compute+Route+%28%60POST+%2Fv2%2Ffungible%2Froute%60%29%2C+pass+the+route+details+and+your+addresses+\u0026amp;theme=e29f2c35b4742e650dd7e8e8\u0026amp;signature=1280babea75401caef958b0b305d9307d042e54ada9b20e34fbeacef5ee87be5\">\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/initialabs/_d_tyT_z0U8a7tAx/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Initia Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#324242\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.initia.xyz/api-reference/routing/generate-transaction\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/routing/generate-transaction.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.initia.xyz/#organization\",\"name\":\"Initia Docs\",\"url\":\"https://docs.initia.xyz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/initialabs/Uwhc6AAplUb4pVeK/logo/logo_light.svg?fit=max\u0026auto=format\u0026n=Uwhc6AAplUb4pVeK\u0026q=85\u0026s=ac94fed481d8ea8bc33f6ed287d41767\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.initia.xyz#website\",\"name\":\"Initia Docs\",\"url\":\"https://docs.initia.xyz\",\"publisher\":{\"@id\":\"https://docs.initia.xyz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.initia.xyz/api-reference/routing/generate-transaction#webpage\",\"url\":\"https://docs.initia.xyz/api-reference/routing/generate-transaction\",\"name\":\"Generate Transaction\",\"description\":\"This is the second step when bridging tokens. After computing a route with Compute Route (POST /v2/fungible/route), pass the route details and your addresses to this endpoint. It returns signable transaction messages that you can broadcast to the source chain. The typical flow is: Compute Route → Generate Transaction → sign and broadcast → Track Transaction.\",\"dateModified\":\"2026-05-27T07:10:49.463Z\",\"isPartOf\":{\"@id\":\"https://docs.initia.xyz#website\"},\"breadcrumb\":{\"@id\":\"https://docs.initia.xyz/api-reference/routing/generate-transaction#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.initia.xyz/api-reference/routing/generate-transaction#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Router API\",\"item\":\"https://docs.initia.xyz/api-reference/router-api/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Routing\",\"item\":\"https://docs.initia.xyz/api-reference/routing/compute-route\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Generate Transaction\",\"item\":\"https://docs.initia.xyz/api-reference/routing/generate-transaction\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.initia.xyz/api-reference/routing/generate-transaction#apireference\",\"headline\":\"Generate Transaction\",\"name\":\"Generate Transaction\",\"description\":\"This is the second step when bridging tokens. After computing a route with Compute Route (POST /v2/fungible/route), pass the route details and your addresses to this endpoint. It returns signable transaction messages that you can broadcast to the source chain. The typical flow is: Compute Route → Generate Transaction → sign and broadcast → Track Transaction.\",\"url\":\"https://docs.initia.xyz/api-reference/routing/generate-transaction\",\"mainEntityOfPage\":{\"@id\":\"https://docs.initia.xyz/api-reference/routing/generate-transaction#webpage\"},\"dateModified\":\"2026-05-27T07:10:49.463Z\",\"publisher\":{\"@id\":\"https://docs.initia.xyz/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.initia.xyz#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Initia Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Initia Docs","nav":{"global":{"anchors":[{"anchor":"Twitter","icon":"twitter","href":"https://x.com/initia"},{"anchor":"Discord","icon":"discord","href":"https://discord.gg/initia"},{"anchor":"GitHub","icon":"github","href":"https://github.com/initia-labs"}]},"tabs":[{"tab":"Home","pages":[{"title":"Home","href":"/home/general/welcome"}]},{"tab":"User Guides","pages":[{"title":"User Guides","href":"/user-guides/wallet/auto-signing/introduction"}]},{"tab":"Nodes and Rollups","pages":[{"title":"Nodes and Rollups","href":"/nodes-and-rollups/introduction"}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/developers/introduction"}]},{"tab":"InterwovenKit","pages":[{"title":"InterwovenKit","href":"/interwovenkit/introduction"}]},{"tab":"API Reference","groups":[{"group":"API Reference","pages":[{"title":"Overview","href":"/api-reference/introduction"}]},{"group":"Router API","pages":[{"title":"Introduction","href":"/api-reference/router-api/introduction"},{"title":"Usage","href":"/api-reference/router-api/usage"},{"group":"Assets \u0026 Chains","pages":[{"title":"Get Assets","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml get /v2/fungible/assets","href":"/api-reference/assets-\u0026-chains/get-assets"},{"title":"Get Chains","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml get /v2/info/chains","href":"/api-reference/assets-\u0026-chains/get-chains"},{"title":"Get Balances","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml post /v2/info/balances","href":"/api-reference/assets-\u0026-chains/get-balances"}]},{"group":"Routing","pages":[{"title":"Compute Route","description":"This is the first step when bridging tokens between chains. Call this endpoint with your source and destination assets to find the optimal transfer route. The response includes the expected output amount, USD value estimates, and an ordered list of operations.\n\nAfter receiving a route, pass the full response (including `operations`) to the Generate Transaction endpoint (`POST /v2/fungible/msgs`) to get signable transaction messages you can broadcast.\n\nIf the route involves an IBC transfer between the Initia L1 chain and an external Cosmos chain, the endpoint also checks that the transfer fits within the current IBC rate-limit capacity. When the requested amount exceeds the remaining send or receive capacity, the request is rejected with a `400` error whose message reports the remaining capacity in human-readable units.","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml post /v2/fungible/route","href":"/api-reference/routing/compute-route"},{"title":"Generate Transaction","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml post /v2/fungible/msgs","href":"/api-reference/routing/generate-transaction"},{"title":"Get OP hook","description":"Generates OP hook data required for certain cross-chain routes that involve Optimistic bridge withdrawals with ERC-20 token conversion. When the Compute Route response includes `required_op_hook: true`, you must call this endpoint to obtain the hook payload before generating transaction messages.\n\nPass the returned hook data to the Generate Transaction endpoint (`POST /v2/fungible/msgs`) in the `signed_op_hook` field after signing it.","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml post /op-hook","href":"/api-reference/routing/get-op-hook"}]},{"group":"Tracking Transactions","pages":[{"title":"Track Transaction","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml post /v2/tx/track","href":"/api-reference/tracking-transactions/track-transaction"},{"title":"Get Transaction Status","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml get /v2/tx/status","href":"/api-reference/tracking-transactions/get-transaction-status"}]},{"group":"NFT","pages":[{"title":"NFT Transfer","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml post /nft","href":"/api-reference/nft/nft-transfer"}]},{"group":"RPC","pages":[{"title":"Cosmos RPC Proxy","deprecated":null,"version":null,"openapi":"/api-reference/router-api/openapi.yaml post /api/rpc/{chainId}","href":"/api-reference/rpc/cosmos-rpc-proxy"}]}]},{"group":"Indexer API","pages":[{"title":"Introduction","href":"/api-reference/rollup-indexer/introduction"},{"group":"Blocks","pages":[{"title":"Get blocks","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/block/v1/blocks","href":"/api-reference/blocks/get-blocks"},{"title":"Get block by height","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/block/v1/blocks/{height}","href":"/api-reference/blocks/get-block-by-height"},{"title":"Get average block time","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/block/v1/avg_blocktime","href":"/api-reference/blocks/get-average-block-time"}]},{"group":"Transactions","pages":[{"title":"Get transactions","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/txs","href":"/api-reference/transactions/get-transactions"},{"title":"Get transactions by account","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/txs/by_account/{account}","href":"/api-reference/transactions/get-transactions-by-account"},{"title":"Get transactions by height","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/txs/by_height/{height}","href":"/api-reference/transactions/get-transactions-by-height"},{"title":"Get transaction by hash","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/txs/{tx_hash}","href":"/api-reference/transactions/get-transaction-by-hash"}]},{"group":"EVM Transactions","pages":[{"title":"Get EVM transactions","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/evm-txs","href":"/api-reference/evm-transactions/get-evm-transactions"},{"title":"Get EVM transactions by account","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/evm-txs/by_account/{account}","href":"/api-reference/evm-transactions/get-evm-transactions-by-account"},{"title":"Get EVM transactions by height","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/evm-txs/by_height/{height}","href":"/api-reference/evm-transactions/get-evm-transactions-by-height"},{"title":"Get EVM transaction by hash","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/evm-txs/{tx_hash}","href":"/api-reference/evm-transactions/get-evm-transaction-by-hash"}]},{"group":"EVM Internal Transactions","pages":[{"title":"Get EVM internal transactions","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/evm-internal-txs","href":"/api-reference/evm-internal-transactions/get-evm-internal-transactions"},{"title":"Get EVM internal transactions by account","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/evm-internal-txs/by_account/{account}","href":"/api-reference/evm-internal-transactions/get-evm-internal-transactions-by-account"},{"title":"Get EVM internal transactions by height","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/evm-internal-txs/by_height/{height}","href":"/api-reference/evm-internal-transactions/get-evm-internal-transactions-by-height"},{"title":"Get EVM internal transactions by hash","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/tx/v1/evm-internal-txs/{tx_hash}","href":"/api-reference/evm-internal-transactions/get-evm-internal-transactions-by-hash"}]},{"group":"NFTs","pages":[{"title":"Get NFT collections","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/nft/v1/collections","href":"/api-reference/nfts/get-nft-collections"},{"title":"Get NFT collections by account","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/nft/v1/collections/by_account/{account}","href":"/api-reference/nfts/get-nft-collections-by-account"},{"title":"Get NFT collections by name","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/nft/v1/collections/by_name/{name}","href":"/api-reference/nfts/get-nft-collections-by-name"},{"title":"Get NFT collection details","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/nft/v1/collections/{collection_addr}","href":"/api-reference/nfts/get-nft-collection-details"},{"title":"Get NFT tokens by account","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/nft/v1/tokens/by_account/{account}","href":"/api-reference/nfts/get-nft-tokens-by-account"},{"title":"Get NFT tokens by collection","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/nft/v1/tokens/by_collection/{collection_addr}","href":"/api-reference/nfts/get-nft-tokens-by-collection"},{"title":"Get NFT transactions","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/nft/v1/txs/{collection_addr}/{token_id}","href":"/api-reference/nfts/get-nft-transactions"}]},{"group":"Rich List","pages":[{"title":"Get token holders","deprecated":null,"version":null,"openapi":"/api-reference/rollup-indexer/openapi.yaml get /indexer/richlist/v1/{denom}","href":"/api-reference/rich-list/get-token-holders"}]}]}]},{"tab":"AI","pages":[{"title":"AI","href":"/ai/overview"}]},{"tab":"Resources","pages":[{"title":"Resources","href":"/resources/developer/initia-l1"}]}]},"basePath":"","title":"Generate Transaction - Initia Docs","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DCDCdBVX.js","utils-ME8dDnLe.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-0e84ACsd.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-wgRBj-ia.js","snippetPresets-C11Sgb-o.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-C0lapOpP.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ZeRQV8fF.js","shallow-BupWh095.js","getApiPlaygroundDisplay-BnYQO2Ss.js","CodeSnippet-RKKOc8c_.js","CodeSnippets-Drf_m8wS.js","Page-Bevw23-4.js","getPastedJson-u6QiPzNZ.js","icon-Bb-CBSxO.js","MethodPill-F7l5AI7V.js","DuplicateIcon-IiAXkdSg.js","createIcon-FliI8EBc.js","DynamicMarkdown-B62XqCSI.js","SectionHeading-Dj31pT03.js","axios-vUo_bRtp.js","Markdown-BOgQCTwD.js","clsx-BIWXJmsZ.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DKZWslLH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-UDqbR6xh.js"]}