Create multi-step experiences with blinks using action chaining
In this section we cover how to use Action Chaining to create multi-step experiences with blinks. Our github has multiple action chaining examples, including
In this section we walk through the first example, swapping back and forth between tokens. For the remainder, visit the github links above to read the source.
In this example we create a blink that swaps from SOL to BONK in the first step, and then from BONK back to SOL in the second.The first action, app.get('SOL-BONK', async (c) => { ... } (link) returns an an input field (a linked parameterized action) for the user to specify the amount to swap. This is no different than a non-chained actions response.On submit, a POST call is made to app.post('SOL-BONK/:amount', async (c) => { ... } (link). This response includes both the transaction data as expected, but now also the links attribute with a next attribute in it. This next attribute powers action chaining.
The response.links.next.href URL is the relative path to the next action, and type: 'post' indicating that chaining is done through a POST request to the specified href. The alternative chaining method, type: 'inline', will be explained in the next section.
✋ Subsequent actions are served via POST, not GET ✋With chained actions, all actions after the first action are retrieved via POST calls rather than GET calls. This is because many subsequent actions may pass the results of the first action, such as the transaction signature or other personalized data, to the server to inform the conditions for the next action. This will help with ensuring no personal data is sent insecurely, and help prevent caching that would return incorrect effects.As a result, if you are designing a set of chained actions whose order may be flexible, you will need to write a GET method for the action when it is used at the beginning of the chain, and a POST for all subsequent use.
Once the user signs and the transaction succeeds, the client directs the blink to the next action in the chain, in this case app.post(/BONK-SOL', async (c) => { ... } (link), which returns metadata to render the second action in the chain.
const response: Action = { icon: LOGO, label: `Buy ${outputToken}`, title: `Buy ${outputToken}`, description: `Buy ${outputToken} with ${inputToken}. Choose a USD amount of ${inputToken} from the options below, or enter a custom amount.`, links: { actions: [ { type: "transaction", href: `/api/chaining/post/swap/BONK-SOL/{${amountParameterName}}`, label: `Buy ${outputToken} (chain)`, parameters: [ { name: amountParameterName, label: "Enter a custom USD amount", }, ], }, ], },};
The remainder of the user journey here has no chaining-specific logic. The user may set the amount they wish to swap and submit, which makes a call to app.post('/BONK-SOL/:amount', async (c) => { ... } (link) which then returns the transaction to sign and submit to the blockchain.See the full code here, or browse other action chaining examples here.
When using inline chaining, instead of returning a links.next.href string for the URL to call in the next step that would return an Action object, that Action object is returned directly in links.next.action.
This saves a network call and can help transition the client to then next step in the chain optimistically.See the full inline chaining example here.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Dialect Developer Documentation","colors":{"primary":"#0A7D62","light":"#55D799","dark":"#0D9373"},"logo":{"light":"https://res.cloudinary.com/dnxjhra4h/image/upload/dialect-docs/logo-light.svg","dark":"https://res.cloudinary.com/dnxjhra4h/image/upload/dialect-docs/logo-dark.svg"},"favicon":"https://mintcdn.com/dialect/PKXci_2cRxMAl-zL/favicon.svg?fit=max\u0026auto=format\u0026n=PKXci_2cRxMAl-zL\u0026q=85\u0026s=4c98497c960fd67ef2f9ea78baff584a","footer":{"socials":{"website":"https://www.dialect.to/","x":"https://x.com/saydialect","github":"https://github.com/dialectlabs","youtube":"https://www.youtube.com/@dialectlabs"}},"contextual":{"options":["copy","chatgpt","claude","cursor","mcp"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"dialect","hasAudioNarration":false,"actualSubdomain":"dialect","customDomains":["docs.dialect.to"],"gitSource":{"type":"github","owner":"dialectlabs","repo":"docs-mintlify","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a666019c59a04ddb69d5164","collectionId":"126e0c40-41e6-4037-8cda-b1fce5ec5834","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a666019c59a04ddb69d5164"},"feedback":{"thumbs":true,"issues":false,"edits":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6a666019c59a04ddb69d5164:success","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Standard Blinks Library","count":112},{"language":"default","tag":"Alerts \u0026 Events","count":64},{"language":"default","tag":"KAMINO","count":36},{"language":"default","tag":"API REFERENCE","count":34},{"language":"default","tag":"Blinks","count":30},{"language":"default","tag":"GETTING STARTED","count":22},{"language":"default","tag":"Markets and Positions (Beta)","count":18},{"language":"default","tag":"Integrate an Inbox","count":17},{"language":"default","tag":"JUPITER","count":15},{"language":"default","tag":"PROVIDER (API)","count":14}]},"assistantConfig":{},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"img{border-radius:12px}iframe[src*=\"youtu.be\"],iframe[src*=\"youtube.com\"]{border-radius:12px;overflow:hidden}"}],"page":{"pagePath":"blinks/blinks-provider/advanced/action-chaining","slug":"/blinks/blinks-provider/advanced/action-chaining","pageMetadata":{"title":"Action Chaining (Multi Step Blinks)","sidebarTitle":"Action Chaining","description":"Create multi-step experiences with blinks using action chaining","href":"/blinks/blinks-provider/advanced/action-chaining"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Create multi-step experiences with blinks using action chaining\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,..._provideComponents(),...props.components},{CodeBlock,Heading,OptimizedImage,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`In this section we cover how to use Action Chaining to create multi-step experiences with blinks. Our github has multiple action chaining examples, including`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/dialectlabs/actions/blob/main/examples/hono/examples/chaining/post/route.ts`,children:`Swapping back and forth between tokens`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/dialectlabs/actions/blob/main/examples/hono/examples/chaining/inline/route.ts`,children:`Inline chaining`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/dialectlabs/actions/blob/main/examples/hono/examples/chaining/minimal-post/route.ts`,children:`Action chaining with no transaction`})}),`\n`,_jsx(_components.li,{children:_jsx(_components.a,{href:`https://github.com/dialectlabs/actions/blob/main/examples/hono/examples/external-link/route.ts`,children:`External links`})}),`\n`]}),`\n`,_jsx(_components.p,{children:`In this section we walk through the first example, swapping back and forth between tokens. For the remainder, visit the github links above to read the source.`}),`\n`,_jsx(Heading,{level:`2`,id:`example-swapping-back-and-forth-between-tokens`,children:`Example: Swapping back and forth between tokens`}),`\n`,_jsx(OptimizedImage,{src:`https://res.cloudinary.com/dnxjhra4h/image/upload/f_auto,q_auto/dialect-docs/action-chaining-example.png`,alt:`Action chaining example showing swap flow`}),`\n`,_jsxs(_components.p,{children:[`In `,_jsx(_components.a,{href:`https://github.com/dialectlabs/actions/blob/main/examples/hono/examples/chaining/post/route.ts`,children:`this example`}),` we create a blink that swaps from SOL to BONK in the first step, and then from BONK back to SOL in the second.`]}),`\n`,_jsxs(_components.p,{children:[`The first action, `,_jsx(_components.code,{children:`app.get('SOL-BONK', async (c) => { ... }`}),` (`,_jsx(_components.a,{href:`https://github.com/dialectlabs/actions/blob/825a1d5a666c05bbd0315c34e3c7481ae6d5a9e3/examples/hono/examples/chaining/post/route.ts#L30`,children:`link`}),`) returns an an input field (a linked parameterized action) for the user to specify the amount to swap. This is no different than a non-chained actions response.`]}),`\n`,_jsxs(_components.p,{children:[`On submit, a POST call is made to `,_jsx(_components.code,{children:`app.post('SOL-BONK/:amount', async (c) => { ... }`}),` (`,_jsx(_components.a,{href:`https://github.com/dialectlabs/actions/blob/825a1d5a666c05bbd0315c34e3c7481ae6d5a9e3/examples/hono/examples/chaining/post/route.ts#L74`,children:`link`}),`). This response includes both the transaction data as expected, but now also the `,_jsx(_components.code,{children:`links`}),` attribute with a `,_jsx(_components.code,{children:`next`}),` attribute in it. This `,_jsx(_components.code,{children:`next`}),` attribute powers action chaining.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`9`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` response`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` ActionPostResponse`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` transaction:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` swapResponse`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`swapTransaction`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` links:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` next:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"post\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` href:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `/api/chaining/post/swap/BONK-SOL`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`};`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`response.links.next.href`}),` URL is the relative path to the next action, and `,_jsx(_components.code,{children:`type: 'post'`}),` indicating that chaining is done through a POST request to the specified href. The alternative chaining method, `,_jsx(_components.code,{children:`type: 'inline'`}),`, will be explained in the next section.`]}),`\n`,_jsxs(Tip,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`✋ Subsequent actions are served via POST, not GET ✋`})}),_jsx(_components.p,{children:`With chained actions, all actions after the first action are retrieved via POST calls rather than GET calls. This is because many subsequent actions may pass the results of the first action, such as the transaction signature or other personalized data, to the server to inform the conditions for the next action. This will help with ensuring no personal data is sent insecurely, and help prevent caching that would return incorrect effects.`}),_jsx(_components.p,{children:`As a result, if you are designing a set of chained actions whose order may be flexible, you will need to write a GET method for the action when it is used at the beginning of the chain, and a POST for all subsequent use.`})]}),`\n`,_jsxs(_components.p,{children:[`Once the user signs and the transaction succeeds, the client directs the blink to the next action in the chain, in this case `,_jsx(_components.code,{children:`app.post(/BONK-SOL', async (c) => { ... }`}),` (`,_jsx(_components.a,{href:`https://github.com/dialectlabs/actions/blob/825a1d5a666c05bbd0315c34e3c7481ae6d5a9e3/examples/hono/examples/chaining/post/route.ts#L136`,children:`link`}),`), which returns metadata to render the second action in the chain.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`21`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`21`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` response`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` Action`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` icon:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` LOGO`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` label:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `Buy \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`outputToken`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` title:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `Buy \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`outputToken`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` description:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `Buy \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`outputToken`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` with `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`inputToken`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`. Choose a USD amount of `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`inputToken`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" from the options below, or enter a custom amount.`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` links:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` actions:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"transaction\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` href:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `/api/chaining/post/swap/BONK-SOL/{\"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`amountParameterName`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"}`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` label:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `Buy \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`outputToken`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" (chain)`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` parameters:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` name:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` amountParameterName`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` label:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Enter a custom USD amount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`};`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The remainder of the user journey here has no chaining-specific logic. The user may set the amount they wish to swap and submit, which makes a call to `,_jsx(_components.code,{children:`app.post('/BONK-SOL/:amount', async (c) => { ... }`}),` (`,_jsx(_components.a,{href:`https://github.com/dialectlabs/actions/blob/825a1d5a666c05bbd0315c34e3c7481ae6d5a9e3/examples/hono/examples/chaining/post/route.ts#L166`,children:`link`}),`) which then returns the transaction to sign and submit to the blockchain.`]}),`\n`,_jsx(_components.p,{children:`See the full code here, or browse other action chaining examples here.`}),`\n`,_jsx(Heading,{level:`2`,id:`inline-chaining`,children:`Inline chaining`}),`\n`,_jsxs(_components.p,{children:[`When using inline chaining, instead of returning a `,_jsx(_components.code,{children:`links.next.href`}),` string for the URL to call in the next step that would return an Action object, that Action object is returned directly in `,_jsx(_components.code,{children:`links.next.action`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`14`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`14`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` response`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`:`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#4EC9B0`},children:` ActionPostResponse`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` transaction:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` swapResponse`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`swapTransaction`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` links:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` next:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'inline'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` action:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'action'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` icon:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '...'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` label:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '...'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`};`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`This saves a network call and can help transition the client to then next step in the chain optimistically.`}),`\n`,_jsxs(_components.p,{children:[`See the full inline chaining example `,_jsx(_components.a,{href:`https://github.com/dialectlabs/actions/blob/main/examples/hono/examples/chaining/inline/route.ts`,children:`here`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Action Chaining (Multi Step Blinks)","sidebarTitle":"Action Chaining","description":"Create multi-step experiences with blinks using action chaining","href":"/blinks/blinks-provider/advanced/action-chaining"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Example: Swapping back and forth between tokens","slug":"example-swapping-back-and-forth-between-tokens","depth":2,"children":[]},{"title":"Inline chaining","slug":"inline-chaining","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"dialect","siteName":"Dialect Developer Documentation","title":"Action Chaining (Multi Step Blinks) - Dialect Developer Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-27T13:53:50.535Z","originalFileLocation":"blinks/blinks-provider/advanced/action-chaining.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=\"system\"}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=\"Create multi-step experiences with blinks using action chaining\">\u003cmeta data-mint-head name=\"application-name\" content=\"Dialect Developer 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/dialect/oweI92O-5jxEP-ff/_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/dialect/oweI92O-5jxEP-ff/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/dialect/oweI92O-5jxEP-ff/_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/dialect/oweI92O-5jxEP-ff/_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/dialect/oweI92O-5jxEP-ff/_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/dialect/oweI92O-5jxEP-ff/_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/dialect/oweI92O-5jxEP-ff/_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/dialect/oweI92O-5jxEP-ff/_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/dialect/oweI92O-5jxEP-ff/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Action Chaining (Multi Step Blinks) - Dialect Developer Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Create multi-step experiences with blinks using action chaining\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Dialect Developer Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.dialect.to/blinks/blinks-provider/advanced/action-chaining\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://dialect.mintlify.app/_mintlify/api/og/v2?division=Advanced\u0026amp;title=Action+Chaining+%28Multi+Step+Blinks%29\u0026amp;description=Create+multi-step+experiences+with+blinks+using+action+chaining\u0026amp;theme=6ff924aef8d2d79878d4b4b3\u0026amp;signature=2eca001aee976110961abeeba9c60f7e202ee22837e49b1a099e3a54243f9f76\">\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=\"Action Chaining (Multi Step Blinks) - Dialect Developer Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Create multi-step experiences with blinks using action chaining\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://dialect.mintlify.app/_mintlify/api/og/v2?division=Advanced\u0026amp;title=Action+Chaining+%28Multi+Step+Blinks%29\u0026amp;description=Create+multi-step+experiences+with+blinks+using+action+chaining\u0026amp;theme=6ff924aef8d2d79878d4b4b3\u0026amp;signature=2eca001aee976110961abeeba9c60f7e202ee22837e49b1a099e3a54243f9f76\">\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/dialect/oweI92O-5jxEP-ff/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Dialect Developer Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0A7D62\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.dialect.to/blinks/blinks-provider/advanced/action-chaining\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/blinks/blinks-provider/advanced/action-chaining.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.dialect.to/#organization\",\"name\":\"Dialect Developer Documentation\",\"url\":\"https://docs.dialect.to\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://res.cloudinary.com/dnxjhra4h/image/upload/dialect-docs/logo-light.svg\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.dialect.to#website\",\"name\":\"Dialect Developer Documentation\",\"url\":\"https://docs.dialect.to\",\"publisher\":{\"@id\":\"https://docs.dialect.to/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.dialect.to/blinks/blinks-provider/advanced/action-chaining#webpage\",\"url\":\"https://docs.dialect.to/blinks/blinks-provider/advanced/action-chaining\",\"name\":\"Action Chaining (Multi Step Blinks)\",\"description\":\"Create multi-step experiences with blinks using action chaining\",\"dateModified\":\"2026-01-27T13:53:50.535Z\",\"isPartOf\":{\"@id\":\"https://docs.dialect.to#website\"},\"breadcrumb\":{\"@id\":\"https://docs.dialect.to/blinks/blinks-provider/advanced/action-chaining#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.dialect.to/blinks/blinks-provider/advanced/action-chaining#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"PROVIDER (API)\",\"item\":\"https://docs.dialect.to/blinks/blinks-provider/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Advanced\",\"item\":\"https://docs.dialect.to/blinks/blinks-provider/advanced/forms\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Action Chaining (Multi Step Blinks)\",\"item\":\"https://docs.dialect.to/blinks/blinks-provider/advanced/action-chaining\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.dialect.to/blinks/blinks-provider/advanced/action-chaining#article\",\"headline\":\"Action Chaining (Multi Step Blinks)\",\"name\":\"Action Chaining (Multi Step Blinks)\",\"description\":\"Create multi-step experiences with blinks using action chaining\",\"url\":\"https://docs.dialect.to/blinks/blinks-provider/advanced/action-chaining\",\"mainEntityOfPage\":{\"@id\":\"https://docs.dialect.to/blinks/blinks-provider/advanced/action-chaining#webpage\"},\"dateModified\":\"2026-01-27T13:53:50.535Z\",\"publisher\":{\"@id\":\"https://docs.dialect.to/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.dialect.to#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Dialect Developer Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Dialect Developer Documentation","nav":{"global":null,"tabs":[{"tab":"Introduction","pages":[{"title":"Introduction","href":""}]},{"tab":"Alerts \u0026 Events","pages":[{"title":"Alerts \u0026 Events","href":"/alerts"}]},{"tab":"Blinks","groups":[{"group":"GETTING STARTED","pages":[{"title":"Blinks","sidebarTitle":"Introduction","href":"/blinks"}]},{"group":"CLIENT","pages":[{"title":"Introduction","href":"/blinks/blinks-client/index"},{"title":"Headless Integration","href":"/blinks/blinks-client/integrate/headless/index"},{"group":"UI Components","pages":[{"title":"Blinks","href":"/blinks/blinks-client/integrate/ui-components/blinks"},{"title":"MiniBlinks","href":"/blinks/blinks-client/integrate/ui-components/miniblinks"},{"title":"Customize Blink Styles","href":"/blinks/blinks-client/integrate/ui-components/styling"}]},{"title":"Chrome Extension","href":"/blinks/blinks-client/integrate/chrome/index"}]},{"group":"PROVIDER (API)","pages":[{"title":"Introduction","href":"/blinks/blinks-provider/index"},{"title":"Build your first Blink","href":"/blinks/blinks-provider/build-your-first-blink"},{"title":"Fallbacks","href":"/blinks/blinks-provider/fallbacks"},{"title":"Register your Blink","href":"/blinks/blinks-provider/blink-registry"},{"group":"Advanced","pages":[{"title":"Forms","href":"/blinks/blinks-provider/advanced/forms"},{"title":"Metadata API","description":"Share curated information about your dapp, customized to individual users based on their public key","href":"/blinks/blinks-provider/advanced/metadata"},{"title":"Action Chaining (Multi Step Blinks)","sidebarTitle":"Action Chaining","href":"/blinks/blinks-provider/advanced/action-chaining"},{"title":"Multiple Transactions (Experimental)","sidebarTitle":"Multiple Transactions","description":"Handle complex operations that require multiple transactions to be executed sequentially","href":"/blinks/blinks-provider/advanced/multiple-transactions"},{"title":"Message Signing","href":"/blinks/blinks-provider/advanced/sign-message"},{"title":"Track Transactions","href":"/blinks/blinks-provider/advanced/track-tx"},{"title":"Error Handling","href":"/blinks/blinks-provider/advanced/error-handling"}]},{"group":"Guides","pages":[{"title":"Guides","sidebarTitle":"Overview","href":"/blinks/blinks-provider/guides/index"},{"title":"Build your first Blink","href":"/blinks/blinks-provider/build-your-first-blink"},{"title":"Tip Blink Monad","href":"/blinks/blinks-provider/guides/tip-blink"},{"title":"Feedback Blink","href":"/blinks/blinks-provider/guides/feedback-blink"}]}]},{"group":"STARTERS","pages":[{"title":"Overview","href":"/blinks/blinks-starters/index"},{"title":"Solana Starter","href":"/blinks/blinks-starters/solana"},{"title":"EVM Starter","href":"/blinks/blinks-starters/evm"}]},{"group":"API REFERENCE","pages":[{"group":"Blink Preview","pages":[{"title":"Get Blink Preview","deprecated":null,"version":null,"openapi":"/openapi/blinks.json get /v1/blink-preview","href":"/api-reference/blink-preview/get-blink-preview"}]},{"group":"Blink","pages":[{"title":"Get Full Blink","deprecated":null,"version":null,"openapi":"/openapi/blinks.json get /v1/blink","href":"/api-reference/blink/get-full-blink"},{"title":"Execute Blink Action","deprecated":null,"version":null,"openapi":"/openapi/blinks.json post /v1/blink","href":"/api-reference/blink/execute-blink-action"},{"title":"Execute Chained Action","deprecated":null,"version":null,"openapi":"/openapi/blinks.json post /v1/blink/chain","href":"/api-reference/blink/execute-chained-action"}]},{"group":"Blink Data Table","pages":[{"title":"Get Blink Data Table","deprecated":null,"version":null,"openapi":"/openapi/blinks.json get /v1/blink-data-table","href":"/api-reference/blink-data-table/get-blink-data-table"}]},{"group":"Blink Lists","pages":[{"title":"Get Blink List","deprecated":null,"version":null,"openapi":"/openapi/blinks.json get /v1/blink-lists/{id}","href":"/api-reference/blink-lists/get-blink-list"}]}]}]},{"tab":"Standard Blinks Library","pages":[{"title":"Standard Blinks Library","href":"/standard-blinks-library"}]},{"tab":"Markets and Positions (Beta)","pages":[{"title":"Markets and Positions (Beta)","href":"/markets"}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/mcp-server"}]},{"tab":"Release Notes","pages":[{"title":"Release Notes","href":"/release-notes"}]}]},"basePath":"","title":"Action Chaining (Multi Step Blinks) - Dialect Developer Documentation","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["a74be98ba7"],"chunks":["zoom-image-lightbox-BG6oD64b.js","lightbox-handle-r17bVUz3.js"]}