<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>swapapi Blog</title>
        <link>https://swapapi.dev/blog</link>
        <description>swapapi Blog</description>
        <lastBuildDate>Fri, 20 Mar 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>swapapi — free token swap API for developers and AI agents.</copyright>
        <item>
            <title><![CDATA[DEX Aggregator API Comparison]]></title>
            <link>https://swapapi.dev/blog/comparing-dex-aggregator-apis</link>
            <guid>https://swapapi.dev/blog/comparing-dex-aggregator-apis</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Side-by-side comparison of DEX aggregator APIs. Compare authentication, pricing, chain support, and response format across swapapi, 1inch, 0x, Li.Fi, Paraswap, and Jupiter.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tldr">TL;DR<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#tldr" class="hash-link" aria-label="Direct link to TL;DR" title="Direct link to TL;DR" translate="no">​</a></h2>
<p>swapapi is the only DEX aggregator API that requires no API key or authentication. It supports 46 EVM chains and returns executable calldata in a single GET request.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="comparison-table">Comparison Table<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#comparison-table" class="hash-link" aria-label="Direct link to Comparison Table" title="Direct link to Comparison Table" translate="no">​</a></h2>
<table><thead><tr><th>Feature</th><th>swapapi</th><th>1inch</th><th>0x</th><th>Li.Fi</th><th>Paraswap</th><th>Jupiter</th></tr></thead><tbody><tr><td>Authentication</td><td><strong>None</strong></td><td>API key required</td><td>API key required</td><td>API key (free tier)</td><td>API key required</td><td>None</td></tr><tr><td>Pricing</td><td><strong>Free</strong></td><td>Free tier + paid</td><td>Paid</td><td>Free tier + paid</td><td>Free tier + paid</td><td>Free</td></tr><tr><td>EVM Chains</td><td><strong>46</strong></td><td>~10</td><td>~8</td><td>20+</td><td>~7</td><td>0 (Solana only)</td></tr><tr><td>Returns calldata</td><td><strong>Yes</strong></td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td><td>Yes</td></tr><tr><td>Cross-chain</td><td>No</td><td>No</td><td>No</td><td>Yes</td><td>No</td><td>No</td></tr><tr><td>Response format</td><td><strong>JSON envelope</strong></td><td>JSON</td><td>JSON</td><td>JSON</td><td>JSON</td><td>JSON</td></tr><tr><td>Single GET request</td><td><strong>Yes</strong></td><td>No (POST)</td><td>No (POST)</td><td>No (POST)</td><td>Yes</td><td>Yes</td></tr><tr><td>BigInt handling</td><td><strong>Strings (safe)</strong></td><td>Mixed</td><td>Mixed</td><td>Mixed</td><td>Mixed</td><td>Strings</td></tr><tr><td>AI agent friendly</td><td><strong>Yes (designed for it)</strong></td><td>No (needs API key)</td><td>No (needs API key)</td><td>No (needs API key)</td><td>No (needs API key)</td><td>Solana only</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="provider-details">Provider Details<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#provider-details" class="hash-link" aria-label="Direct link to Provider Details" title="Direct link to Provider Details" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="swapapi">swapapi<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#swapapi" class="hash-link" aria-label="Direct link to swapapi" title="Direct link to swapapi" translate="no">​</a></h3>
<p><strong>Free / No auth / 46 chains</strong></p>
<p>The only DEX aggregator API built for autonomous systems. No API keys, no registration, no SDK required. A single GET request returns executable calldata across 46 EVM chains. BigInt values are serialized as strings for safe JSON parsing. Every response uses a consistent envelope format with status, price impact, and ready-to-sign transaction data.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1inch">1inch<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#1inch" class="hash-link" aria-label="Direct link to 1inch" title="Direct link to 1inch" translate="no">​</a></h3>
<p><strong>API key required / ~10 chains</strong></p>
<p>The market leader in DEX aggregation. Requires API key registration and has tiered rate limits. Recently migrated from GET to POST for swap endpoints, which was a breaking change for many integrations. Offers additional features like Fusion mode (gasless swaps) and limit orders, but the core swap API is comparable in functionality.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="0x-swap-api">0x (Swap API)<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#0x-swap-api" class="hash-link" aria-label="Direct link to 0x (Swap API)" title="Direct link to 0x (Swap API)" translate="no">​</a></h3>
<p><strong>API key required / ~8 chains</strong></p>
<p>Strong Ethereum and L2 liquidity with professional-grade APIs. Requires API key registration. Supports approximately 8 EVM chains. Well-documented but oriented toward enterprise integrations. Pricing is usage-based after the free tier.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="lifi">Li.Fi<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#lifi" class="hash-link" aria-label="Direct link to Li.Fi" title="Direct link to Li.Fi" translate="no">​</a></h3>
<p><strong>API key (free tier) / 20+ chains</strong></p>
<p>Cross-chain focused aggregator that bridges and swaps in a single transaction. Supports 20+ chains including some non-EVM networks. Requires API key, though a free tier is available. Best choice when you need cross-chain swaps, which swapapi does not support.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="paraswap">Paraswap<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#paraswap" class="hash-link" aria-label="Direct link to Paraswap" title="Direct link to Paraswap" translate="no">​</a></h3>
<p><strong>API key required / ~7 chains</strong></p>
<p>Competitive rates on supported chains with a focus on gas optimization. Requires API key registration. Supports approximately 7 EVM chains. Uses a GET request for quotes and a separate POST for building transactions.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jupiter">Jupiter<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#jupiter" class="hash-link" aria-label="Direct link to Jupiter" title="Direct link to Jupiter" translate="no">​</a></h3>
<p><strong>Free / Solana only</strong></p>
<p>The dominant DEX aggregator on Solana. Free, no API key required, and fast. However, it only supports Solana — no EVM chain support at all. If you need Solana swaps, Jupiter is the clear choice. For EVM chains, look elsewhere.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-to-choose-swapapi">When to Choose swapapi<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#when-to-choose-swapapi" class="hash-link" aria-label="Direct link to When to Choose swapapi" title="Direct link to When to Choose swapapi" translate="no">​</a></h2>
<p>swapapi is purpose-built for a specific set of use cases:</p>
<ul>
<li class=""><strong>AI agents and autonomous systems</strong> — No API key means no registration flow, no secrets management, no key rotation. An agent can start swapping tokens with a single HTTP call.</li>
<li class=""><strong>Rapid prototyping</strong> — Zero setup. No account creation, no SDK installation, no configuration. Start building in 30 seconds with a curl command.</li>
<li class=""><strong>Multi-chain EVM applications</strong> — 46 chains with one consistent API. The same endpoint, same parameters, same response format across Ethereum, Arbitrum, Base, Polygon, BSC, and 41 more.</li>
<li class=""><strong>No-auth requirements</strong> — If your architecture cannot support API keys (serverless functions, client-side apps, or embedded systems), swapapi is the only option.</li>
<li class=""><strong>BigInt-safe integrations</strong> — All large numbers are returned as strings, preventing JavaScript's Number.MAX_SAFE_INTEGER precision loss.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="quick-example">Quick Example<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#quick-example" class="hash-link" aria-label="Direct link to Quick Example" title="Direct link to Quick Example" translate="no">​</a></h2>
<p>One GET request, ready-to-sign calldata:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenOut=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  amount=1000000000000000000&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  sender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><br></span></code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"success"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"status"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Successful"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tokenFrom"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"symbol"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"ETH"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"decimals"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">18</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tokenTo"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"symbol"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"USDC"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"decimals"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">6</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"swapPrice"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">2847.53</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"priceImpact"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">0.0012</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"amountIn"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1000000000000000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"expectedAmountOut"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2847530000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tx"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"to"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x...router"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x...calldata"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"value"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1000000000000000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"gas"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"250000"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"timestamp"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2026-03-20T00:00:00.000Z"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related">Related<a href="https://swapapi.dev/blog/comparing-dex-aggregator-apis#related" class="hash-link" aria-label="Direct link to Related" title="Direct link to Related" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://swapapi.dev/blog/programmatic-token-swaps">Step-by-step tutorial</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/migrate-from-1inch">Migration guide from 1inch</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/supported-chains">Supported chains</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/swap-api-for-ai-agents">swapapi for AI agents</a></li>
</ul>]]></content:encoded>
            <category>Comparison</category>
            <category>DEX</category>
            <category>API</category>
        </item>
        <item>
            <title><![CDATA[How to Build a Crypto Trading Bot with a Swap API]]></title>
            <link>https://swapapi.dev/blog/crypto-trading-bot</link>
            <guid>https://swapapi.dev/blog/crypto-trading-bot</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Step-by-step guide to building a crypto trading bot using a DEX aggregator API. TypeScript and Python examples. No API key required.]]></description>
            <content:encoded><![CDATA[<p>This guide walks you through building a production-ready crypto trading bot using swapapi — the only DEX aggregator API that requires no API key or authentication.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-youll-build">What You'll Build<a href="https://swapapi.dev/blog/crypto-trading-bot#what-youll-build" class="hash-link" aria-label="Direct link to What You'll Build" title="Direct link to What You'll Build" translate="no">​</a></h2>
<p>A trading bot that:</p>
<ul>
<li class="">Fetches optimal swap routes across 46 EVM chains</li>
<li class="">Validates safety constraints before executing</li>
<li class="">Signs and submits transactions automatically</li>
<li class="">Handles errors and retries with exponential backoff</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="prerequisites">Prerequisites<a href="https://swapapi.dev/blog/crypto-trading-bot#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites" translate="no">​</a></h2>
<ul>
<li class="">Node.js 18+ or Python 3.9+</li>
<li class="">A wallet with private key (for testing, use a small amount)</li>
<li class="">Basic knowledge of TypeScript or Python</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-choose-your-strategy">Step 1: Choose Your Strategy<a href="https://swapapi.dev/blog/crypto-trading-bot#step-1-choose-your-strategy" class="hash-link" aria-label="Direct link to Step 1: Choose Your Strategy" title="Direct link to Step 1: Choose Your Strategy" translate="no">​</a></h2>
<p>Common automated trading strategies:</p>
<p><strong>DCA (Dollar-Cost Averaging):</strong> Buy a fixed amount at regular intervals regardless of price.</p>
<p><strong>Rebalancing:</strong> Maintain target portfolio weights by swapping when allocations drift.</p>
<p><strong>Arbitrage:</strong> Exploit price differences between DEXs (requires monitoring multiple sources).</p>
<p><strong>Signal-based:</strong> Execute trades based on technical indicators or external signals.</p>
<p>For this guide, we'll build a simple DCA bot that buys ETH with USDC every hour.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-set-up-the-project">Step 2: Set Up the Project<a href="https://swapapi.dev/blog/crypto-trading-bot#step-2-set-up-the-project" class="hash-link" aria-label="Direct link to Step 2: Set Up the Project" title="Direct link to Step 2: Set Up the Project" translate="no">​</a></h2>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>Remember: swapapi requires no API key. You can start making requests immediately.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="typescript-setup">TypeScript Setup<a href="https://swapapi.dev/blog/crypto-trading-bot#typescript-setup" class="hash-link" aria-label="Direct link to TypeScript Setup" title="Direct link to TypeScript Setup" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> init </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-y</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">npm</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> viem</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="python-setup">Python Setup<a href="https://swapapi.dev/blog/crypto-trading-bot#python-setup" class="hash-link" aria-label="Direct link to Python Setup" title="Direct link to Python Setup" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">pip </span><span class="token function" style="color:rgb(80, 250, 123)">install</span><span class="token plain"> web3 requests</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-fetch-swap-quotes">Step 3: Fetch Swap Quotes<a href="https://swapapi.dev/blog/crypto-trading-bot#step-3-fetch-swap-quotes" class="hash-link" aria-label="Direct link to Step 3: Fetch Swap Quotes" title="Direct link to Step 3: Fetch Swap Quotes" translate="no">​</a></h2>
<p>The core of your bot: fetching optimal swap routes and executable calldata.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="typescript">TypeScript<a href="https://swapapi.dev/blog/crypto-trading-bot#typescript" class="hash-link" aria-label="Direct link to TypeScript" title="Direct link to TypeScript" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> createWalletClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> http</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> parseEther </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'viem'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> base </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'viem/chains'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> privateKeyToAccount </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'viem/accounts'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">getSwapQuote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">params</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  chainId</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  tokenIn</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  tokenOut</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  amount</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  sender</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> url </span><span class="token operator">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">https://api.swapapi.dev/v1/swap/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">params</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation">chainId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">?</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">URLSearchParams</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      tokenIn</span><span class="token operator">:</span><span class="token plain"> params</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tokenIn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      tokenOut</span><span class="token operator">:</span><span class="token plain"> params</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tokenOut</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      amount</span><span class="token operator">:</span><span class="token plain"> params</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      sender</span><span class="token operator">:</span><span class="token plain"> params</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> res </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> data </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"API request failed"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">status </span><span class="token operator">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"NoRoute"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"No swap route found"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="python">Python<a href="https://swapapi.dev/blog/crypto-trading-bot#python" class="hash-link" aria-label="Direct link to Python" title="Direct link to Python" translate="no">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> requests</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">get_swap_quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">chain_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">int</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> token_in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> token_out</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                   amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    url </span><span class="token operator">=</span><span class="token plain"> </span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"https://api.swapapi.dev/v1/swap/</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">chain_id</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    params </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"tokenIn"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> token_in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"tokenOut"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> token_out</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"amount"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"sender"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> sender</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    response </span><span class="token operator">=</span><span class="token plain"> requests</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> params</span><span class="token operator">=</span><span class="token plain">params</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    result </span><span class="token operator">=</span><span class="token plain"> response</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">not</span><span class="token plain"> result</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"success"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">raise</span><span class="token plain"> Exception</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"API request failed"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> result</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"data"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"status"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"> </span><span class="token operator">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"NoRoute"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">raise</span><span class="token plain"> Exception</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"No swap route found"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> result</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"data"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4-add-safety-checks">Step 4: Add Safety Checks<a href="https://swapapi.dev/blog/crypto-trading-bot#step-4-add-safety-checks" class="hash-link" aria-label="Direct link to Step 4: Add Safety Checks" title="Direct link to Step 4: Add Safety Checks" translate="no">​</a></h2>
<p>Never execute trades without validating safety constraints.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="price-impact-check">Price Impact Check<a href="https://swapapi.dev/blog/crypto-trading-bot#price-impact-check" class="hash-link" aria-label="Direct link to Price Impact Check" title="Direct link to Price Impact Check" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">validateTrade</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">any</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> maxPriceImpact</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token operator">-</span><span class="token number">0.05</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Reject if price impact exceeds 5%</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">priceImpact </span><span class="token operator">&lt;</span><span class="token plain"> maxPriceImpact</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">Price impact </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation">priceImpact</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)"> exceeds limit </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">maxPriceImpact</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Check for partial fills</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">status </span><span class="token operator">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Partial"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Only partial fill available"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="maximum-trade-size">Maximum Trade Size<a href="https://swapapi.dev/blog/crypto-trading-bot#maximum-trade-size" class="hash-link" aria-label="Direct link to Maximum Trade Size" title="Direct link to Maximum Trade Size" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">MAX_TRADE_SIZE</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">parseEther</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"1"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// 1 ETH max</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">validateAmount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">amount</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token function" style="color:rgb(80, 250, 123)">BigInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">MAX_TRADE_SIZE</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Trade size exceeds maximum"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="simulate-before-submitting">Simulate Before Submitting<a href="https://swapapi.dev/blog/crypto-trading-bot#simulate-before-submitting" class="hash-link" aria-label="Direct link to Simulate Before Submitting" title="Direct link to Simulate Before Submitting" translate="no">​</a></h3>
<p>Use <code>eth_call</code> to simulate the transaction before broadcasting:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> createPublicClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> http </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'viem'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> publicClient </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">createPublicClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  chain</span><span class="token operator">:</span><span class="token plain"> base</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  transport</span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">http</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">simulateTx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">tx</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">any</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">try</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">publicClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">call</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      account</span><span class="token operator">:</span><span class="token plain"> tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">from</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      to</span><span class="token operator">:</span><span class="token plain"> tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">to</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      data</span><span class="token operator">:</span><span class="token plain"> tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      value</span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">BigInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Simulation failed:"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token boolean">false</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-5-execute-trades">Step 5: Execute Trades<a href="https://swapapi.dev/blog/crypto-trading-bot#step-5-execute-trades" class="hash-link" aria-label="Direct link to Step 5: Execute Trades" title="Direct link to Step 5: Execute Trades" translate="no">​</a></h2>
<p>Once validated, sign and submit the transaction.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="typescript-with-viem">TypeScript with Viem<a href="https://swapapi.dev/blog/crypto-trading-bot#typescript-with-viem" class="hash-link" aria-label="Direct link to TypeScript with Viem" title="Direct link to TypeScript with Viem" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">executeTrade</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">privateKey</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> chainId</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> account </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">privateKeyToAccount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">privateKey </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> sender </span><span class="token operator">=</span><span class="token plain"> account</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">address</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Get quote</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> quote </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">getSwapQuote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    chainId</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    tokenIn</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// USDC on Base</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    tokenOut</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x4200000000000000000000000000000000000006"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// WETH on Base</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    amount</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"10000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// 10 USDC (6 decimals)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Validate</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token function" style="color:rgb(80, 250, 123)">validateTrade</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Simulate</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> canExecute </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">simulateTx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">canExecute</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Transaction simulation failed"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Execute</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> walletClient </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">createWalletClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    account</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    chain</span><span class="token operator">:</span><span class="token plain"> base</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    transport</span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">http</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> hash </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> walletClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">sendTransaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    to</span><span class="token operator">:</span><span class="token plain"> quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">to </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    data</span><span class="token operator">:</span><span class="token plain"> quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">data </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    value</span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">BigInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    gas</span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">BigInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">gas</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> hash</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="python-with-web3py">Python with Web3.py<a href="https://swapapi.dev/blog/crypto-trading-bot#python-with-web3py" class="hash-link" aria-label="Direct link to Python with Web3.py" title="Direct link to Python with Web3.py" translate="no">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> web3 </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> Web3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> time</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">execute_trade</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">private_key</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> chain_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">int</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> rpc_url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    w3 </span><span class="token operator">=</span><span class="token plain"> Web3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Web3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">HTTPProvider</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">rpc_url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    account </span><span class="token operator">=</span><span class="token plain"> w3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">eth</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">account</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">from_key</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">private_key</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    sender </span><span class="token operator">=</span><span class="token plain"> account</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">address</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)"># Get quote</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    quote </span><span class="token operator">=</span><span class="token plain"> get_swap_quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        chain_id</span><span class="token operator">=</span><span class="token plain">chain_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        token_in</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        token_out</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"0x4200000000000000000000000000000000000006"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        amount</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"10000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        sender</span><span class="token operator">=</span><span class="token plain">sender</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)"># Build transaction</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    tx </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">'from'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">'to'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">'tx'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">'to'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">'data'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">'tx'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">'data'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">'value'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">int</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">'tx'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">'value'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">'gas'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">int</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">'tx'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">'gas'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">'gasPrice'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> w3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">eth</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">gas_price</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">'nonce'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> w3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">eth</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">get_transaction_count</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">'chainId'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> chain_id</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)"># Sign and send</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    signed_tx </span><span class="token operator">=</span><span class="token plain"> w3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">eth</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">account</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">sign_transaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> private_key</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    tx_hash </span><span class="token operator">=</span><span class="token plain"> w3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">eth</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">send_raw_transaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">signed_tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">rawTransaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> tx_hash</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token builtin" style="color:rgb(189, 147, 249)">hex</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-6-production-hardening">Step 6: Production Hardening<a href="https://swapapi.dev/blog/crypto-trading-bot#step-6-production-hardening" class="hash-link" aria-label="Direct link to Step 6: Production Hardening" title="Direct link to Step 6: Production Hardening" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="error-handling-with-exponential-backoff">Error Handling with Exponential Backoff<a href="https://swapapi.dev/blog/crypto-trading-bot#error-handling-with-exponential-backoff" class="hash-link" aria-label="Direct link to Error Handling with Exponential Backoff" title="Direct link to Error Handling with Exponential Backoff" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">executeWithRetry</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token function-variable function" style="color:rgb(80, 250, 123)">fn</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">Promise</span><span class="token operator">&lt;</span><span class="token builtin" style="color:rgb(189, 147, 249)">any</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> maxRetries </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> i </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i </span><span class="token operator">&lt;</span><span class="token plain"> maxRetries</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> i</span><span class="token operator">++</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">try</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">i </span><span class="token operator">===</span><span class="token plain"> maxRetries </span><span class="token operator">-</span><span class="token plain"> </span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> delay </span><span class="token operator">=</span><span class="token plain"> Math</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">pow</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> i</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">*</span><span class="token plain"> </span><span class="token number">1000</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// 1s, 2s, 4s</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">Retry </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">i </span><span class="token template-string interpolation operator">+</span><span class="token template-string interpolation"> </span><span class="token template-string interpolation number">1</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">maxRetries</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)"> after </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">delay</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">ms</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name builtin" style="color:rgb(189, 147, 249)">Promise</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">resolve </span><span class="token operator">=&gt;</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">setTimeout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">resolve</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> delay</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="gas-management">Gas Management<a href="https://swapapi.dev/blog/crypto-trading-bot#gas-management" class="hash-link" aria-label="Direct link to Gas Management" title="Direct link to Gas Management" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">getOptimalGasPrice</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> block </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> publicClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">getBlock</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Use base fee + 10% buffer</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> baseFee </span><span class="token operator">=</span><span class="token plain"> block</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">baseFeePerGas </span><span class="token operator">||</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">BigInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> priorityFee </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">parseGwei</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"0.1"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> baseFee </span><span class="token operator">+</span><span class="token plain"> priorityFee</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="rate-limit-awareness">Rate Limit Awareness<a href="https://swapapi.dev/blog/crypto-trading-bot#rate-limit-awareness" class="hash-link" aria-label="Direct link to Rate Limit Awareness" title="Direct link to Rate Limit Awareness" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> lastRequestTime </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">MIN_REQUEST_INTERVAL</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">2000</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// 2 seconds</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">throttledRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token function-variable function" style="color:rgb(80, 250, 123)">fn</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">=&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">Promise</span><span class="token operator">&lt;</span><span class="token builtin" style="color:rgb(189, 147, 249)">any</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> now </span><span class="token operator">=</span><span class="token plain"> Date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">now</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> timeSinceLastRequest </span><span class="token operator">=</span><span class="token plain"> now </span><span class="token operator">-</span><span class="token plain"> lastRequestTime</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">timeSinceLastRequest </span><span class="token operator">&lt;</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">MIN_REQUEST_INTERVAL</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name builtin" style="color:rgb(189, 147, 249)">Promise</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">resolve </span><span class="token operator">=&gt;</span><span class="token plain"> </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token function" style="color:rgb(80, 250, 123)">setTimeout</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">resolve</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">MIN_REQUEST_INTERVAL</span><span class="token plain"> </span><span class="token operator">-</span><span class="token plain"> timeSinceLastRequest</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  lastRequestTime </span><span class="token operator">=</span><span class="token plain"> Date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">now</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="logging-and-monitoring">Logging and Monitoring<a href="https://swapapi.dev/blog/crypto-trading-bot#logging-and-monitoring" class="hash-link" aria-label="Direct link to Logging and Monitoring" title="Direct link to Logging and Monitoring" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> winston </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'winston'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> logger </span><span class="token operator">=</span><span class="token plain"> winston</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">createLogger</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  level</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'info'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  format</span><span class="token operator">:</span><span class="token plain"> winston</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">format</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  transports</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">winston</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">transports</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">File</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> filename</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'trades.log'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">winston</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">transports</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">Console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Log every trade</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">logger</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">info</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'Trade executed'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  txHash</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  tokenIn</span><span class="token operator">:</span><span class="token plain"> quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tokenFrom</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token builtin" style="color:rgb(189, 147, 249)">symbol</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  tokenOut</span><span class="token operator">:</span><span class="token plain"> quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tokenTo</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token builtin" style="color:rgb(189, 147, 249)">symbol</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  amountIn</span><span class="token operator">:</span><span class="token plain"> quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">amountIn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  amountOut</span><span class="token operator">:</span><span class="token plain"> quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">expectedAmountOut</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  priceImpact</span><span class="token operator">:</span><span class="token plain"> quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">priceImpact</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  timestamp</span><span class="token operator">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Date</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">toISOString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-7-schedule-your-bot">Step 7: Schedule Your Bot<a href="https://swapapi.dev/blog/crypto-trading-bot#step-7-schedule-your-bot" class="hash-link" aria-label="Direct link to Step 7: Schedule Your Bot" title="Direct link to Step 7: Schedule Your Bot" translate="no">​</a></h2>
<p>Use cron or a scheduler to run your strategy:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// Run every hour</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> cron </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'node-cron'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">cron</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">schedule</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'0 * * * *'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'Running DCA strategy...'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">try</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> txHash </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">executeTrade</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">process</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">env</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token constant" style="color:rgb(189, 147, 249)">PRIVATE_KEY</span><span class="token operator">!</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">8453</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">Trade executed: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">txHash</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">catch</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'Trade failed:'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="complete-example">Complete Example<a href="https://swapapi.dev/blog/crypto-trading-bot#complete-example" class="hash-link" aria-label="Direct link to Complete Example" title="Direct link to Complete Example" translate="no">​</a></h2>
<p>Here's a minimal but complete trading bot:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> createWalletClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> http </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'viem'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> base </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'viem/chains'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> privateKeyToAccount </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'viem/accounts'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> cron </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'node-cron'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">PRIVATE_KEY</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> process</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">env</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token constant" style="color:rgb(189, 147, 249)">PRIVATE_KEY</span><span class="token operator">!</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">CHAIN_ID</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">8453</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// Base</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">runDCA</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> account </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">privateKeyToAccount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token constant" style="color:rgb(189, 147, 249)">PRIVATE_KEY</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Get quote</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> res </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">https://api.swapapi.dev/v1/swap/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation constant" style="color:rgb(189, 147, 249)">CHAIN_ID</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">?</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">tokenIn=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&amp;</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">tokenOut=0x4200000000000000000000000000000000000006&amp;</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">amount=10000000&amp;</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// 10 USDC</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">sender=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">account</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation">address</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> data </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">success </span><span class="token operator">||</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">status </span><span class="token operator">!==</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Successful"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Failed to get quote"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Execute</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> wallet </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">createWalletClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    account</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    chain</span><span class="token operator">:</span><span class="token plain"> base</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    transport</span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">http</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> hash </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> wallet</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">sendTransaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    to</span><span class="token operator">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">to </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    data</span><span class="token operator">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">data </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    value</span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">BigInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    gas</span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">BigInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">gas</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">DCA executed: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">hash</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Run every hour</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">cron</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">schedule</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'0 * * * *'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> runDCA</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'DCA bot started. Running every hour.'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="security-best-practices">Security Best Practices<a href="https://swapapi.dev/blog/crypto-trading-bot#security-best-practices" class="hash-link" aria-label="Direct link to Security Best Practices" title="Direct link to Security Best Practices" translate="no">​</a></h2>
<ol>
<li class=""><strong>Never commit private keys</strong> — Use environment variables</li>
<li class=""><strong>Start small</strong> — Test with minimal amounts</li>
<li class=""><strong>Monitor gas costs</strong> — Set maximum gas limits</li>
<li class=""><strong>Use multisig for large amounts</strong> — Require multiple signatures</li>
<li class=""><strong>Have a kill switch</strong> — Emergency stop function</li>
<li class=""><strong>Log everything</strong> — Audit trail for all trades</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related-resources">Related Resources<a href="https://swapapi.dev/blog/crypto-trading-bot#related-resources" class="hash-link" aria-label="Direct link to Related Resources" title="Direct link to Related Resources" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://docs.swapapi.dev/api-reference" target="_blank" rel="noopener noreferrer" class="">API Reference</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/slippage-guide">Slippage Guide</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/swap-api-for-ai-agents">AI Agent Integration</a></li>
</ul>]]></content:encoded>
            <category>Trading</category>
            <category>AI Agents</category>
            <category>Tutorial</category>
        </item>
        <item>
            <title><![CDATA[Free Crypto APIs That Don't Require an API Key]]></title>
            <link>https://swapapi.dev/blog/free-crypto-api</link>
            <guid>https://swapapi.dev/blog/free-crypto-api</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[List of free crypto and DeFi APIs that work without API keys or registration. Includes token swap, price data, RPC endpoints, and blockchain data APIs.]]></description>
            <content:encoded><![CDATA[<p>Most crypto APIs require signup, email verification, and API key management. This guide lists the free APIs that don't — just make a request and get data.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="token-swap-apis">Token Swap APIs<a href="https://swapapi.dev/blog/free-crypto-api#token-swap-apis" class="hash-link" aria-label="Direct link to Token Swap APIs" title="Direct link to Token Swap APIs" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="swapapi-dex-aggregator">swapapi (DEX Aggregator)<a href="https://swapapi.dev/blog/free-crypto-api#swapapi-dex-aggregator" class="hash-link" aria-label="Direct link to swapapi (DEX Aggregator)" title="Direct link to swapapi (DEX Aggregator)" translate="no">​</a></h3>
<p>The only DEX aggregator API that requires no authentication.</p>
<ul>
<li class=""><strong>What it does:</strong> Returns optimal swap routes and executable calldata across 46 EVM chains</li>
<li class=""><strong>Authentication:</strong> None</li>
<li class=""><strong>Rate limit:</strong> ~30 req/min per IP</li>
<li class=""><strong>Best for:</strong> Trading bots, AI agents, DeFi integrations</li>
</ul>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenOut=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  amount=1000000000000000000&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  sender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jupiter-solana">Jupiter (Solana)<a href="https://swapapi.dev/blog/free-crypto-api#jupiter-solana" class="hash-link" aria-label="Direct link to Jupiter (Solana)" title="Direct link to Jupiter (Solana)" translate="no">​</a></h3>
<p>The dominant DEX aggregator on Solana.</p>
<ul>
<li class=""><strong>What it does:</strong> Swap routing on Solana</li>
<li class=""><strong>Authentication:</strong> None</li>
<li class=""><strong>Chains:</strong> Solana only</li>
<li class=""><strong>Best for:</strong> Solana trading bots</li>
</ul>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://quote-api.jup.ag/v6/quote?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  inputMint=So11111111111111111111111111111111111111112&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  outputMint=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  amount=1000000000"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="price-data-apis">Price Data APIs<a href="https://swapapi.dev/blog/free-crypto-api#price-data-apis" class="hash-link" aria-label="Direct link to Price Data APIs" title="Direct link to Price Data APIs" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="coingecko-public-endpoints">CoinGecko (Public Endpoints)<a href="https://swapapi.dev/blog/free-crypto-api#coingecko-public-endpoints" class="hash-link" aria-label="Direct link to CoinGecko (Public Endpoints)" title="Direct link to CoinGecko (Public Endpoints)" translate="no">​</a></h3>
<p>Free cryptocurrency price data without API key (limited endpoints).</p>
<ul>
<li class=""><strong>What it does:</strong> Price, market cap, volume data</li>
<li class=""><strong>Authentication:</strong> None for basic endpoints</li>
<li class=""><strong>Rate limit:</strong> 10-30 calls/minute</li>
<li class=""><strong>Best for:</strong> Price displays, portfolio tracking</li>
</ul>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Get Bitcoin price in USD</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&amp;vs_currencies=usd"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="coinmarketcap-limited">CoinMarketCap (Limited)<a href="https://swapapi.dev/blog/free-crypto-api#coinmarketcap-limited" class="hash-link" aria-label="Direct link to CoinMarketCap (Limited)" title="Direct link to CoinMarketCap (Limited)" translate="no">​</a></h3>
<p>Basic crypto data without API key.</p>
<ul>
<li class=""><strong>What it does:</strong> Market data, rankings</li>
<li class=""><strong>Authentication:</strong> None for public endpoints</li>
<li class=""><strong>Rate limit:</strong> Very limited</li>
<li class=""><strong>Best for:</strong> Quick price checks</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="blockchain-data-apis">Blockchain Data APIs<a href="https://swapapi.dev/blog/free-crypto-api#blockchain-data-apis" class="hash-link" aria-label="Direct link to Blockchain Data APIs" title="Direct link to Blockchain Data APIs" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="public-rpc-endpoints">Public RPC Endpoints<a href="https://swapapi.dev/blog/free-crypto-api#public-rpc-endpoints" class="hash-link" aria-label="Direct link to Public RPC Endpoints" title="Direct link to Public RPC Endpoints" translate="no">​</a></h3>
<p>Most EVM chains have public RPC endpoints for reading blockchain data.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Ethereum</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-X</span><span class="token plain"> POST https://eth.llamarpc.com </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Content-Type: application/json"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Base</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-X</span><span class="token plain"> POST https://mainnet.base.org </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Content-Type: application/json"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Arbitrum</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-X</span><span class="token plain"> POST https://arb1.arbitrum.io/rpc </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Content-Type: application/json"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'</span><br></span></code></pre></div></div>
<p><strong>Note:</strong> Public RPCs are great for reads but may be rate-limited. For production, consider dedicated RPC providers.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="etherscan-limited">Etherscan (Limited)<a href="https://swapapi.dev/blog/free-crypto-api#etherscan-limited" class="hash-link" aria-label="Direct link to Etherscan (Limited)" title="Direct link to Etherscan (Limited)" translate="no">​</a></h3>
<p>Some read-only endpoints work without API key.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Get ETH balance (limited requests without API key)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.etherscan.io/api?module=account&amp;action=balance&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&amp;tag=latest"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="on-chain-data">On-Chain Data<a href="https://swapapi.dev/blog/free-crypto-api#on-chain-data" class="hash-link" aria-label="Direct link to On-Chain Data" title="Direct link to On-Chain Data" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="uniswap-subgraph-graphql">Uniswap Subgraph (GraphQL)<a href="https://swapapi.dev/blog/free-crypto-api#uniswap-subgraph-graphql" class="hash-link" aria-label="Direct link to Uniswap Subgraph (GraphQL)" title="Direct link to Uniswap Subgraph (GraphQL)" translate="no">​</a></h3>
<p>Query Uniswap V3 data directly from The Graph.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-X</span><span class="token plain"> POST https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3 </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Content-Type: application/json"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-d</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'{</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    "query": "{ pools(first: 5) { id token0 { symbol } token1 { symbol } } }"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  }'</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="defillama-api">DeFiLlama API<a href="https://swapapi.dev/blog/free-crypto-api#defillama-api" class="hash-link" aria-label="Direct link to DeFiLlama API" title="Direct link to DeFiLlama API" translate="no">​</a></h3>
<p>TVL and yield data without authentication.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Get protocol TVL</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.llama.fi/protocols"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Get chain TVL</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.llama.fi/chains"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="ipfs-gateways">IPFS Gateways<a href="https://swapapi.dev/blog/free-crypto-api#ipfs-gateways" class="hash-link" aria-label="Direct link to IPFS Gateways" title="Direct link to IPFS Gateways" translate="no">​</a></h2>
<p>Free IPFS gateways for decentralized storage.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Cloudflare IPFS gateway</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://cloudflare-ipfs.com/ipfs/Qm..."</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Pinata gateway</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://gateway.pinata.cloud/ipfs/Qm..."</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="comparison-table">Comparison Table<a href="https://swapapi.dev/blog/free-crypto-api#comparison-table" class="hash-link" aria-label="Direct link to Comparison Table" title="Direct link to Comparison Table" translate="no">​</a></h2>
<table><thead><tr><th>API</th><th>Use Case</th><th>Auth</th><th>Rate Limit</th><th>Best For</th></tr></thead><tbody><tr><td><strong>swapapi</strong></td><td>Token swaps</td><td>None</td><td>30/min</td><td>Trading bots, AI agents</td></tr><tr><td><strong>Jupiter</strong></td><td>Solana swaps</td><td>None</td><td>Fair</td><td>Solana trading</td></tr><tr><td><strong>CoinGecko</strong></td><td>Price data</td><td>None (basic)</td><td>10-30/min</td><td>Price displays</td></tr><tr><td><strong>Public RPCs</strong></td><td>Blockchain reads</td><td>None</td><td>Varies</td><td>Development, testing</td></tr><tr><td><strong>DeFiLlama</strong></td><td>TVL data</td><td>None</td><td>Generous</td><td>Analytics</td></tr><tr><td><strong>The Graph</strong></td><td>Protocol data</td><td>None</td><td>Varies</td><td>Custom queries</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-to-use-what">When to Use What<a href="https://swapapi.dev/blog/free-crypto-api#when-to-use-what" class="hash-link" aria-label="Direct link to When to Use What" title="Direct link to When to Use What" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-trading-bots">For Trading Bots<a href="https://swapapi.dev/blog/free-crypto-api#for-trading-bots" class="hash-link" aria-label="Direct link to For Trading Bots" title="Direct link to For Trading Bots" translate="no">​</a></h3>
<p>Use <strong>swapapi</strong> (EVM) or <strong>Jupiter</strong> (Solana). They return executable calldata — no need to construct transactions manually.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-price-tracking">For Price Tracking<a href="https://swapapi.dev/blog/free-crypto-api#for-price-tracking" class="hash-link" aria-label="Direct link to For Price Tracking" title="Direct link to For Price Tracking" translate="no">​</a></h3>
<p>Use <strong>CoinGecko</strong> for simple price checks. Use <strong>DeFiLlama</strong> for protocol analytics.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-blockchain-queries">For Blockchain Queries<a href="https://swapapi.dev/blog/free-crypto-api#for-blockchain-queries" class="hash-link" aria-label="Direct link to For Blockchain Queries" title="Direct link to For Blockchain Queries" translate="no">​</a></h3>
<p>Use <strong>public RPCs</strong> for development. Upgrade to dedicated RPC providers (Alchemy, QuickNode) for production with higher rate limits.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-protocol-data">For Protocol Data<a href="https://swapapi.dev/blog/free-crypto-api#for-protocol-data" class="hash-link" aria-label="Direct link to For Protocol Data" title="Direct link to For Protocol Data" translate="no">​</a></h3>
<p>Use <strong>The Graph</strong> subgraphs for complex queries on DeFi protocols.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="limitations-of-free-apis">Limitations of Free APIs<a href="https://swapapi.dev/blog/free-crypto-api#limitations-of-free-apis" class="hash-link" aria-label="Direct link to Limitations of Free APIs" title="Direct link to Limitations of Free APIs" translate="no">​</a></h2>
<p><strong>Rate Limits:</strong> Free APIs have rate limits. For high-frequency trading or production apps, you'll eventually need paid tiers.</p>
<p><strong>No Support:</strong> Free APIs typically don't come with dedicated support.</p>
<p><strong>Reliability:</strong> Public RPCs can be unstable. Use multiple fallbacks for production.</p>
<p><strong>Data Freshness:</strong> Some free price APIs have delays. For real-time trading, use the swap API directly.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="building-without-api-keys">Building Without API Keys<a href="https://swapapi.dev/blog/free-crypto-api#building-without-api-keys" class="hash-link" aria-label="Direct link to Building Without API Keys" title="Direct link to Building Without API Keys" translate="no">​</a></h2>
<p>The no-auth approach is perfect for:</p>
<ul>
<li class=""><strong>Rapid prototyping</strong> — Start building in minutes, not hours</li>
<li class=""><strong>Open source projects</strong> — Users don't need to sign up</li>
<li class=""><strong>AI agents</strong> — Autonomous systems can't fill out registration forms</li>
<li class=""><strong>Serverless functions</strong> — No secrets management needed</li>
<li class=""><strong>Educational projects</strong> — Lower barrier to entry</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="example-multi-api-integration">Example: Multi-API Integration<a href="https://swapapi.dev/blog/free-crypto-api#example-multi-api-integration" class="hash-link" aria-label="Direct link to Example: Multi-API Integration" title="Direct link to Example: Multi-API Integration" translate="no">​</a></h2>
<p>Here's how you might combine multiple free APIs:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">getTradeOpportunity</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// 1. Get price from CoinGecko</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> priceRes </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token string" style="color:rgb(255, 121, 198)">'https://api.coingecko.com/api/v3/simple/price?ids=ethereum&amp;vs_currencies=usd'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> ethereum</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> usd</span><span class="token operator">:</span><span class="token plain"> ethPrice </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> priceRes</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// 2. Get swap quote from swapapi</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> swapRes </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">https://api.swapapi.dev/v1/swap/1?</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">tokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&amp;</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">tokenOut=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&amp;</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">amount=1000000000000000000&amp;</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">sender=0x...</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> data</span><span class="token operator">:</span><span class="token plain"> quote </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> swapRes</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// 3. Analyze opportunity</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> swapPrice </span><span class="token operator">=</span><span class="token plain"> quote</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">swapPrice</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> priceDiff </span><span class="token operator">=</span><span class="token plain"> Math</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">abs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">swapPrice </span><span class="token operator">-</span><span class="token plain"> ethPrice</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">/</span><span class="token plain"> ethPrice</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    marketPrice</span><span class="token operator">:</span><span class="token plain"> ethPrice</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    swapPrice</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    priceDiff</span><span class="token operator">:</span><span class="token plain"> priceDiff </span><span class="token operator">*</span><span class="token plain"> </span><span class="token number">100</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    quote</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related-resources">Related Resources<a href="https://swapapi.dev/blog/free-crypto-api#related-resources" class="hash-link" aria-label="Direct link to Related Resources" title="Direct link to Related Resources" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://docs.swapapi.dev/" target="_blank" rel="noopener noreferrer" class="">swapapi Documentation</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/crypto-trading-bot">Building Trading Bots</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/comparing-dex-aggregator-apis">API Comparison</a></li>
</ul>]]></content:encoded>
            <category>API</category>
            <category>AI Agents</category>
            <category>Comparison</category>
        </item>
        <item>
            <title><![CDATA[Migrate from 1inch API to swapapi]]></title>
            <link>https://swapapi.dev/blog/migrate-from-1inch</link>
            <guid>https://swapapi.dev/blog/migrate-from-1inch</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Switch from 1inch Swap API to swapapi in minutes. No API key required. Side-by-side code comparison and parameter mapping guide.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tldr">TL;DR<a href="https://swapapi.dev/blog/migrate-from-1inch#tldr" class="hash-link" aria-label="Direct link to TL;DR" title="Direct link to TL;DR" translate="no">​</a></h2>
<p>swapapi is a drop-in alternative to 1inch's Swap API. No API key, no SDK, no account. One GET request returns the same calldata you're used to — across 46 EVM chains instead of ~10.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-developers-switch">Why Developers Switch<a href="https://swapapi.dev/blog/migrate-from-1inch#why-developers-switch" class="hash-link" aria-label="Direct link to Why Developers Switch" title="Direct link to Why Developers Switch" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="api-key-registration">API Key Registration<a href="https://swapapi.dev/blog/migrate-from-1inch#api-key-registration" class="hash-link" aria-label="Direct link to API Key Registration" title="Direct link to API Key Registration" translate="no">​</a></h3>
<p>1inch requires creating an account and generating an API key before making any requests. swapapi requires nothing — start with a curl command in 30 seconds.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="restrictive-rate-limits">Restrictive Rate Limits<a href="https://swapapi.dev/blog/migrate-from-1inch#restrictive-rate-limits" class="hash-link" aria-label="Direct link to Restrictive Rate Limits" title="Direct link to Restrictive Rate Limits" translate="no">​</a></h3>
<p>1inch rate limits vary by plan. The free tier is restrictive and paid plans can be expensive for high-volume applications. swapapi has generous rate limits with no paid tiers.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="breaking-api-changes">Breaking API Changes<a href="https://swapapi.dev/blog/migrate-from-1inch#breaking-api-changes" class="hash-link" aria-label="Direct link to Breaking API Changes" title="Direct link to Breaking API Changes" translate="no">​</a></h3>
<p>1inch changed their swap endpoint from GET to POST, breaking existing integrations. swapapi uses a simple GET request and maintains backward compatibility.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="zero-setup">Zero Setup<a href="https://swapapi.dev/blog/migrate-from-1inch#zero-setup" class="hash-link" aria-label="Direct link to Zero Setup" title="Direct link to Zero Setup" translate="no">​</a></h3>
<p>No SDK installation, no account creation, no environment variables. swapapi works with raw HTTP from any language, any platform, any autonomous agent.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="parameter-mapping">Parameter Mapping<a href="https://swapapi.dev/blog/migrate-from-1inch#parameter-mapping" class="hash-link" aria-label="Direct link to Parameter Mapping" title="Direct link to Parameter Mapping" translate="no">​</a></h2>
<p>Most parameters map directly. The main differences are naming and slippage format.</p>
<table><thead><tr><th>1inch Parameter</th><th>swapapi Parameter</th><th>Notes</th></tr></thead><tbody><tr><td>src</td><td><strong>tokenIn</strong></td><td>Same format (0x address)</td></tr><tr><td>dst</td><td><strong>tokenOut</strong></td><td>Same format (0x address)</td></tr><tr><td>amount</td><td><strong>amount</strong></td><td>Same (raw units, no decimals)</td></tr><tr><td>from</td><td><strong>sender</strong></td><td>Same (wallet address)</td></tr><tr><td>slippage</td><td><strong>maxSlippage</strong></td><td>1inch: 1-50 (percentage). swapapi: 0-1 (decimal). 1inch slippage=1 is swapapi maxSlippage=0.01</td></tr><tr><td>Authorization header</td><td><strong>(not needed)</strong></td><td>swapapi requires no authentication</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="before-and-after">Before and After<a href="https://swapapi.dev/blog/migrate-from-1inch#before-and-after" class="hash-link" aria-label="Direct link to Before and After" title="Direct link to Before and After" translate="no">​</a></h2>
<p><strong>1inch (before):</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-X</span><span class="token plain"> GET </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.1inch.dev/swap/v6.0/1/swap"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Authorization: Bearer YOUR_API_KEY"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Content-Type: application/json"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">--data</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'{</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    "src": "0xEeee...EEeE",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    "dst": "0xA0b8...eB48",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    "amount": "1000000000000000000",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    "from": "0xd8dA...6045",</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">    "slippage": 1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  }'</span><br></span></code></pre></div></div>
<p><strong>swapapi (after):</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenIn=0xEeee...EEeE&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenOut=0xA0b8...eB48&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  amount=1000000000000000000&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  sender=0xd8dA...6045"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># No API key</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># No headers</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># No request body</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Just a GET request</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="response-differences">Response Differences<a href="https://swapapi.dev/blog/migrate-from-1inch#response-differences" class="hash-link" aria-label="Direct link to Response Differences" title="Direct link to Response Differences" translate="no">​</a></h2>
<p>swapapi wraps every response in an envelope with a success flag and timestamp. The transaction data is structurally similar.</p>
<p><strong>1inch response:</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"tx"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"from"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xd8dA...6045"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"to"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x...router"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x...calldata"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"value"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1000000000000000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"gas"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">250000</span><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// number — unsafe for large values</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<p><strong>swapapi response:</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"success"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                           </span><span class="token comment" style="color:rgb(98, 114, 164)">// always check this first</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"status"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Successful"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                  </span><span class="token comment" style="color:rgb(98, 114, 164)">// "Successful" | "Partial" | "NoRoute"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"swapPrice"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">2847.53</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                    </span><span class="token comment" style="color:rgb(98, 114, 164)">// exchange rate</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"priceImpact"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">0.0012</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                   </span><span class="token comment" style="color:rgb(98, 114, 164)">// 0.12% as decimal</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"amountIn"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1000000000000000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">       </span><span class="token comment" style="color:rgb(98, 114, 164)">// string — BigInt safe</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"expectedAmountOut"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2847530000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">       </span><span class="token comment" style="color:rgb(98, 114, 164)">// string — BigInt safe</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tx"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"from"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xd8dA...6045"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"to"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x...router"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x...calldata"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"value"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1000000000000000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"gas"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"250000"</span><span class="token plain">                        </span><span class="token comment" style="color:rgb(98, 114, 164)">// string — BigInt safe</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"rpcUrls"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"https://..."</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain">              </span><span class="token comment" style="color:rgb(98, 114, 164)">// bonus: RPC endpoints for the chain</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"timestamp"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2026-03-20T..."</span><span class="token plain">              </span><span class="token comment" style="color:rgb(98, 114, 164)">// ISO 8601</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<p>Key differences: swapapi adds a <code>success</code> envelope, a <code>status</code> field (Successful/Partial/NoRoute), price impact data, and RPC URLs. All BigInt values are returned as strings to prevent JavaScript precision loss.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-you-gain-and-what-you-lose">What You Gain and What You Lose<a href="https://swapapi.dev/blog/migrate-from-1inch#what-you-gain-and-what-you-lose" class="hash-link" aria-label="Direct link to What You Gain and What You Lose" title="Direct link to What You Gain and What You Lose" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-you-gain">What You Gain<a href="https://swapapi.dev/blog/migrate-from-1inch#what-you-gain" class="hash-link" aria-label="Direct link to What You Gain" title="Direct link to What You Gain" translate="no">​</a></h3>
<ul>
<li class="">No authentication overhead — no keys, no headers, no secrets</li>
<li class="">46 EVM chains (vs ~10 on 1inch)</li>
<li class="">BigInt-safe string serialization for all large numbers</li>
<li class="">Built-in RPC URLs in every response</li>
<li class="">AI-agent ready — designed for autonomous systems</li>
<li class="">Consistent JSON envelope with status and price impact</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-you-lose">What You Lose<a href="https://swapapi.dev/blog/migrate-from-1inch#what-you-lose" class="hash-link" aria-label="Direct link to What You Lose" title="Direct link to What You Lose" translate="no">​</a></h3>
<ul>
<li class="">No Fusion mode (gasless swaps via resolvers)</li>
<li class="">No limit orders API</li>
<li class="">No portfolio/balance tracking API</li>
<li class="">No cross-chain swaps (for that, consider Li.Fi)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="migration-checklist">Migration Checklist<a href="https://swapapi.dev/blog/migrate-from-1inch#migration-checklist" class="hash-link" aria-label="Direct link to Migration Checklist" title="Direct link to Migration Checklist" translate="no">​</a></h2>
<ul class="contains-task-list containsTaskList_mC6p">
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Replace base URL: <code>api.1inch.dev/swap/v6.0/{chainId}</code> to <code>api.swapapi.dev/v1/swap/{chainId}</code></li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Remove Authorization header</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Rename <code>src</code> to <code>tokenIn</code></li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Rename <code>dst</code> to <code>tokenOut</code></li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Rename <code>from</code> to <code>sender</code></li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Convert slippage: divide by 100 (e.g., <code>slippage=1</code> becomes <code>maxSlippage=0.01</code>)</li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Update response parsing: unwrap <code>response.data.tx</code> instead of <code>response.tx</code></li>
<li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Test with a small amount first</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related">Related<a href="https://swapapi.dev/blog/migrate-from-1inch#related" class="hash-link" aria-label="Direct link to Related" title="Direct link to Related" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://swapapi.dev/blog/programmatic-token-swaps">Full integration tutorial</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/comparing-dex-aggregator-apis">Compare DEX aggregator APIs</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/supported-chains">Supported chains</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/slippage-guide">Slippage guide</a></li>
</ul>]]></content:encoded>
            <category>Migration</category>
            <category>API</category>
            <category>Integration</category>
        </item>
        <item>
            <title><![CDATA[How to Swap Tokens Programmatically]]></title>
            <link>https://swapapi.dev/blog/programmatic-token-swaps</link>
            <guid>https://swapapi.dev/blog/programmatic-token-swaps</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Step-by-step tutorial for swapping ERC-20 tokens using an API. Code examples in TypeScript, Python, Rust, and curl. No API key required.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tldr">TL;DR<a href="https://swapapi.dev/blog/programmatic-token-swaps#tldr" class="hash-link" aria-label="Direct link to TL;DR" title="Direct link to TL;DR" translate="no">​</a></h2>
<p>You can swap any ERC-20 token on 46 EVM chains with a single GET request to swapapi. No API key, no SDK, no account. The response includes executable calldata ready for on-chain submission.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="prerequisites">Prerequisites<a href="https://swapapi.dev/blog/programmatic-token-swaps#prerequisites" class="hash-link" aria-label="Direct link to Prerequisites" title="Direct link to Prerequisites" translate="no">​</a></h2>
<p>All you need is an HTTP client (curl, fetch, requests) and a wallet to sign the transaction. No registration, no API keys, no SDK installation.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-get-a-swap-quote">Step 1: Get a Swap Quote<a href="https://swapapi.dev/blog/programmatic-token-swaps#step-1-get-a-swap-quote" class="hash-link" aria-label="Direct link to Step 1: Get a Swap Quote" title="Direct link to Step 1: Get a Swap Quote" translate="no">​</a></h2>
<p>Send a GET request with the chain ID in the path, and the token addresses, amount, and sender as query parameters. This example swaps 1 ETH for USDC on Ethereum mainnet.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenOut=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  amount=1000000000000000000&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  sender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><br></span></code></pre></div></div>
<p>The native token address <code>0xEeee...EEeE</code> represents ETH (or the native gas token on any chain). USDC on Ethereum is <code>0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48</code>. The amount is in raw units (wei) — 1 ETH = 10^18 wei.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-understand-the-response">Step 2: Understand the Response<a href="https://swapapi.dev/blog/programmatic-token-swaps#step-2-understand-the-response" class="hash-link" aria-label="Direct link to Step 2: Understand the Response" title="Direct link to Step 2: Understand the Response" translate="no">​</a></h2>
<p>The API returns an envelope with <code>success</code>, <code>data</code>, and <code>timestamp</code>. The <code>data</code> object contains everything you need to execute the swap.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"success"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                                     </span><span class="token comment" style="color:rgb(98, 114, 164)">// always check this first</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"status"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Successful"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                            </span><span class="token comment" style="color:rgb(98, 114, 164)">// route found, tx ready</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tokenFrom"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"address"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xEeee...EEeE"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"symbol"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"ETH"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"name"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Ether"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"decimals"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">18</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tokenTo"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"address"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xA0b8...eB48"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"symbol"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"USDC"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"name"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"USD Coin"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"decimals"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">6</span><span class="token plain">                                    </span><span class="token comment" style="color:rgb(98, 114, 164)">// USDC uses 6 decimals</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"swapPrice"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">2500.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                              </span><span class="token comment" style="color:rgb(98, 114, 164)">// 1 ETH = 2500 USDC</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"priceImpact"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">0.0012</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                             </span><span class="token comment" style="color:rgb(98, 114, 164)">// 0.12% — ratio, not percentage</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"amountIn"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1000000000000000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                 </span><span class="token comment" style="color:rgb(98, 114, 164)">// 1 ETH in wei</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"expectedAmountOut"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2500000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                 </span><span class="token comment" style="color:rgb(98, 114, 164)">// 2500 USDC (6 decimals)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"minAmountOut"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2487500000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                      </span><span class="token comment" style="color:rgb(98, 114, 164)">// minimum after slippage</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tx"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain">                                            </span><span class="token comment" style="color:rgb(98, 114, 164)">// ready-to-sign transaction</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"from"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xd8dA...6045"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"to"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x...router"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                             </span><span class="token comment" style="color:rgb(98, 114, 164)">// router contract address</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x...calldata"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                         </span><span class="token comment" style="color:rgb(98, 114, 164)">// encoded swap calldata</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"value"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1000000000000000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">                  </span><span class="token comment" style="color:rgb(98, 114, 164)">// ETH to send (native swaps only)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"gas"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"250000"</span><span class="token plain">                                  </span><span class="token comment" style="color:rgb(98, 114, 164)">// estimated gas limit</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"timestamp"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2026-03-20T12:00:00.000Z"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-handle-edge-cases">Step 3: Handle Edge Cases<a href="https://swapapi.dev/blog/programmatic-token-swaps#step-3-handle-edge-cases" class="hash-link" aria-label="Direct link to Step 3: Handle Edge Cases" title="Direct link to Step 3: Handle Edge Cases" translate="no">​</a></h2>
<p>The <code>status</code> field has three possible values. Your code should handle all three.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="successful">Successful<a href="https://swapapi.dev/blog/programmatic-token-swaps#successful" class="hash-link" aria-label="Direct link to Successful" title="Direct link to Successful" translate="no">​</a></h3>
<p>A full route was found. The <code>tx</code> object is ready to sign and submit. The <code>expectedAmountOut</code> reflects the full amount.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="partial">Partial<a href="https://swapapi.dev/blog/programmatic-token-swaps#partial" class="hash-link" aria-label="Direct link to Partial" title="Direct link to Partial" translate="no">​</a></h3>
<p>Only part of the requested amount can be filled due to limited liquidity. The <code>tx</code> object is still present, but it will only swap the available portion. Check <code>amountIn</code> in the response to see how much will actually be swapped.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="noroute">NoRoute<a href="https://swapapi.dev/blog/programmatic-token-swaps#noroute" class="hash-link" aria-label="Direct link to NoRoute" title="Direct link to NoRoute" translate="no">​</a></h3>
<p>No swap route exists for this token pair on this chain. There is no <code>tx</code> object. Try a different token pair, a different chain, or a smaller amount.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4-execute-on-chain">Step 4: Execute On-Chain<a href="https://swapapi.dev/blog/programmatic-token-swaps#step-4-execute-on-chain" class="hash-link" aria-label="Direct link to Step 4: Execute On-Chain" title="Direct link to Step 4: Execute On-Chain" translate="no">​</a></h2>
<p>Take the <code>tx</code> object from the response and submit it using your preferred library.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="typescript-viem">TypeScript (viem)<a href="https://swapapi.dev/blog/programmatic-token-swaps#typescript-viem" class="hash-link" aria-label="Direct link to TypeScript (viem)" title="Direct link to TypeScript (viem)" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> createPublicClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> createWalletClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> http </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"viem"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> mainnet </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"viem/chains"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> privateKeyToAccount </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"viem/accounts"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 1. Get the swap quote</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> res </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?"</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">URLSearchParams</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    tokenIn</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    tokenOut</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    amount</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1000000000000000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    maxSlippage</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0.005"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    sender</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> data </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">status </span><span class="token operator">!==</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Successful"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"No route found"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// 2. Execute the swap on-chain</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> account </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">privateKeyToAccount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"0x..."</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> client </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">createWalletClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  account</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  chain</span><span class="token operator">:</span><span class="token plain"> mainnet</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  transport</span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">http</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> hash </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">sendTransaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  to</span><span class="token operator">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">to</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  data</span><span class="token operator">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  value</span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">BigInt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">value </span><span class="token operator">??</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Transaction hash:"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> hash</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="python-web3py">Python (web3.py)<a href="https://swapapi.dev/blog/programmatic-token-swaps#python-web3py" class="hash-link" aria-label="Direct link to Python (web3.py)" title="Direct link to Python (web3.py)" translate="no">​</a></h3>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> requests</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> web3 </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> Web3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 1. Get the swap quote</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">response </span><span class="token operator">=</span><span class="token plain"> requests</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    params</span><span class="token operator">=</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"tokenIn"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"tokenOut"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"amount"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"1000000000000000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"maxSlippage"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0.005"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string" style="color:rgb(255, 121, 198)">"sender"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">data </span><span class="token operator">=</span><span class="token plain"> response</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"data"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 2. Execute the swap on-chain</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">w3 </span><span class="token operator">=</span><span class="token plain"> Web3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Web3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">HTTPProvider</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"https://eth.llamarpc.com"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">tx </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token string" style="color:rgb(255, 121, 198)">"from"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token string" style="color:rgb(255, 121, 198)">"to"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Web3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">to_checksum_address</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"tx"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"to"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token string" style="color:rgb(255, 121, 198)">"data"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"tx"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"data"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token string" style="color:rgb(255, 121, 198)">"value"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">int</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"tx"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"value"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token string" style="color:rgb(255, 121, 198)">"gas"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">int</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"tx"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"gas"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">signed </span><span class="token operator">=</span><span class="token plain"> w3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">eth</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">account</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">sign_transaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> private_key</span><span class="token operator">=</span><span class="token string" style="color:rgb(255, 121, 198)">"0x..."</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">tx_hash </span><span class="token operator">=</span><span class="token plain"> w3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">eth</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">send_raw_transaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">signed</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">raw_transaction</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"Transaction hash: </span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">tx_hash</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token string-interpolation interpolation builtin" style="color:rgb(189, 147, 249)">hex</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="rust">Rust<a href="https://swapapi.dev/blog/programmatic-token-swaps#rust" class="hash-link" aria-label="Direct link to Rust" title="Direct link to Rust" translate="no">​</a></h3>
<div class="language-rust codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-rust codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">use</span><span class="token plain"> </span><span class="token namespace">reqwest</span><span class="token namespace punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token class-name">Client</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">use</span><span class="token plain"> </span><span class="token namespace">serde</span><span class="token namespace punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token class-name">Deserialize</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token attribute attr-name" style="color:rgb(241, 250, 140)">#[derive(Deserialize)]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">struct</span><span class="token plain"> </span><span class="token type-definition class-name">ApiResponse</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">bool</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token class-name">SwapData</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token attribute attr-name" style="color:rgb(241, 250, 140)">#[derive(Deserialize)]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">struct</span><span class="token plain"> </span><span class="token type-definition class-name">SwapData</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    status</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token attribute attr-name" style="color:rgb(241, 250, 140)">#[serde(rename = </span><span class="token attribute attr-name string" style="color:rgb(255, 121, 198)">"swapPrice"</span><span class="token attribute attr-name" style="color:rgb(241, 250, 140)">)]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    swap_price</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token class-name">Option</span><span class="token operator">&lt;</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">f64</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token attribute attr-name" style="color:rgb(241, 250, 140)">#[serde(rename = </span><span class="token attribute attr-name string" style="color:rgb(255, 121, 198)">"expectedAmountOut"</span><span class="token attribute attr-name" style="color:rgb(241, 250, 140)">)]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    expected_amount_out</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token class-name">Option</span><span class="token operator">&lt;</span><span class="token class-name">String</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token class-name">Option</span><span class="token operator">&lt;</span><span class="token class-name">TxData</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token attribute attr-name" style="color:rgb(241, 250, 140)">#[derive(Deserialize)]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">struct</span><span class="token plain"> </span><span class="token type-definition class-name">TxData</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    to</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token class-name">String</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    value</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token class-name">Option</span><span class="token operator">&lt;</span><span class="token class-name">String</span><span class="token operator">&gt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token attribute attr-name" style="color:rgb(241, 250, 140)">#[tokio::main]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">fn</span><span class="token plain"> </span><span class="token function-definition function" style="color:rgb(80, 250, 123)">main</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">-&gt;</span><span class="token plain"> </span><span class="token class-name">Result</span><span class="token operator">&lt;</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token class-name">Box</span><span class="token operator">&lt;</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">dyn</span><span class="token plain"> </span><span class="token namespace">std</span><span class="token namespace punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token namespace">error</span><span class="token namespace punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token class-name">Error</span><span class="token operator">&gt;&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> client </span><span class="token operator">=</span><span class="token plain"> </span><span class="token class-name">Client</span><span class="token punctuation" style="color:rgb(248, 248, 242)">::</span><span class="token function" style="color:rgb(80, 250, 123)">new</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">let</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token class-name">ApiResponse</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> client</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?tokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&amp;tokenOut=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&amp;amount=1000000000000000000&amp;maxSlippage=0.005&amp;sender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">send</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token operator">?</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token operator">?</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">success </span><span class="token operator">&amp;&amp;</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">status </span><span class="token operator">==</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Successful"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token macro property">println!</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Swap price: {:?}"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">swap_price</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token macro property">println!</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Expected output: {:?}"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">expected_amount_out</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token class-name">Ok</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-5-erc-20-approval-flow">Step 5: ERC-20 Approval Flow<a href="https://swapapi.dev/blog/programmatic-token-swaps#step-5-erc-20-approval-flow" class="hash-link" aria-label="Direct link to Step 5: ERC-20 Approval Flow" title="Direct link to Step 5: ERC-20 Approval Flow" translate="no">​</a></h2>
<p>When swapping native tokens (ETH, BNB, MATIC), no approval is needed — the value is sent directly with the transaction. But for ERC-20 to ERC-20 swaps, you must approve the router contract to spend your tokens first.</p>
<p>Call <code>approve(routerAddress, amount)</code> on the input token contract before submitting the swap transaction. The router address is the <code>tx.to</code> field from the swap response.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-usdt-approval-gotcha">The USDT Approval Gotcha<a href="https://swapapi.dev/blog/programmatic-token-swaps#the-usdt-approval-gotcha" class="hash-link" aria-label="Direct link to The USDT Approval Gotcha" title="Direct link to The USDT Approval Gotcha" translate="no">​</a></h3>
<p>USDT on Ethereum has a non-standard approve function that requires you to set the allowance to 0 before setting a new value. If the current allowance is non-zero, calling <code>approve</code> with a new value will revert. Always reset to 0 first:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// USDT requires resetting allowance to 0 before approving</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> usdt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">write</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">approve</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">routerAddress</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">0n</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> usdt</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">write</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">approve</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token plain">routerAddress</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-mistakes">Common Mistakes<a href="https://swapapi.dev/blog/programmatic-token-swaps#common-mistakes" class="hash-link" aria-label="Direct link to Common Mistakes" title="Direct link to Common Mistakes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="wrong-decimals">Wrong Decimals<a href="https://swapapi.dev/blog/programmatic-token-swaps#wrong-decimals" class="hash-link" aria-label="Direct link to Wrong Decimals" title="Direct link to Wrong Decimals" translate="no">​</a></h3>
<p>Token decimals vary by chain. USDC is 6 decimals on Ethereum but 18 decimals on BSC. USDT is 6 on Ethereum but 18 on BSC. Always check the <code>decimals</code> field in the response to interpret <code>expectedAmountOut</code> correctly.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="missing-erc-20-approval">Missing ERC-20 Approval<a href="https://swapapi.dev/blog/programmatic-token-swaps#missing-erc-20-approval" class="hash-link" aria-label="Direct link to Missing ERC-20 Approval" title="Direct link to Missing ERC-20 Approval" translate="no">​</a></h3>
<p>If you skip the approval step for ERC-20 swaps, the transaction will revert on-chain. You will pay gas but get nothing. Always approve before swapping tokens (not needed for native ETH/BNB/MATIC).</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="stale-calldata">Stale Calldata<a href="https://swapapi.dev/blog/programmatic-token-swaps#stale-calldata" class="hash-link" aria-label="Direct link to Stale Calldata" title="Direct link to Stale Calldata" translate="no">​</a></h3>
<p>The <code>tx</code> calldata includes a deadline. Submit the transaction within 30 seconds of receiving the quote. If you wait too long, the transaction will revert. Re-fetch the quote if needed.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="not-checking-priceimpact">Not Checking priceImpact<a href="https://swapapi.dev/blog/programmatic-token-swaps#not-checking-priceimpact" class="hash-link" aria-label="Direct link to Not Checking priceImpact" title="Direct link to Not Checking priceImpact" translate="no">​</a></h3>
<p>The <code>priceImpact</code> field tells you how much your trade moves the market. A value of -0.05 means you are getting 5% less than the market rate. Always check this before executing — high price impact usually means low liquidity. See our <a class="" href="https://swapapi.dev/blog/slippage-guide">price impact and slippage guide</a> for thresholds and best practices.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related">Related<a href="https://swapapi.dev/blog/programmatic-token-swaps#related" class="hash-link" aria-label="Direct link to Related" title="Direct link to Related" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://swapapi.dev/blog/slippage-guide">Slippage Guide</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/comparing-dex-aggregator-apis">Compare APIs</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/supported-chains">Supported Chains</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/swap-api-for-ai-agents">AI Agents</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/why-no-api-key">Why No API Key</a></li>
</ul>]]></content:encoded>
            <category>Tutorial</category>
            <category>API</category>
            <category>Integration</category>
        </item>
        <item>
            <title><![CDATA[Price Impact and Slippage in DEX Swaps]]></title>
            <link>https://swapapi.dev/blog/slippage-guide</link>
            <guid>https://swapapi.dev/blog/slippage-guide</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn how price impact and slippage work in decentralized token swaps. How to use the priceImpact field, set maxSlippage, and protect users from unfavorable trades.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tldr">TL;DR<a href="https://swapapi.dev/blog/slippage-guide#tldr" class="hash-link" aria-label="Direct link to TL;DR" title="Direct link to TL;DR" translate="no">​</a></h2>
<p>Price impact measures how much your trade moves the market price. Slippage is the maximum deviation you'll accept between quoted and executed price. swapapi returns both values so you can protect users from unfavorable trades.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-price-impact">What is Price Impact?<a href="https://swapapi.dev/blog/slippage-guide#what-is-price-impact" class="hash-link" aria-label="Direct link to What is Price Impact?" title="Direct link to What is Price Impact?" translate="no">​</a></h2>
<p>When you trade on a DEX, you are trading against a liquidity pool. The pool uses an automated market maker (AMM) formula to determine the price. Larger trades consume more liquidity, which moves the price further from the market rate.</p>
<p>swapapi returns <code>priceImpact</code> as a decimal ratio. A value of <code>-0.0012</code> means -0.12% (unfavorable — you get less than the market rate). Negative values always indicate an unfavorable price movement.</p>
<p>The relationship is straightforward: swapping 100 ETH will have a much higher price impact than swapping 0.1 ETH, because the larger trade consumes more of the pool's liquidity.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"swapPrice"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">2500.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">              </span><span class="token comment" style="color:rgb(98, 114, 164)">// quoted exchange rate</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"priceImpact"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">-0.0012</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">            </span><span class="token comment" style="color:rgb(98, 114, 164)">// -0.12% — unfavorable</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"expectedAmountOut"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2500000000"</span><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// already accounts for impact</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<p>Rule of thumb: reject any swap with a <code>priceImpact</code> below -0.05 (-5%). That level of impact usually means the pool has very low liquidity for this pair.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-slippage">What is Slippage?<a href="https://swapapi.dev/blog/slippage-guide#what-is-slippage" class="hash-link" aria-label="Direct link to What is Slippage?" title="Direct link to What is Slippage?" translate="no">​</a></h2>
<p>Slippage is the difference between the expected execution price (at quote time) and the actual execution price (on-chain). Between when you receive a quote and when your transaction is mined, other trades may execute against the same pool, changing the price.</p>
<p>The <code>maxSlippage</code> parameter controls how much price movement you will tolerate. It is a decimal between 0 and 1:</p>
<ul>
<li class=""><code>0.005</code> = 0.5% tolerance (the default)</li>
<li class=""><code>0.01</code> = 1% tolerance</li>
<li class=""><code>0.03</code> = 3% tolerance</li>
</ul>
<p>The API uses <code>maxSlippage</code> to calculate <code>minAmountOut</code> — the minimum acceptable output. If the actual output falls below this threshold, the transaction reverts on-chain and you keep your tokens (minus gas).</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenOut=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  amount=1000000000000000000&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  maxSlippage=0.005&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  sender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-minamountout-is-calculated">How minAmountOut is Calculated<a href="https://swapapi.dev/blog/slippage-guide#how-minamountout-is-calculated" class="hash-link" aria-label="Direct link to How minAmountOut is Calculated" title="Direct link to How minAmountOut is Calculated" translate="no">​</a></h2>
<p>The API computes <code>minAmountOut</code> from <code>expectedAmountOut</code> and <code>maxSlippage</code> using this formula:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">minAmountOut = expectedAmountOut × (1 − maxSlippage)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Example:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  expectedAmountOut = 2,500 USDC</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  maxSlippage       = 0.005 (0.5%)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  minAmountOut      = 2,500 × 0.995 = 2,487.50 USDC</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">In raw units (6 decimals):</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  expectedAmountOut = "2500000000"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  minAmountOut      = "2487500000"</span><br></span></code></pre></div></div>
<p>This value is encoded into the swap calldata. The on-chain router contract enforces it — if the actual output is less than <code>minAmountOut</code>, the entire transaction reverts.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="when-to-reject-swaps">When to Reject Swaps<a href="https://swapapi.dev/blog/slippage-guide#when-to-reject-swaps" class="hash-link" aria-label="Direct link to When to Reject Swaps" title="Direct link to When to Reject Swaps" translate="no">​</a></h2>
<p>Use the <code>priceImpact</code> field to decide whether to show or reject a swap. Here are recommended thresholds:</p>
<table><thead><tr><th>Price Impact</th><th>Meaning</th><th>Action</th></tr></thead><tbody><tr><td>&gt; -0.01</td><td>Normal</td><td>Proceed</td></tr><tr><td>-0.01 to -0.05</td><td>Elevated</td><td>Warn the user</td></tr><tr><td>-0.05 to -0.10</td><td>High</td><td>Likely reject</td></tr><tr><td>&lt; -0.10</td><td>Extreme</td><td>Definitely reject</td></tr></tbody></table>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> data </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">priceImpact </span><span class="token operator">&lt;</span><span class="token plain"> </span><span class="token operator">-</span><span class="token number">0.05</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">Price impact too high: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation">priceImpact </span><span class="token template-string interpolation operator">*</span><span class="token template-string interpolation"> </span><span class="token template-string interpolation number">100</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation function" style="color:rgb(80, 250, 123)">toFixed</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string interpolation number">2</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">%</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">priceImpact </span><span class="token operator">&lt;</span><span class="token plain"> </span><span class="token operator">-</span><span class="token number">0.01</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">warn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">Warning: </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation">priceImpact </span><span class="token template-string interpolation operator">*</span><span class="token template-string interpolation"> </span><span class="token template-string interpolation number">100</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation function" style="color:rgb(80, 250, 123)">toFixed</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string interpolation number">2</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">% price impact</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="fee-on-transfer-tokens">Fee-on-Transfer Tokens<a href="https://swapapi.dev/blog/slippage-guide#fee-on-transfer-tokens" class="hash-link" aria-label="Direct link to Fee-on-Transfer Tokens" title="Direct link to Fee-on-Transfer Tokens" translate="no">​</a></h2>
<p>Some tokens charge a tax on every transfer — typically 1% to 10% of the amount. These are sometimes called "tax tokens" or "reflection tokens." Common examples include SafeMoon-style tokens.</p>
<p>The API cannot detect fee-on-transfer tokens. The <code>expectedAmountOut</code> will not account for the transfer tax, so the actual amount you receive in your wallet will be lower than quoted.</p>
<p>If you know a token charges a transfer fee, increase <code>maxSlippage</code> to accommodate it. For a 5% tax token, set <code>maxSlippage</code> to at least <code>0.06</code> (6%) to prevent reverts. A common safe range for known tax tokens is <code>0.10</code> to <code>0.15</code> (10-15%).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="protecting-against-mev">Protecting Against MEV<a href="https://swapapi.dev/blog/slippage-guide#protecting-against-mev" class="hash-link" aria-label="Direct link to Protecting Against MEV" title="Direct link to Protecting Against MEV" translate="no">​</a></h2>
<p>MEV (Maximal Extractable Value) bots monitor the mempool for pending swap transactions. A common attack is the "sandwich" — the bot buys the token before your transaction executes (pushing the price up), then sells after your transaction (pocketing the difference).</p>
<p>Your <code>maxSlippage</code> setting is your primary defense. A lower slippage tolerance makes sandwich attacks less profitable, because the bot has less room to extract value. However, setting it too low increases the chance your transaction reverts due to normal price movement.</p>
<p><strong>Recommended values:</strong></p>
<ul>
<li class=""><strong>Major pairs</strong> (ETH/USDC, ETH/USDT): <code>0.005</code> (0.5%)</li>
<li class=""><strong>Mid-cap tokens</strong>: <code>0.01</code> to <code>0.02</code> (1-2%)</li>
<li class=""><strong>Small-cap / low liquidity</strong>: <code>0.02</code> to <code>0.03</code> (2-3%)</li>
</ul>
<p>The swap calldata also includes a deadline — submit the transaction within 30 seconds of receiving the quote. Stale transactions with outdated prices are more vulnerable to MEV extraction.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="best-practices-for-production">Best Practices for Production<a href="https://swapapi.dev/blog/slippage-guide#best-practices-for-production" class="hash-link" aria-label="Direct link to Best Practices for Production" title="Direct link to Best Practices for Production" translate="no">​</a></h2>
<ol>
<li class=""><strong>Always check <code>priceImpact</code></strong> before showing the swap to users. Display it prominently in the UI.</li>
<li class=""><strong>Set <code>maxSlippage</code> based on the token pair.</strong> Use 0.5% for major pairs, higher for smaller tokens. Let users override if they understand the risk.</li>
<li class=""><strong>Simulate with <code>eth_call</code></strong> before submitting. This catches reverts before you pay gas. Use the <code>tx</code> object directly in a static call.</li>
<li class=""><strong>Re-fetch quotes if more than 30 seconds have passed.</strong> The calldata includes a deadline and prices move. Stale quotes waste gas on reverts.</li>
<li class=""><strong>Display <code>minAmountOut</code> to users</strong> as "Minimum received." This is the guaranteed floor — the transaction reverts if actual output falls below it.</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related">Related<a href="https://swapapi.dev/blog/slippage-guide#related" class="hash-link" aria-label="Direct link to Related" title="Direct link to Related" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://swapapi.dev/blog/programmatic-token-swaps">Swap Tutorial</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/comparing-dex-aggregator-apis">Compare APIs</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/supported-chains">Supported Chains</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/swap-api-for-ai-agents">AI Agents</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/why-no-api-key">Why No API Key</a></li>
</ul>]]></content:encoded>
            <category>DEX</category>
            <category>DeFi</category>
            <category>Trading</category>
        </item>
        <item>
            <title><![CDATA[Stablecoin Swap API: Convert USDC, USDT, and DAI]]></title>
            <link>https://swapapi.dev/blog/stablecoin-swaps</link>
            <guid>https://swapapi.dev/blog/stablecoin-swaps</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Swap stablecoins programmatically across 46 EVM chains with no API key. Includes USDC, USDT, and DAI addresses with decimal gotchas for BSC, Rootstock, and Boba BNB.]]></description>
            <content:encoded><![CDATA[<p><strong>TL;DR:</strong> Swap USDC, USDT, and DAI across 46 EVM chains with a single GET request. No API key required. Watch out for decimal differences on BSC and Rootstock.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-stablecoin-swaps-matter">Why Stablecoin Swaps Matter<a href="https://swapapi.dev/blog/stablecoin-swaps#why-stablecoin-swaps-matter" class="hash-link" aria-label="Direct link to Why Stablecoin Swaps Matter" title="Direct link to Why Stablecoin Swaps Matter" translate="no">​</a></h2>
<p>Stablecoins are the backbone of DeFi trading:</p>
<ul>
<li class=""><strong>Price stability</strong> — Minimize exposure to volatile assets</li>
<li class=""><strong>Liquidity</strong> — Deep pools mean low slippage</li>
<li class=""><strong>Cross-chain</strong> — Move value between chains efficiently</li>
<li class=""><strong>Trading pairs</strong> — Most tokens trade against USDC or USDT</li>
</ul>
<p>With swapapi, you can swap stablecoins programmatically without managing API keys or authentication.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-stablecoin-addresses">Common Stablecoin Addresses<a href="https://swapapi.dev/blog/stablecoin-swaps#common-stablecoin-addresses" class="hash-link" aria-label="Direct link to Common Stablecoin Addresses" title="Direct link to Common Stablecoin Addresses" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="usdc-usd-coin">USDC (USD Coin)<a href="https://swapapi.dev/blog/stablecoin-swaps#usdc-usd-coin" class="hash-link" aria-label="Direct link to USDC (USD Coin)" title="Direct link to USDC (USD Coin)" translate="no">​</a></h3>
<p>USDC is the most widely used stablecoin in DeFi.</p>
<table><thead><tr><th>Chain</th><th>Chain ID</th><th>USDC Address</th><th>Decimals</th></tr></thead><tbody><tr><td>Ethereum</td><td>1</td><td><code>0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48</code></td><td>6</td></tr><tr><td>Arbitrum</td><td>42161</td><td><code>0xaf88d065e77c8cC2239327C5EDb3A432268e5831</code></td><td>6</td></tr><tr><td>Base</td><td>8453</td><td><code>0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913</code></td><td>6</td></tr><tr><td>Optimism</td><td>10</td><td><code>0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85</code></td><td>6</td></tr><tr><td>Polygon</td><td>137</td><td><code>0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359</code></td><td>6</td></tr><tr><td>BSC</td><td>56</td><td><code>0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d</code></td><td>18</td></tr><tr><td>Avalanche</td><td>43114</td><td><code>0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E</code></td><td>6</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>BSC Decimal Gotcha</div><div class="admonitionContent_BuS1"><p>USDC on BSC has <strong>18 decimals</strong>, not 6 like on other chains. Always verify decimals before constructing transactions.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="usdt-tether">USDT (Tether)<a href="https://swapapi.dev/blog/stablecoin-swaps#usdt-tether" class="hash-link" aria-label="Direct link to USDT (Tether)" title="Direct link to USDT (Tether)" translate="no">​</a></h3>
<p>USDT has the highest trading volume across centralized and decentralized exchanges.</p>
<table><thead><tr><th>Chain</th><th>Chain ID</th><th>USDT Address</th><th>Decimals</th></tr></thead><tbody><tr><td>Ethereum</td><td>1</td><td><code>0xdAC17F958D2ee523a2206206994597C13D831ec7</code></td><td>6</td></tr><tr><td>Arbitrum</td><td>42161</td><td><code>0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9</code></td><td>6</td></tr><tr><td>Base</td><td>8453</td><td><code>0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2</code></td><td>6</td></tr><tr><td>Optimism</td><td>10</td><td><code>0x94b008aA00579c1307B0EF2c499aD98a8ce58e58</code></td><td>6</td></tr><tr><td>Polygon</td><td>137</td><td><code>0xc2132D05D31c914a87C6611C10748AEb04B58e8F</code></td><td>6</td></tr><tr><td>BSC</td><td>56</td><td><code>0x55d398326f99059fF775485246999027B3197955</code></td><td>18</td></tr></tbody></table>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>BSC USDT Decimals</div><div class="admonitionContent_BuS1"><p>USDT on BSC also has <strong>18 decimals</strong> instead of 6. This is a common source of bugs when building cross-chain applications.</p></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="dai">DAI<a href="https://swapapi.dev/blog/stablecoin-swaps#dai" class="hash-link" aria-label="Direct link to DAI" title="Direct link to DAI" translate="no">​</a></h3>
<p>DAI is a decentralized stablecoin collateralized by crypto assets.</p>
<table><thead><tr><th>Chain</th><th>Chain ID</th><th>DAI Address</th><th>Decimals</th></tr></thead><tbody><tr><td>Ethereum</td><td>1</td><td><code>0x6B175474E89094C44Da98b954EedeAC495271d0F</code></td><td>18</td></tr><tr><td>Arbitrum</td><td>42161</td><td><code>0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1</code></td><td>18</td></tr><tr><td>Base</td><td>8453</td><td><code>0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb</code></td><td>18</td></tr><tr><td>Optimism</td><td>10</td><td><code>0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1</code></td><td>18</td></tr><tr><td>Polygon</td><td>137</td><td><code>0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063</code></td><td>18</td></tr><tr><td>BSC</td><td>56</td><td><code>0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3</code></td><td>18</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-decimal-gotcha">The Decimal Gotcha<a href="https://swapapi.dev/blog/stablecoin-swaps#the-decimal-gotcha" class="hash-link" aria-label="Direct link to The Decimal Gotcha" title="Direct link to The Decimal Gotcha" translate="no">​</a></h2>
<p><strong>Always check token decimals.</strong> The same token can have different decimals on different chains:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// Wrong on BSC - will send 1,000,000x too much</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> amount </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">100</span><span class="token plain"> </span><span class="token operator">*</span><span class="token plain"> </span><span class="token number">10</span><span class="token operator">**</span><span class="token number">6</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// Assumes 6 decimals</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Correct - always fetch decimals dynamically</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> decimals </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">getDecimals</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">chainId</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> tokenAddress</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> amount </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">100</span><span class="token plain"> </span><span class="token operator">*</span><span class="token plain"> </span><span class="token number">10</span><span class="token operator">**</span><span class="token plain">decimals</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="chains-with-non-standard-decimals">Chains with Non-Standard Decimals<a href="https://swapapi.dev/blog/stablecoin-swaps#chains-with-non-standard-decimals" class="hash-link" aria-label="Direct link to Chains with Non-Standard Decimals" title="Direct link to Chains with Non-Standard Decimals" translate="no">​</a></h3>
<ul>
<li class=""><strong>BSC (56):</strong> USDC and USDT use 18 decimals</li>
<li class=""><strong>Rootstock (30):</strong> USDT uses 18 decimals</li>
<li class=""><strong>Boba BNB (56288):</strong> USDT uses 18 decimals</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="swapping-stablecoins">Swapping Stablecoins<a href="https://swapapi.dev/blog/stablecoin-swaps#swapping-stablecoins" class="hash-link" aria-label="Direct link to Swapping Stablecoins" title="Direct link to Swapping Stablecoins" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="usdc-to-usdt-on-ethereum">USDC to USDT on Ethereum<a href="https://swapapi.dev/blog/stablecoin-swaps#usdc-to-usdt-on-ethereum" class="hash-link" aria-label="Direct link to USDC to USDT on Ethereum" title="Direct link to USDC to USDT on Ethereum" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenIn=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenOut=0xdAC17F958D2ee523a2206206994597C13D831ec7&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  amount=100000000&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  sender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="dai-to-usdc-on-arbitrum">DAI to USDC on Arbitrum<a href="https://swapapi.dev/blog/stablecoin-swaps#dai-to-usdc-on-arbitrum" class="hash-link" aria-label="Direct link to DAI to USDC on Arbitrum" title="Direct link to DAI to USDC on Arbitrum" translate="no">​</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/42161?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenIn=0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenOut=0xaf88d065e77c8cC2239327C5EDb3A432268e5831&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  amount=100000000000000000000&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  sender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><br></span></code></pre></div></div>
<div class="theme-admonition theme-admonition-tip admonition_xJq3 alert alert--success"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>tip</div><div class="admonitionContent_BuS1"><p>Stablecoin-to-stablecoin swaps typically have very low price impact (<code>&lt;0.01%</code>) due to deep liquidity pools.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="typescript-example">TypeScript Example<a href="https://swapapi.dev/blog/stablecoin-swaps#typescript-example" class="hash-link" aria-label="Direct link to TypeScript Example" title="Direct link to TypeScript Example" translate="no">​</a></h2>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">swapStablecoins</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  chainId</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  fromToken</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  toToken</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  amount</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  decimals</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  sender</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Convert human-readable amount to raw</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> rawAmount </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">amount </span><span class="token operator">*</span><span class="token plain"> </span><span class="token number">10</span><span class="token operator">**</span><span class="token plain">decimals</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">toString</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> res </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">https://api.swapapi.dev/v1/swap/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">chainId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">?</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">tokenIn=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">fromToken</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">&amp;</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">tokenOut=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">toToken</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">&amp;</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">amount=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">rawAmount</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">&amp;</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">sender=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">sender</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> data </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Swap failed"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">status </span><span class="token operator">!==</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Successful"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"No route found"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// For stablecoin swaps, price impact should be minimal</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">priceImpact </span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token number">0.001</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token builtin" style="color:rgb(189, 147, 249)">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">warn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"High price impact:"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">priceImpact</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Example: Swap 1000 USDC to USDT on Base</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> tx </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">swapStablecoins</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token number">8453</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token string" style="color:rgb(255, 121, 198)">"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// USDC</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token string" style="color:rgb(255, 121, 198)">"0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token comment" style="color:rgb(98, 114, 164)">// USDT</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token number">1000</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token number">6</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token string" style="color:rgb(255, 121, 198)">"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="best-practices">Best Practices<a href="https://swapapi.dev/blog/stablecoin-swaps#best-practices" class="hash-link" aria-label="Direct link to Best Practices" title="Direct link to Best Practices" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-always-verify-decimals">1. Always Verify Decimals<a href="https://swapapi.dev/blog/stablecoin-swaps#1-always-verify-decimals" class="hash-link" aria-label="Direct link to 1. Always Verify Decimals" title="Direct link to 1. Always Verify Decimals" translate="no">​</a></h3>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> createPublicClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> http</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> erc20Abi </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'viem'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> client </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">createPublicClient</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  chain</span><span class="token operator">:</span><span class="token plain"> base</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  transport</span><span class="token operator">:</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">http</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">getDecimals</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">chainId</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> tokenAddress</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> decimals </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> client</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">readContract</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    address</span><span class="token operator">:</span><span class="token plain"> tokenAddress </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">0x</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation builtin" style="color:rgb(189, 147, 249)">string</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    abi</span><span class="token operator">:</span><span class="token plain"> erc20Abi</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    functionName</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'decimals'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> decimals</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-check-price-impact">2. Check Price Impact<a href="https://swapapi.dev/blog/stablecoin-swaps#2-check-price-impact" class="hash-link" aria-label="Direct link to 2. Check Price Impact" title="Direct link to 2. Check Price Impact" translate="no">​</a></h3>
<p>Even stablecoin swaps can have price impact on low-liquidity chains:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">priceImpact </span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token number">0.001</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// 0.1% threshold</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Price impact too high for stablecoin swap"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-handle-different-addresses">3. Handle Different Addresses<a href="https://swapapi.dev/blog/stablecoin-swaps#3-handle-different-addresses" class="hash-link" aria-label="Direct link to 3. Handle Different Addresses" title="Direct link to 3. Handle Different Addresses" translate="no">​</a></h3>
<p>Don't hardcode addresses. Use a registry:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">STABLECOINS</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token constant" style="color:rgb(189, 147, 249)">USDC</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token number">1</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token number">42161</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xaf88d065e77c8cC2239327C5EDb3A432268e5831"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token number">8453</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token constant" style="color:rgb(189, 147, 249)">USDT</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token number">1</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xdAC17F958D2ee523a2206206994597C13D831ec7"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// ...</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-test-on-small-amounts-first">4. Test on Small Amounts First<a href="https://swapapi.dev/blog/stablecoin-swaps#4-test-on-small-amounts-first" class="hash-link" aria-label="Direct link to 4. Test on Small Amounts First" title="Direct link to 4. Test on Small Amounts First" translate="no">​</a></h3>
<p>Always test with $1-10 before executing larger trades.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="stablecoin-swap-strategies">Stablecoin Swap Strategies<a href="https://swapapi.dev/blog/stablecoin-swaps#stablecoin-swap-strategies" class="hash-link" aria-label="Direct link to Stablecoin Swap Strategies" title="Direct link to Stablecoin Swap Strategies" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-yield-optimization">1. Yield Optimization<a href="https://swapapi.dev/blog/stablecoin-swaps#1-yield-optimization" class="hash-link" aria-label="Direct link to 1. Yield Optimization" title="Direct link to 1. Yield Optimization" translate="no">​</a></h3>
<p>Move between stablecoins to capture the highest yield:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// If USDC lending APY &gt; USDT lending APY, swap to USDC</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">usdcApy </span><span class="token operator">&gt;</span><span class="token plain"> usdtApy </span><span class="token operator">+</span><span class="token plain"> </span><span class="token number">0.5</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">swapStablecoins</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">chainId</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">USDT</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">USDC</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">6</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-arbitrage">2. Arbitrage<a href="https://swapapi.dev/blog/stablecoin-swaps#2-arbitrage" class="hash-link" aria-label="Direct link to 2. Arbitrage" title="Direct link to 2. Arbitrage" translate="no">​</a></h3>
<p>Exploit price differences between stablecoins (requires monitoring):</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)">// If USDC trades at $1.001 and DAI at $1.000, buy DAI, sell USDC</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">usdcPrice </span><span class="token operator">&gt;</span><span class="token plain"> daiPrice </span><span class="token operator">+</span><span class="token plain"> threshold</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">swapStablecoins</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">chainId</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">USDC</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">DAI</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">6</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-rebalancing">3. Rebalancing<a href="https://swapapi.dev/blog/stablecoin-swaps#3-rebalancing" class="hash-link" aria-label="Direct link to 3. Rebalancing" title="Direct link to 3. Rebalancing" translate="no">​</a></h3>
<p>Maintain target portfolio weights:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> targetRatio </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">USDC</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">0.5</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">USDT</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">0.3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">DAI</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">0.2</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> currentRatio </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">getCurrentRatio</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)">// Rebalance if drift exceeds threshold</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">Math</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">abs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">currentRatio</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token constant" style="color:rgb(189, 147, 249)">USDC</span><span class="token plain"> </span><span class="token operator">-</span><span class="token plain"> targetRatio</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token constant" style="color:rgb(189, 147, 249)">USDC</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token number">0.05</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">rebalancePortfolio</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="response-example">Response Example<a href="https://swapapi.dev/blog/stablecoin-swaps#response-example" class="hash-link" aria-label="Direct link to Response Example" title="Direct link to Response Example" translate="no">​</a></h2>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"success"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"status"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Successful"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tokenFrom"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"address"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"symbol"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"USDC"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"decimals"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">6</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tokenTo"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"address"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0xdAC17F958D2ee523a2206206994597C13D831ec7"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"symbol"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"USDT"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"decimals"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">6</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"swapPrice"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">0.9998</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"priceImpact"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">0.0001</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"amountIn"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"100000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"expectedAmountOut"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"99980000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tx"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"to"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x..."</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x..."</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"value"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"gas"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"150000"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"timestamp"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2026-03-20T00:00:00.000Z"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="common-errors">Common Errors<a href="https://swapapi.dev/blog/stablecoin-swaps#common-errors" class="hash-link" aria-label="Direct link to Common Errors" title="Direct link to Common Errors" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="insufficient-liquidity">"Insufficient Liquidity"<a href="https://swapapi.dev/blog/stablecoin-swaps#insufficient-liquidity" class="hash-link" aria-label="Direct link to &quot;Insufficient Liquidity&quot;" title="Direct link to &quot;Insufficient Liquidity&quot;" translate="no">​</a></h3>
<p>Some chains have limited stablecoin liquidity. Try a different route or smaller amount.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="high-price-impact">"High Price Impact"<a href="https://swapapi.dev/blog/stablecoin-swaps#high-price-impact" class="hash-link" aria-label="Direct link to &quot;High Price Impact&quot;" title="Direct link to &quot;High Price Impact&quot;" translate="no">​</a></h3>
<p>Large trades on low-liquidity chains can move prices significantly. Split into smaller trades.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="invalid-token">"Invalid Token"<a href="https://swapapi.dev/blog/stablecoin-swaps#invalid-token" class="hash-link" aria-label="Direct link to &quot;Invalid Token&quot;" title="Direct link to &quot;Invalid Token&quot;" translate="no">​</a></h3>
<p>Verify the token address is correct for the chain. Many tokens have different addresses on different chains.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related-resources">Related Resources<a href="https://swapapi.dev/blog/stablecoin-swaps#related-resources" class="hash-link" aria-label="Direct link to Related Resources" title="Direct link to Related Resources" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://swapapi.dev/blog/supported-chains">Complete token addresses</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/crypto-trading-bot">Building trading bots</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/slippage-guide">Slippage guide</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/comparing-dex-aggregator-apis">API comparison</a></li>
</ul>]]></content:encoded>
            <category>Stablecoins</category>
            <category>Chains</category>
            <category>API</category>
        </item>
        <item>
            <title><![CDATA[Supported Chains and Token Addresses]]></title>
            <link>https://swapapi.dev/blog/supported-chains</link>
            <guid>https://swapapi.dev/blog/supported-chains</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Full list of 46 EVM chains supported by swapapi with chain IDs, native tokens, and common token contract addresses including USDC, USDT, DAI, and WETH.]]></description>
            <content:encoded><![CDATA[<p>swapapi supports 46 EVM-compatible blockchains. Use the chain ID in your API requests.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="major-chains">Major Chains<a href="https://swapapi.dev/blog/supported-chains#major-chains" class="hash-link" aria-label="Direct link to Major Chains" title="Direct link to Major Chains" translate="no">​</a></h2>
<table><thead><tr><th>Chain</th><th>Chain ID</th><th>Native Token</th><th>Notes</th></tr></thead><tbody><tr><td><strong>Ethereum</strong></td><td>1</td><td>ETH</td><td>Mainnet, highest liquidity</td></tr><tr><td><strong>Arbitrum</strong></td><td>42161</td><td>ETH</td><td>L2 rollup, low fees</td></tr><tr><td><strong>Base</strong></td><td>8453</td><td>ETH</td><td>Coinbase L2, fast finality</td></tr><tr><td><strong>Optimism</strong></td><td>10</td><td>ETH</td><td>L2 rollup, EVM equivalent</td></tr><tr><td><strong>Polygon</strong></td><td>137</td><td>POL</td><td>Sidechain, low fees</td></tr><tr><td><strong>BSC</strong></td><td>56</td><td>BNB</td><td>Binance chain, high throughput</td></tr><tr><td><strong>Avalanche</strong></td><td>43114</td><td>AVAX</td><td>Subnets, fast finality</td></tr><tr><td><strong>Fantom</strong></td><td>250</td><td>FTM</td><td>DAG-based, fast</td></tr><tr><td><strong>Gnosis</strong></td><td>100</td><td>xDAI</td><td>Stablecoin-native</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="layer-2-chains">Layer 2 Chains<a href="https://swapapi.dev/blog/supported-chains#layer-2-chains" class="hash-link" aria-label="Direct link to Layer 2 Chains" title="Direct link to Layer 2 Chains" translate="no">​</a></h2>
<table><thead><tr><th>Chain</th><th>Chain ID</th><th>Native Token</th><th>Type</th></tr></thead><tbody><tr><td><strong>Linea</strong></td><td>59144</td><td>ETH</td><td>zkEVM</td></tr><tr><td><strong>Scroll</strong></td><td>534352</td><td>ETH</td><td>zkEVM</td></tr><tr><td><strong>Blast</strong></td><td>81457</td><td>ETH</td><td>Optimistic L2</td></tr><tr><td><strong>Mantle</strong></td><td>5000</td><td>MNT</td><td>Modular L2</td></tr><tr><td><strong>Mode</strong></td><td>34443</td><td>ETH</td><td>Optimistic L2</td></tr><tr><td><strong>zkSync Era</strong></td><td>324</td><td>ETH</td><td>zkEVM</td></tr><tr><td><strong>Polygon zkEVM</strong></td><td>1101</td><td>ETH</td><td>zkEVM</td></tr><tr><td><strong>Arbitrum Nova</strong></td><td>42170</td><td>ETH</td><td>AnyTrust</td></tr><tr><td><strong>Taiko</strong></td><td>167000</td><td>ETH</td><td>Based rollup</td></tr><tr><td><strong>Manta</strong></td><td>169</td><td>ETH</td><td>zkEVM</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="emerging-chains">Emerging Chains<a href="https://swapapi.dev/blog/supported-chains#emerging-chains" class="hash-link" aria-label="Direct link to Emerging Chains" title="Direct link to Emerging Chains" translate="no">​</a></h2>
<table><thead><tr><th>Chain</th><th>Chain ID</th><th>Native Token</th><th>Notes</th></tr></thead><tbody><tr><td><strong>Sonic</strong></td><td>146</td><td>S</td><td>High throughput</td></tr><tr><td><strong>Berachain</strong></td><td>80094</td><td>BERA</td><td>EVM-compatible</td></tr><tr><td><strong>Monad</strong></td><td>143</td><td>MON</td><td>Parallel EVM</td></tr><tr><td><strong>MegaETH</strong></td><td>4326</td><td>ETH</td><td>Real-time blockchain</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="other-evm-chains">Other EVM Chains<a href="https://swapapi.dev/blog/supported-chains#other-evm-chains" class="hash-link" aria-label="Direct link to Other EVM Chains" title="Direct link to Other EVM Chains" translate="no">​</a></h2>
<table><thead><tr><th>Chain</th><th>Chain ID</th><th>Native Token</th><th>Notes</th></tr></thead><tbody><tr><td><strong>Celo</strong></td><td>42220</td><td>CELO</td><td>Mobile-first</td></tr><tr><td><strong>Cronos</strong></td><td>25</td><td>CRO</td><td>Crypto.com chain</td></tr><tr><td><strong>Kava</strong></td><td>2222</td><td>KAVA</td><td>Cosmos SDK</td></tr><tr><td><strong>Metis</strong></td><td>1088</td><td>METIS</td><td>Optimistic L2</td></tr><tr><td><strong>Filecoin</strong></td><td>314</td><td>FIL</td><td>Storage network</td></tr><tr><td><strong>Core</strong></td><td>1116</td><td>CORE</td><td>Bitcoin-aligned</td></tr><tr><td><strong>Boba</strong></td><td>288</td><td>ETH</td><td>Hybrid compute</td></tr><tr><td><strong>Boba BNB</strong></td><td>56288</td><td>BOBA</td><td>BNB L2</td></tr><tr><td><strong>BTTC</strong></td><td>199</td><td>BTT</td><td>BitTorrent</td></tr><tr><td><strong>Haqq</strong></td><td>11235</td><td>ISLM</td><td>Islamic finance</td></tr><tr><td><strong>Harmony</strong></td><td>1666600000</td><td>ONE</td><td>Sharded</td></tr><tr><td><strong>ThunderCore</strong></td><td>108</td><td>TT</td><td>PoS</td></tr><tr><td><strong>ZetaChain</strong></td><td>7000</td><td>ZETA</td><td>Omnichain</td></tr><tr><td><strong>SKALE Europa</strong></td><td>2046399126</td><td>sFUEL</td><td>App-specific</td></tr><tr><td><strong>Rootstock</strong></td><td>30</td><td>RBTC</td><td>Bitcoin sidechain</td></tr><tr><td><strong>zkLink</strong></td><td>810180</td><td>ETH</td><td>Aggregated L3</td></tr><tr><td><strong>ApeChain</strong></td><td>33139</td><td>APE</td><td>ApeCoin ecosystem</td></tr><tr><td><strong>Hemi</strong></td><td>43111</td><td>ETH</td><td>Modular</td></tr><tr><td><strong>Tatara</strong></td><td>129399</td><td>ETH</td><td>L2</td></tr><tr><td><strong>Katana</strong></td><td>747474</td><td>ETH</td><td>Game-focused</td></tr><tr><td><strong>HyperEVM</strong></td><td>999</td><td>HYPE</td><td>Hyperliquid</td></tr><tr><td><strong>Plasma</strong></td><td>9745</td><td>pETH</td><td>L2</td></tr><tr><td><strong>X Layer</strong></td><td>196</td><td>OKB</td><td>OKX chain</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="token-addresses-by-chain">Token Addresses by Chain<a href="https://swapapi.dev/blog/supported-chains#token-addresses-by-chain" class="hash-link" aria-label="Direct link to Token Addresses by Chain" title="Direct link to Token Addresses by Chain" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="ethereum-chain-id-1">Ethereum (Chain ID: 1)<a href="https://swapapi.dev/blog/supported-chains#ethereum-chain-id-1" class="hash-link" aria-label="Direct link to Ethereum (Chain ID: 1)" title="Direct link to Ethereum (Chain ID: 1)" translate="no">​</a></h3>
<table><thead><tr><th>Token</th><th>Address</th><th>Decimals</th></tr></thead><tbody><tr><td>WETH</td><td><code>0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2</code></td><td>18</td></tr><tr><td>USDC</td><td><code>0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48</code></td><td>6</td></tr><tr><td>USDT</td><td><code>0xdAC17F958D2ee523a2206206994597C13D831ec7</code></td><td>6</td></tr><tr><td>DAI</td><td><code>0x6B175474E89094C44Da98b954EedeAC495271d0F</code></td><td>18</td></tr><tr><td>WBTC</td><td><code>0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599</code></td><td>8</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="arbitrum-chain-id-42161">Arbitrum (Chain ID: 42161)<a href="https://swapapi.dev/blog/supported-chains#arbitrum-chain-id-42161" class="hash-link" aria-label="Direct link to Arbitrum (Chain ID: 42161)" title="Direct link to Arbitrum (Chain ID: 42161)" translate="no">​</a></h3>
<table><thead><tr><th>Token</th><th>Address</th><th>Decimals</th></tr></thead><tbody><tr><td>WETH</td><td><code>0x82aF49447D8a07e3bd95BD0d56f35241523fBab1</code></td><td>18</td></tr><tr><td>USDC</td><td><code>0xaf88d065e77c8cC2239327C5EDb3A432268e5831</code></td><td>6</td></tr><tr><td>USDT</td><td><code>0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9</code></td><td>6</td></tr><tr><td>DAI</td><td><code>0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1</code></td><td>18</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="base-chain-id-8453">Base (Chain ID: 8453)<a href="https://swapapi.dev/blog/supported-chains#base-chain-id-8453" class="hash-link" aria-label="Direct link to Base (Chain ID: 8453)" title="Direct link to Base (Chain ID: 8453)" translate="no">​</a></h3>
<table><thead><tr><th>Token</th><th>Address</th><th>Decimals</th></tr></thead><tbody><tr><td>WETH</td><td><code>0x4200000000000000000000000000000000000006</code></td><td>18</td></tr><tr><td>USDC</td><td><code>0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913</code></td><td>6</td></tr><tr><td>USDT</td><td><code>0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2</code></td><td>6</td></tr><tr><td>DAI</td><td><code>0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb</code></td><td>18</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="optimism-chain-id-10">Optimism (Chain ID: 10)<a href="https://swapapi.dev/blog/supported-chains#optimism-chain-id-10" class="hash-link" aria-label="Direct link to Optimism (Chain ID: 10)" title="Direct link to Optimism (Chain ID: 10)" translate="no">​</a></h3>
<table><thead><tr><th>Token</th><th>Address</th><th>Decimals</th></tr></thead><tbody><tr><td>WETH</td><td><code>0x4200000000000000000000000000000000000006</code></td><td>18</td></tr><tr><td>USDC</td><td><code>0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85</code></td><td>6</td></tr><tr><td>USDT</td><td><code>0x94b008aA00579c1307B0EF2c499aD98a8ce58e58</code></td><td>6</td></tr><tr><td>DAI</td><td><code>0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1</code></td><td>18</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="polygon-chain-id-137">Polygon (Chain ID: 137)<a href="https://swapapi.dev/blog/supported-chains#polygon-chain-id-137" class="hash-link" aria-label="Direct link to Polygon (Chain ID: 137)" title="Direct link to Polygon (Chain ID: 137)" translate="no">​</a></h3>
<table><thead><tr><th>Token</th><th>Address</th><th>Decimals</th></tr></thead><tbody><tr><td>WMATIC</td><td><code>0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270</code></td><td>18</td></tr><tr><td>USDC</td><td><code>0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359</code></td><td>6</td></tr><tr><td>USDT</td><td><code>0xc2132D05D31c914a87C6611C10748AEb04B58e8F</code></td><td>6</td></tr><tr><td>DAI</td><td><code>0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063</code></td><td>18</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="bsc-chain-id-56">BSC (Chain ID: 56)<a href="https://swapapi.dev/blog/supported-chains#bsc-chain-id-56" class="hash-link" aria-label="Direct link to BSC (Chain ID: 56)" title="Direct link to BSC (Chain ID: 56)" translate="no">​</a></h3>
<div class="theme-admonition theme-admonition-warning admonition_xJq3 alert alert--warning"><div class="admonitionHeading_Gvgb"><span class="admonitionIcon_Rf37"><svg viewBox="0 0 16 16"><path fill-rule="evenodd" d="M8.893 1.5c-.183-.31-.52-.5-.887-.5s-.703.19-.886.5L.138 13.499a.98.98 0 0 0 0 1.001c.193.31.53.501.886.501h13.964c.367 0 .704-.19.877-.5a1.03 1.03 0 0 0 .01-1.002L8.893 1.5zm.133 11.497H6.987v-2.003h2.039v2.003zm0-3.004H6.987V5.987h2.039v4.006z"></path></svg></span>Decimal Gotcha</div><div class="admonitionContent_BuS1"><p>USDC and USDT on BSC use <strong>18 decimals</strong> instead of 6. Always verify before constructing transactions.</p></div></div>
<table><thead><tr><th>Token</th><th>Address</th><th>Decimals</th></tr></thead><tbody><tr><td>WBNB</td><td><code>0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c</code></td><td>18</td></tr><tr><td>USDC</td><td><code>0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d</code></td><td><strong>18</strong></td></tr><tr><td>USDT</td><td><code>0x55d398326f99059fF775485246999027B3197955</code></td><td><strong>18</strong></td></tr><tr><td>DAI</td><td><code>0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3</code></td><td>18</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="making-requests">Making Requests<a href="https://swapapi.dev/blog/supported-chains#making-requests" class="hash-link" aria-label="Direct link to Making Requests" title="Direct link to Making Requests" translate="no">​</a></h2>
<p>Use the chain ID in the URL path:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Ethereum</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?tokenIn=...&amp;tokenOut=..."</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Arbitrum</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/42161?tokenIn=...&amp;tokenOut=..."</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Base</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/8453?tokenIn=...&amp;tokenOut=..."</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="typescript-helper">TypeScript Helper<a href="https://swapapi.dev/blog/supported-chains#typescript-helper" class="hash-link" aria-label="Direct link to TypeScript Helper" title="Direct link to TypeScript Helper" translate="no">​</a></h2>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token constant" style="color:rgb(189, 147, 249)">CHAINS</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token constant" style="color:rgb(189, 147, 249)">ETHEREUM</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">1</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token constant" style="color:rgb(189, 147, 249)">ARBITRUM</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">42161</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token constant" style="color:rgb(189, 147, 249)">BASE</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">8453</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token constant" style="color:rgb(189, 147, 249)">OPTIMISM</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">10</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token constant" style="color:rgb(189, 147, 249)">POLYGON</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">137</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token constant" style="color:rgb(189, 147, 249)">BSC</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">56</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token constant" style="color:rgb(189, 147, 249)">AVALANCHE</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">43114</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token constant" style="color:rgb(189, 147, 249)">FANTOM</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">250</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// ... add more as needed</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">as</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">swap</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">chainId</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> tokenIn</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> tokenOut</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> amount</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> res </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">https://api.swapapi.dev/v1/swap/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">chainId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">?</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">tokenIn=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">tokenIn</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">&amp;tokenOut=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">tokenOut</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">&amp;amount=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">amount</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">&amp;sender=</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">sender</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="chain-selection-tips">Chain Selection Tips<a href="https://swapapi.dev/blog/supported-chains#chain-selection-tips" class="hash-link" aria-label="Direct link to Chain Selection Tips" title="Direct link to Chain Selection Tips" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-lowest-fees">For Lowest Fees<a href="https://swapapi.dev/blog/supported-chains#for-lowest-fees" class="hash-link" aria-label="Direct link to For Lowest Fees" title="Direct link to For Lowest Fees" translate="no">​</a></h3>
<p>Use L2s: Base, Arbitrum, Optimism. Transaction costs are 10-100x lower than Ethereum mainnet.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-highest-liquidity">For Highest Liquidity<a href="https://swapapi.dev/blog/supported-chains#for-highest-liquidity" class="hash-link" aria-label="Direct link to For Highest Liquidity" title="Direct link to For Highest Liquidity" translate="no">​</a></h3>
<p>Ethereum mainnet has the deepest liquidity for major tokens.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-fastest-finality">For Fastest Finality<a href="https://swapapi.dev/blog/supported-chains#for-fastest-finality" class="hash-link" aria-label="Direct link to For Fastest Finality" title="Direct link to For Fastest Finality" translate="no">​</a></h3>
<p>Base and Arbitrum have ~1-2 second block times.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="for-specific-ecosystems">For Specific Ecosystems<a href="https://swapapi.dev/blog/supported-chains#for-specific-ecosystems" class="hash-link" aria-label="Direct link to For Specific Ecosystems" title="Direct link to For Specific Ecosystems" translate="no">​</a></h3>
<ul>
<li class=""><strong>DeFi:</strong> Ethereum, Arbitrum, Base</li>
<li class=""><strong>Gaming:</strong> Polygon, Immutable X</li>
<li class=""><strong>Payments:</strong> Gnosis (xDAI), Base</li>
<li class=""><strong>Bitcoin-aligned:</strong> Rootstock</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="adding-new-chains">Adding New Chains<a href="https://swapapi.dev/blog/supported-chains#adding-new-chains" class="hash-link" aria-label="Direct link to Adding New Chains" title="Direct link to Adding New Chains" translate="no">​</a></h2>
<p>Request new chain support by opening an issue on GitHub. We prioritize chains with:</p>
<ol>
<li class="">Significant TVL and user base</li>
<li class="">Active DeFi ecosystem</li>
<li class="">Reliable RPC infrastructure</li>
<li class="">Community demand</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related-resources">Related Resources<a href="https://swapapi.dev/blog/supported-chains#related-resources" class="hash-link" aria-label="Direct link to Related Resources" title="Direct link to Related Resources" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://swapapi.dev/blog/stablecoin-swaps">Stablecoin addresses</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/crypto-trading-bot">Building trading bots</a></li>
<li class=""><a href="https://docs.swapapi.dev/api-reference" target="_blank" rel="noopener noreferrer" class="">API reference</a></li>
</ul>]]></content:encoded>
            <category>Chains</category>
            <category>Stablecoins</category>
            <category>API</category>
        </item>
        <item>
            <title><![CDATA[Swap API for AI Agents and Autonomous Systems]]></title>
            <link>https://swapapi.dev/blog/swap-api-for-ai-agents</link>
            <guid>https://swapapi.dev/blog/swap-api-for-ai-agents</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The only DEX aggregator API designed for AI agents. No API keys, no OAuth, no accounts. Returns executable calldata that autonomous systems can submit directly.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tldr">TL;DR<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#tldr" class="hash-link" aria-label="Direct link to TL;DR" title="Direct link to TL;DR" translate="no">​</a></h2>
<p>swapapi is the only DEX aggregator API that AI agents can use without API keys. A single GET request returns executable calldata — no authentication, no SDK, no state management.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-problem-ai-agents-are-locked-out-of-defi">The Problem: AI Agents Are Locked Out of DeFi<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#the-problem-ai-agents-are-locked-out-of-defi" class="hash-link" aria-label="Direct link to The Problem: AI Agents Are Locked Out of DeFi" title="Direct link to The Problem: AI Agents Are Locked Out of DeFi" translate="no">​</a></h2>
<p>AI agents — built with ChatGPT, Claude, LangChain, AutoGPT, and similar frameworks — increasingly need to interact with DeFi protocols. But every major DEX aggregator API requires API key registration.</p>
<ul>
<li class="">AI agents cannot create accounts on third-party websites</li>
<li class="">AI agents cannot manage OAuth tokens or handle API key rotation</li>
<li class="">Even "free tier" APIs require signup — an AI agent can't fill out a registration form</li>
<li class="">Multiple environments (dev, staging, prod) each need separate keys and configuration</li>
<li class="">Result: agents are locked out of DeFi unless a human pre-configures credentials</li>
</ul>
<p>This creates a fundamental bottleneck. The agent can reason about trades, analyze market conditions, and decide when to swap — but it can't execute without human-provisioned API keys.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-swapapi-works-for-ai-agents">Why swapapi Works for AI Agents<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#why-swapapi-works-for-ai-agents" class="hash-link" aria-label="Direct link to Why swapapi Works for AI Agents" title="Direct link to Why swapapi Works for AI Agents" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="no-authentication">No Authentication<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#no-authentication" class="hash-link" aria-label="Direct link to No Authentication" title="Direct link to No Authentication" translate="no">​</a></h3>
<p>A raw HTTP GET is all you need. No headers, no tokens, no state. Any process that can make an HTTP request can use this API.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="single-request">Single Request<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#single-request" class="hash-link" aria-label="Direct link to Single Request" title="Direct link to Single Request" translate="no">​</a></h3>
<p>One GET request returns everything: quote, calldata, RPC URLs. No multi-step flows, no session management.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="deterministic-interface">Deterministic Interface<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#deterministic-interface" class="hash-link" aria-label="Direct link to Deterministic Interface" title="Direct link to Deterministic Interface" translate="no">​</a></h3>
<p>Same URL structure, same response format, every time. No versioning surprises, no breaking changes to tool definitions.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="built-in-rpc-urls">Built-in RPC URLs<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#built-in-rpc-urls" class="hash-link" aria-label="Direct link to Built-in RPC URLs" title="Direct link to Built-in RPC URLs" translate="no">​</a></h3>
<p>No need to configure RPC providers. The response includes up to 5 ranked public RPCs for the target chain.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="bigint-safe">BigInt-safe<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#bigint-safe" class="hash-link" aria-label="Direct link to BigInt-safe" title="Direct link to BigInt-safe" translate="no">​</a></h3>
<p>All large numbers are strings. No precision loss in JSON parsing — critical for agents that process amounts programmatically.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="error-handling">Error Handling<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#error-handling" class="hash-link" aria-label="Direct link to Error Handling" title="Direct link to Error Handling" translate="no">​</a></h3>
<p>Machine-readable error codes (INVALID_PARAMS, UNSUPPORTED_CHAIN, RATE_LIMITED). Agents can branch on error type without parsing messages.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="integration-patterns">Integration Patterns<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#integration-patterns" class="hash-link" aria-label="Direct link to Integration Patterns" title="Direct link to Integration Patterns" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="chatgpt-plugin--openai-function-calling">ChatGPT Plugin / OpenAI Function Calling<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#chatgpt-plugin--openai-function-calling" class="hash-link" aria-label="Direct link to ChatGPT Plugin / OpenAI Function Calling" title="Direct link to ChatGPT Plugin / OpenAI Function Calling" translate="no">​</a></h3>
<p>swapapi serves <code>/.well-known/ai-plugin.json</code> — the standard ChatGPT plugin manifest. The OpenAPI spec at <code>/openapi.json</code> enables function calling out of the box.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"schema_version"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"v1"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"name_for_human"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Token Swap API"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"name_for_model"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"swap_tokens"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"description_for_model"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Swap ERC-20 tokens on 46 EVM chains. No API key needed."</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"auth"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"none"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"api"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"openapi"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"url"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/openapi.json"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="claude-mcp--tool-use">Claude MCP / Tool Use<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#claude-mcp--tool-use" class="hash-link" aria-label="Direct link to Claude MCP / Tool Use" title="Direct link to Claude MCP / Tool Use" translate="no">​</a></h3>
<p>Define swapapi as a tool in Claude's tool use format. The agent can call it directly with structured parameters.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"name"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"swap_tokens"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"description"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Swap ERC-20 tokens on any of 46 EVM chains. Returns executable calldata."</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"input_schema"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"object"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"properties"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"chainId"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"number"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"description"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"EVM chain ID (e.g., 1 for Ethereum)"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"tokenIn"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"string"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"description"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Input token address"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"tokenOut"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"string"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"description"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Output token address"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"amount"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"string"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"description"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Amount in smallest unit"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"sender"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"string"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"description"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Wallet address"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"required"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"chainId"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"tokenIn"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"tokenOut"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"amount"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"sender"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="langchain--llamaindex-tool">LangChain / LlamaIndex Tool<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#langchain--llamaindex-tool" class="hash-link" aria-label="Direct link to LangChain / LlamaIndex Tool" title="Direct link to LangChain / LlamaIndex Tool" translate="no">​</a></h3>
<p>A simple Python tool definition that any LangChain or LlamaIndex agent can call directly.</p>
<div class="language-python codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-python codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> langchain</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tools </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> tool</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> requests</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token decorator annotation punctuation" style="color:rgb(248, 248, 242)">@tool</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">swap_tokens</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">chain_id</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">int</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> token_in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> token_out</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">dict</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token triple-quoted-string string" style="color:rgb(255, 121, 198)">"""Swap ERC-20 tokens on any EVM chain. No API key needed."""</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    response </span><span class="token operator">=</span><span class="token plain"> requests</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">get</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        </span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"https://api.swapapi.dev/v1/swap/</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">chain_id</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        params</span><span class="token operator">=</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string" style="color:rgb(255, 121, 198)">"tokenIn"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> token_in</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"tokenOut"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> token_out</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"amount"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"sender"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> response</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="safety-for-autonomous-systems">Safety for Autonomous Systems<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#safety-for-autonomous-systems" class="hash-link" aria-label="Direct link to Safety for Autonomous Systems" title="Direct link to Safety for Autonomous Systems" translate="no">​</a></h2>
<p>When AI agents execute swaps without human oversight, safety checks are critical. Build these into your agent's logic:</p>
<ul>
<li class="">Always check <code>priceImpact</code> — reject swaps where price impact is below -0.05 (-5%)</li>
<li class="">Set maximum trade size limits in your agent's logic to cap exposure</li>
<li class="">Simulate with <code>eth_call</code> before submitting the transaction on-chain</li>
<li class="">Use <code>minAmountOut</code> as your safety net — the transaction reverts if slippage exceeds tolerance</li>
<li class="">Rate limit: approximately 30 requests per minute per IP address</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="complete-agent-example">Complete Agent Example<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#complete-agent-example" class="hash-link" aria-label="Direct link to Complete Agent Example" title="Direct link to Complete Agent Example" translate="no">​</a></h2>
<p>A complete TypeScript function that gets a quote, validates safety constraints, and returns the transaction ready to sign:</p>
<div class="language-typescript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-typescript codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">executeSwap</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">params</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  chainId</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  tokenIn</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  tokenOut</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  amount</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  sender</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">string</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  maxPriceImpact</span><span class="token operator">?</span><span class="token operator">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> url </span><span class="token operator">=</span><span class="token plain"> </span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">https://api.swapapi.dev/v1/swap/</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">params</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation">chainId</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)">?</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token plain"> </span><span class="token operator">+</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">URLSearchParams</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      tokenIn</span><span class="token operator">:</span><span class="token plain"> params</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tokenIn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      tokenOut</span><span class="token operator">:</span><span class="token plain"> params</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tokenOut</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      amount</span><span class="token operator">:</span><span class="token plain"> params</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">amount</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      sender</span><span class="token operator">:</span><span class="token plain"> params</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">sender</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> res </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">fetch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">url</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> data </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"> </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> res</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token function" style="color:rgb(80, 250, 123)">json</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token operator">!</span><span class="token plain">success</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"API request failed"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">status </span><span class="token operator">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"NoRoute"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"No swap route found"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">status </span><span class="token operator">===</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Partial"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"Only partial fill available"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// Safety check: reject high price impact</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> maxImpact </span><span class="token operator">=</span><span class="token plain"> params</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">maxPriceImpact </span><span class="token operator">??</span><span class="token plain"> </span><span class="token operator">-</span><span class="token number">0.05</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">priceImpact </span><span class="token operator">&lt;</span><span class="token plain"> maxImpact</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">throw</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">Error</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token template-string string" style="color:rgb(255, 121, 198)">Price impact </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">data</span><span class="token template-string interpolation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token template-string interpolation">priceImpact</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string string" style="color:rgb(255, 121, 198)"> exceeds limit </span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">${</span><span class="token template-string interpolation">maxImpact</span><span class="token template-string interpolation interpolation-punctuation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token template-string template-punctuation string" style="color:rgb(255, 121, 198)">`</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    tx</span><span class="token operator">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">tx</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    expectedOutput</span><span class="token operator">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">expectedAmountOut</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    minOutput</span><span class="token operator">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">minAmountOut</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    priceImpact</span><span class="token operator">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">priceImpact</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    rpcUrl</span><span class="token operator">:</span><span class="token plain"> data</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">rpcUrl</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related">Related<a href="https://swapapi.dev/blog/swap-api-for-ai-agents#related" class="hash-link" aria-label="Direct link to Related" title="Direct link to Related" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://swapapi.dev/blog/programmatic-token-swaps">Full integration tutorial</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/supported-chains">Supported chains</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/why-no-api-key">Why no API key</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/slippage-guide">Slippage guide</a></li>
</ul>]]></content:encoded>
            <category>AI Agents</category>
            <category>API</category>
            <category>Integration</category>
        </item>
        <item>
            <title><![CDATA[What is a DEX Aggregator?]]></title>
            <link>https://swapapi.dev/blog/what-is-dex-aggregator</link>
            <guid>https://swapapi.dev/blog/what-is-dex-aggregator</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Learn what DEX aggregators are, how they route trades across liquidity pools for the best price, and how to use a DEX aggregator API to swap tokens programmatically.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tldr">TL;DR<a href="https://swapapi.dev/blog/what-is-dex-aggregator#tldr" class="hash-link" aria-label="Direct link to TL;DR" title="Direct link to TL;DR" translate="no">​</a></h2>
<p>A DEX aggregator searches multiple decentralized exchanges simultaneously to find the best swap rate for a token trade. Instead of checking Uniswap, SushiSwap, and Curve individually, a DEX aggregator checks all of them in one request and routes your trade through the optimal path.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-is-a-dex">What is a DEX?<a href="https://swapapi.dev/blog/what-is-dex-aggregator#what-is-a-dex" class="hash-link" aria-label="Direct link to What is a DEX?" title="Direct link to What is a DEX?" translate="no">​</a></h2>
<p>A decentralized exchange (DEX) lets you swap tokens directly on-chain, with no intermediary holding your funds.</p>
<ul>
<li class=""><strong>Smart contract-based</strong> — DEXs use smart contracts and liquidity pools instead of traditional order books. Trades execute entirely on-chain.</li>
<li class=""><strong>AMM pricing</strong> — Automated Market Makers (AMMs) determine prices algorithmically based on the ratio of tokens in a pool. More demand for one token shifts the ratio and changes the price.</li>
<li class=""><strong>Examples</strong> — Uniswap, SushiSwap, Curve, PancakeSwap, and Balancer are among the most widely used DEXs across EVM chains.</li>
<li class=""><strong>The problem</strong> — Each DEX only has access to its own liquidity pools. A trade on Uniswap cannot tap into Curve's deep stablecoin pools or SushiSwap's liquidity. This means you might get a worse price by only checking one DEX.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-does-a-dex-aggregator-do">What Does a DEX Aggregator Do?<a href="https://swapapi.dev/blog/what-is-dex-aggregator#what-does-a-dex-aggregator-do" class="hash-link" aria-label="Direct link to What Does a DEX Aggregator Do?" title="Direct link to What Does a DEX Aggregator Do?" translate="no">​</a></h2>
<p>A DEX aggregator solves the fragmented liquidity problem by searching across all available DEXs at once.</p>
<ul>
<li class=""><strong>Queries multiple DEXs simultaneously</strong> — Instead of manually checking each exchange, the aggregator queries all of them in parallel and compares the results.</li>
<li class=""><strong>Compares prices across all pools</strong> — The aggregator evaluates every available liquidity source on a given chain to find the best rate for your trade.</li>
<li class=""><strong>Splits trades across DEXs</strong> — For large trades, a single pool might not have enough liquidity without significant price impact. The aggregator can split your trade across multiple DEXs to minimize slippage.</li>
<li class=""><strong>Multi-hop routing</strong> — Sometimes the best path is indirect. For example, swapping ETH to USDC might route through ETH → WBTC → USDC if that path yields a better price.</li>
<li class=""><strong>Minimizes price impact</strong> — By combining split routing and multi-hop paths, aggregators consistently deliver better prices than any single DEX can offer.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-dex-aggregation-works">How DEX Aggregation Works<a href="https://swapapi.dev/blog/what-is-dex-aggregator#how-dex-aggregation-works" class="hash-link" aria-label="Direct link to How DEX Aggregation Works" title="Direct link to How DEX Aggregation Works" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-1-you-request-a-swap">Step 1: You Request a Swap<a href="https://swapapi.dev/blog/what-is-dex-aggregator#step-1-you-request-a-swap" class="hash-link" aria-label="Direct link to Step 1: You Request a Swap" title="Direct link to Step 1: You Request a Swap" translate="no">​</a></h3>
<p>You specify what you want to trade: the input token, output token, amount, and chain. For example, swap 10 ETH for USDC on Ethereum.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-2-the-aggregator-queries-all-dex-pools">Step 2: The Aggregator Queries All DEX Pools<a href="https://swapapi.dev/blog/what-is-dex-aggregator#step-2-the-aggregator-queries-all-dex-pools" class="hash-link" aria-label="Direct link to Step 2: The Aggregator Queries All DEX Pools" title="Direct link to Step 2: The Aggregator Queries All DEX Pools" translate="no">​</a></h3>
<p>The aggregator checks every available liquidity source on that chain — Uniswap V2, V3, Curve, Balancer, SushiSwap, and dozens more — to find where your trade gets the most output tokens.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-3-it-calculates-the-optimal-route">Step 3: It Calculates the Optimal Route<a href="https://swapapi.dev/blog/what-is-dex-aggregator#step-3-it-calculates-the-optimal-route" class="hash-link" aria-label="Direct link to Step 3: It Calculates the Optimal Route" title="Direct link to Step 3: It Calculates the Optimal Route" translate="no">​</a></h3>
<p>The routing algorithm determines the best path. It might split 60% through Uniswap V3 and 40% through Curve, or route through an intermediate token if that yields a better price.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-4-it-returns-executable-calldata">Step 4: It Returns Executable Calldata<a href="https://swapapi.dev/blog/what-is-dex-aggregator#step-4-it-returns-executable-calldata" class="hash-link" aria-label="Direct link to Step 4: It Returns Executable Calldata" title="Direct link to Step 4: It Returns Executable Calldata" translate="no">​</a></h3>
<p>The aggregator returns a ready-to-sign transaction with the router contract address, encoded calldata, and the value to send. No further computation needed on your end.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="step-5-you-submit-the-transaction-on-chain">Step 5: You Submit the Transaction On-Chain<a href="https://swapapi.dev/blog/what-is-dex-aggregator#step-5-you-submit-the-transaction-on-chain" class="hash-link" aria-label="Direct link to Step 5: You Submit the Transaction On-Chain" title="Direct link to Step 5: You Submit the Transaction On-Chain" translate="no">​</a></h3>
<p>Sign the transaction with your wallet and submit it to the blockchain. The router contract executes the optimized swap path atomically — either the entire trade succeeds or it reverts.</p>
<p><strong>Example:</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># Swap 10 ETH for USDC</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenOut=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  amount=10000000000000000000&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  sender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><br></span></code></pre></div></div>
<p><strong>Response:</strong></p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"success"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token boolean">true</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"status"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Successful"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tokenFrom"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"symbol"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"ETH"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"decimals"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">18</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tokenTo"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"symbol"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"USDC"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"decimals"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">6</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"swapPrice"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">2847.53</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"priceImpact"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">0.0012</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"amountIn"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"10000000000000000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"expectedAmountOut"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"28475300000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain">      </span><span class="token comment" style="color:rgb(98, 114, 164)">// ~28,475 USDC</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"tx"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"to"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x...router"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"data"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"0x...calldata"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"value"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"10000000000000000000"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      </span><span class="token property">"gas"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"350000"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"timestamp"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"2026-03-20T00:00:00.000Z"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-use-an-aggregator-api-instead-of-a-dex-directly">Why Use an Aggregator API Instead of a DEX Directly?<a href="https://swapapi.dev/blog/what-is-dex-aggregator#why-use-an-aggregator-api-instead-of-a-dex-directly" class="hash-link" aria-label="Direct link to Why Use an Aggregator API Instead of a DEX Directly?" title="Direct link to Why Use an Aggregator API Instead of a DEX Directly?" translate="no">​</a></h2>
<table><thead><tr><th>Feature</th><th>Direct DEX (e.g., Uniswap)</th><th>DEX Aggregator (e.g., swapapi)</th></tr></thead><tbody><tr><td>Best price</td><td>Only from one DEX</td><td><strong>Best across all DEXs</strong></td></tr><tr><td>Route optimization</td><td>Single pool</td><td><strong>Multi-hop, split routes</strong></td></tr><tr><td>Integration effort</td><td>Different SDK per DEX</td><td><strong>One API for all DEXs</strong></td></tr><tr><td>Chain coverage</td><td>Usually 1-3 chains</td><td><strong>46 chains (swapapi)</strong></td></tr><tr><td>Maintenance</td><td>Update when DEX changes</td><td><strong>Aggregator handles updates</strong></td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dex-aggregators-for-developers">DEX Aggregators for Developers<a href="https://swapapi.dev/blog/what-is-dex-aggregator#dex-aggregators-for-developers" class="hash-link" aria-label="Direct link to DEX Aggregators for Developers" title="Direct link to DEX Aggregators for Developers" translate="no">​</a></h2>
<p>Most DEX aggregators offer APIs for programmatic access, making them the backbone of automated trading and DeFi applications.</p>
<ul>
<li class=""><strong>Trading bots</strong> — Automate strategies like DCA, rebalancing, or arbitrage using swap API calls. See the <a class="" href="https://swapapi.dev/blog/crypto-trading-bot">trading bot guide</a>.</li>
<li class=""><strong>DeFi dashboards</strong> — Let users swap tokens directly from your app without redirecting to an external DEX interface.</li>
<li class=""><strong>Wallet integrations</strong> — Embed swap functionality into crypto wallets so users can trade without leaving the app.</li>
<li class=""><strong>AI agents</strong> — Autonomous agents that can execute swaps as part of larger workflows. swapapi requires <a class="" href="https://swapapi.dev/blog/why-no-api-key">no API key</a>, making it ideal for agents that cannot manage credentials.</li>
</ul>
<p><strong>Get started in 30 seconds:</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># No API key. No SDK. Just a GET request.</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  tokenOut=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  amount=1000000000000000000&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">  sender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="popular-dex-aggregators">Popular DEX Aggregators<a href="https://swapapi.dev/blog/what-is-dex-aggregator#popular-dex-aggregators" class="hash-link" aria-label="Direct link to Popular DEX Aggregators" title="Direct link to Popular DEX Aggregators" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="swapapi">swapapi<a href="https://swapapi.dev/blog/what-is-dex-aggregator#swapapi" class="hash-link" aria-label="Direct link to swapapi" title="Direct link to swapapi" translate="no">​</a></h3>
<p><strong>Free / No API key / 46 EVM chains</strong></p>
<p>No authentication required. A single GET request returns executable calldata across 46 EVM chains. Built for developers, bots, and AI agents.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1inch">1inch<a href="https://swapapi.dev/blog/what-is-dex-aggregator#1inch" class="hash-link" aria-label="Direct link to 1inch" title="Direct link to 1inch" translate="no">​</a></h3>
<p><strong>API key required / ~10 chains</strong></p>
<p>The largest DEX aggregator by volume. Requires API key registration. Offers additional features like gasless swaps (Fusion mode) and limit orders.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="0x-swap-api">0x (Swap API)<a href="https://swapapi.dev/blog/what-is-dex-aggregator#0x-swap-api" class="hash-link" aria-label="Direct link to 0x (Swap API)" title="Direct link to 0x (Swap API)" translate="no">​</a></h3>
<p><strong>API key required / ~8 chains</strong></p>
<p>Professional-grade swap API with strong Ethereum and L2 liquidity. Requires API key. Oriented toward enterprise integrations with usage-based pricing.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="paraswap">Paraswap<a href="https://swapapi.dev/blog/what-is-dex-aggregator#paraswap" class="hash-link" aria-label="Direct link to Paraswap" title="Direct link to Paraswap" translate="no">​</a></h3>
<p><strong>API key required / ~7 chains</strong></p>
<p>Competitive rates with a focus on gas optimization. Requires API key. Uses a two-step flow: GET for quotes, POST for building transactions.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="lifi">Li.Fi<a href="https://swapapi.dev/blog/what-is-dex-aggregator#lifi" class="hash-link" aria-label="Direct link to Li.Fi" title="Direct link to Li.Fi" translate="no">​</a></h3>
<p><strong>API key (free tier) / 20+ chains</strong></p>
<p>Cross-chain focused aggregator that bridges and swaps in a single transaction. Best choice when you need cross-chain swaps.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="jupiter">Jupiter<a href="https://swapapi.dev/blog/what-is-dex-aggregator#jupiter" class="hash-link" aria-label="Direct link to Jupiter" title="Direct link to Jupiter" translate="no">​</a></h3>
<p><strong>Free / Solana only</strong></p>
<p>The dominant aggregator on Solana. Free and fast, but Solana-only — no EVM chain support.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related">Related<a href="https://swapapi.dev/blog/what-is-dex-aggregator#related" class="hash-link" aria-label="Direct link to Related" title="Direct link to Related" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://swapapi.dev/blog/comparing-dex-aggregator-apis">DEX Aggregator API Comparison</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/programmatic-token-swaps">Step-by-step tutorial</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/crypto-trading-bot">Trading bot guide</a></li>
</ul>]]></content:encoded>
            <category>DEX</category>
            <category>DeFi</category>
            <category>API</category>
        </item>
        <item>
            <title><![CDATA[Why swapapi Requires No API Key]]></title>
            <link>https://swapapi.dev/blog/why-no-api-key</link>
            <guid>https://swapapi.dev/blog/why-no-api-key</guid>
            <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[swapapi is the only DEX aggregator API that requires no API key, no account, and no authentication. Learn how it works and why it's free.]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tldr">TL;DR<a href="https://swapapi.dev/blog/why-no-api-key#tldr" class="hash-link" aria-label="Direct link to TL;DR" title="Direct link to TL;DR" translate="no">​</a></h2>
<p>Every major DEX aggregator API — 1inch, 0x, Paraswap, Li.Fi — requires an API key. swapapi doesn't. It's free, requires no signup, and works with a single GET request. Here's why.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-status-quo-every-competitor-requires-authentication">The Status Quo: Every Competitor Requires Authentication<a href="https://swapapi.dev/blog/why-no-api-key#the-status-quo-every-competitor-requires-authentication" class="hash-link" aria-label="Direct link to The Status Quo: Every Competitor Requires Authentication" title="Direct link to The Status Quo: Every Competitor Requires Authentication" translate="no">​</a></h2>
<p>Here's what the DEX aggregator API landscape looks like in 2026:</p>
<table><thead><tr><th>Provider</th><th>Authentication</th></tr></thead><tbody><tr><td>1inch</td><td>API key required. Free tier with rate limits, paid plans for higher throughput.</td></tr><tr><td>0x (Swap API)</td><td>API key required. Paid plans only since 2023.</td></tr><tr><td>Paraswap</td><td>API key required for production use.</td></tr><tr><td>Li.Fi</td><td>API key required (free tier available with restrictions).</td></tr><tr><td>KyberSwap</td><td>API key required for production.</td></tr><tr><td>Jupiter</td><td>No API key — but Solana only, not EVM.</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="the-problem-this-creates">The Problem This Creates<a href="https://swapapi.dev/blog/why-no-api-key#the-problem-this-creates" class="hash-link" aria-label="Direct link to The Problem This Creates" title="Direct link to The Problem This Creates" translate="no">​</a></h2>
<ul>
<li class=""><strong>Developers waste hours</strong> on key management, rotation, and rate limit handling before writing any swap logic</li>
<li class=""><strong>AI agents and bots can't register</strong> for API keys — they can't fill out forms, verify emails, or manage accounts</li>
<li class=""><strong>Prototyping is slow</strong> — you need an account before writing your first line of code</li>
<li class=""><strong>Multiple environments</strong> (dev, staging, prod) each need separate keys and configuration</li>
</ul>
<p>The result is unnecessary friction. Every developer building a swap integration starts with the same 30 minutes of busywork: find the docs, create an account, verify email, generate a key, store it securely, add it to environment variables. Only then can they make their first request.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-swapapi-stays-free">How swapapi Stays Free<a href="https://swapapi.dev/blog/why-no-api-key#how-swapapi-stays-free" class="hash-link" aria-label="Direct link to How swapapi Stays Free" title="Direct link to How swapapi Stays Free" translate="no">​</a></h2>
<p>The API is free because swapapi doesn't need to charge for access. Revenue comes from a different source entirely.</p>
<ul>
<li class="">Revenue model: positive slippage capture</li>
<li class="">When the actual execution price is better than the quoted price, swapapi keeps the difference</li>
<li class="">Your quoted price is the commitment — you never get less than <code>minAmountOut</code></li>
<li class="">No VC subsidies, no token, no hidden fees</li>
<li class="">Sustainable: revenue scales with volume, not API key sales</li>
</ul>
<p>This alignment of incentives means swapapi is motivated to find you the best routes — better execution means more positive slippage to capture.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-it-looks-like">What It Looks Like<a href="https://swapapi.dev/blog/why-no-api-key#what-it-looks-like" class="hash-link" aria-label="Direct link to What It Looks Like" title="Direct link to What It Looks Like" translate="no">​</a></h2>
<p><strong>With API key (typical):</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># 1. Go to provider website</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 2. Create account with email</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 3. Verify email</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 4. Generate API key</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 5. Store key securely</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 6. Add to environment variables</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># 7. Finally make a request:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token parameter variable" style="color:rgb(189, 147, 249);font-style:italic">-H</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Authorization: Bearer sk_live_abc123..."</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">\</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.example.com/swap?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">src=0x...&amp;dst=0x...&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">amount=1000000000000000000"</span><br></span></code></pre></div></div>
<p><strong>Without API key (swapapi):</strong></p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token comment" style="color:rgb(98, 114, 164)"># 1. Make a request:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token function" style="color:rgb(80, 250, 123)">curl</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"https://api.swapapi.dev/v1/swap/1?\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">tokenIn=0xEeee...EEeE&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">tokenOut=0xA0b8...eB48&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">amount=1000000000000000000&amp;\</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token string" style="color:rgb(255, 121, 198)">sender=0xd8dA...6045"</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="faq">FAQ<a href="https://swapapi.dev/blog/why-no-api-key#faq" class="hash-link" aria-label="Direct link to FAQ" title="Direct link to FAQ" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="is-there-a-catch">Is there a catch?<a href="https://swapapi.dev/blog/why-no-api-key#is-there-a-catch" class="hash-link" aria-label="Direct link to Is there a catch?" title="Direct link to Is there a catch?" translate="no">​</a></h3>
<p>No. Revenue comes from positive slippage, not from charging developers. When the actual execution price is better than the quoted price, swapapi keeps the difference. You never get less than the quoted <code>minAmountOut</code>.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="will-this-change">Will this change?<a href="https://swapapi.dev/blog/why-no-api-key#will-this-change" class="hash-link" aria-label="Direct link to Will this change?" title="Direct link to Will this change?" translate="no">​</a></h3>
<p>No. The API will always have a free, no-auth tier. The positive slippage revenue model is sustainable and scales with volume.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-about-abuse">What about abuse?<a href="https://swapapi.dev/blog/why-no-api-key#what-about-abuse" class="hash-link" aria-label="Direct link to What about abuse?" title="Direct link to What about abuse?" translate="no">​</a></h3>
<p>Rate limited to approximately 30 requests per minute per IP. Enough for any integration, prevents abuse.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="is-it-production-ready">Is it production-ready?<a href="https://swapapi.dev/blog/why-no-api-key#is-it-production-ready" class="hash-link" aria-label="Direct link to Is it production-ready?" title="Direct link to Is it production-ready?" translate="no">​</a></h3>
<p>Yes. swapapi serves production traffic across 46 EVM chains including Ethereum, Arbitrum, Base, Polygon, and BSC.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="how-do-i-get-started">How do I get started?<a href="https://swapapi.dev/blog/why-no-api-key#how-do-i-get-started" class="hash-link" aria-label="Direct link to How do I get started?" title="Direct link to How do I get started?" translate="no">​</a></h3>
<p>Copy the curl command above and run it. That's it. No signup, no configuration, no API key. See the <a class="" href="https://swapapi.dev/blog/programmatic-token-swaps">full tutorial</a> for a step-by-step integration guide.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-if-i-need-higher-rate-limits">What if I need higher rate limits?<a href="https://swapapi.dev/blog/why-no-api-key#what-if-i-need-higher-rate-limits" class="hash-link" aria-label="Direct link to What if I need higher rate limits?" title="Direct link to What if I need higher rate limits?" translate="no">​</a></h3>
<p>Contact us. We can whitelist IPs for higher-volume integrations.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="related">Related<a href="https://swapapi.dev/blog/why-no-api-key#related" class="hash-link" aria-label="Direct link to Related" title="Direct link to Related" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://swapapi.dev/blog/swap-api-for-ai-agents">swap API for AI agents</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/comparing-dex-aggregator-apis">Compare DEX aggregator APIs</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/supported-chains">Supported chains</a></li>
<li class=""><a class="" href="https://swapapi.dev/blog/migrate-from-1inch">Migrate from 1inch</a></li>
</ul>]]></content:encoded>
            <category>API</category>
            <category>AI Agents</category>
        </item>
    </channel>
</rss>