# Cleave > Cleave is a DEX aggregator on Ethereum, Arbitrum, Base, BNB Chain, Polygon > and Optimism. It splits one trade across pools and paths and swaps between > chains in one step. Our fees are included in the quoted amount. Every step > is test-run before the wallet signs. Between chains, a quote uses our own > lanes or a bridge partner. Our lanes move USDC, and some also ETH, USDT or > WBTC. They can swap on either side. AI agents can use the same quotes > through the Cleave API and MCP server. - [Site](https://cleave.fi) - [Swap](https://cleave.fi/swap) - [How it works](https://cleave.fi/how) - [FAQ and docs in plain text](https://cleave.fi/llms-full.txt) - [Docs](https://cleave.fi/docs) - [Docs: Overview](https://cleave.fi/docs/overview) - [Docs: How quoting works](https://cleave.fi/docs/how-quoting-works) - [Docs: Swap on one chain](https://cleave.fi/docs/swap) - [Docs: Swap between chains](https://cleave.fi/docs/cross-chain) - [Docs: Tracking activity](https://cleave.fi/docs/activity) - [Docs: Safety](https://cleave.fi/docs/safety) - [Docs: Developer API](https://cleave.fi/docs/api) - [Docs: Cleave for agents](https://cleave.fi/docs/agents) - [Docs: MCP server](https://cleave.fi/docs/agents/mcp) - [Docs: Agent REST API](https://cleave.fi/docs/agents/rest) - [Docs: Vercel AI SDK](https://cleave.fi/docs/agents/ai-sdk) - [Docs: LangChain](https://cleave.fi/docs/agents/langchain) - [Docs: x402 gas](https://cleave.fi/docs/agents/gas) - [Docs: Grok Bot](https://cleave.fi/docs/agents/grok) - [Docs: Discovery](https://cleave.fi/docs/agents/discovery) - [Contact](https://cleave.fi/contact) - [Terms of Use](https://cleave.fi/terms) - [Privacy Policy](https://cleave.fi/privacy) - [X](https://x.com/cleaveprotocol) - [Cleave Quote in Grok Bot](https://developer.x.com/exhibit/cleave-quote) - [Cleave on ERC-8004](https://8004scan.io/agents/base/1135050) - [Cleave on x402](https://www.x402scan.com/server/438ee632-676f-4fcd-b1a0-fcff60d15d40) ## Chains - Ethereum (chain id 1) - Arbitrum (chain id 42161) - Base (chain id 8453) - BNB Chain (chain id 56) - Polygon (chain id 137) - Optimism (chain id 10) ## Quote API - Base URL: https://api.cleave.fi (production). - https://api-staging.cleave.fi is for testing only, not for public use. - No API key: send no Authorization header on /v1/. - GET /v1/meta lists chains, contracts with their roles, fees and limits. - Other public paths: GET /v1/quote, /v1/tokens, /v1/tokens/search, /v1/tokens/lookup, /v1/bridge/status/{chainId}/{txHash} and /assets/token-logo/{chainId}/{address}. ## Rate limits (per IP) - About 40 requests per 10 s, or 120 per 60 s. Over that: 429 with Retry-After (10 or 60 s). - Above 60 requests per 10 s the network edge blocks the IP for about 10 s. - /v1/tokens/search and /v1/tokens/lookup: 20 requests per 10 s, shared. - On a 429, respect Retry-After before the next request. - Heavy use needs a partner key: ask via https://cleave.fi/contact ## Terms Use of the API, the partner API and the MCP server is subject to the Terms of Use (https://cleave.fi/terms) and the Privacy Policy (https://cleave.fi/privacy). By sending requests or connecting a client after this notice, you accept them. If an agent or other software calls Cleave, its operator accepts them and is responsible for what it does. Partner and agent keys are issued only after the key holder accepts them. Stay within the published rate limits. ## Contracts Cleave contracts per chain, checked against GET https://api.cleave.fi/v1/meta at each release. Key them by chain and address: the same address can be a different contract on another chain. CleaveCrossChainRouterV3 is the cross-chain call target and approval spender. CleaveComposerV5 is the destination receiver. CleaveMeasuredShellV2 is the measured same-chain call target and approval spender. CleaveSwapShell, the classic same-chain shell, is still available. Transactions built from a quote go only to tx_target contracts; approvals go only to approval_spender contracts. A bridge quote is the exception: its tx target and approval spender are deposit contracts listed for its chain in GET /v1/meta under bridge.sources[].approvalSpenders. Never send tokens to a contract with the forbidden_recipient role. ### Ethereum (chain id 1) - CleaveSwapShell: 0x016750b998AaB0b4b07AA6a2276335053A798758 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveMeasuredShellV2: 0x5AfF91027390f731058AcC15E0A3F927b250c9FE (roles: tx_target, approval_spender, forbidden_recipient) - CleaveCrossChainRouterV3: 0x30809f82f8Df91e976B02F09dc64E0da8eFB1e92 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveComposerV5: 0x436Ac858fD25706a8380b8AFb38Bc7538B852409 (roles: destination_receiver, recovery_target, forbidden_recipient) ### Arbitrum (chain id 42161) - CleaveSwapShell: 0x4052700f83324Be5710d187b7bbEa9837DfFa8fc (roles: tx_target, approval_spender, forbidden_recipient) - CleaveMeasuredShellV2: 0x78D851D8BC6A9b9739549E7515Bf02D6394E1794 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveCrossChainRouterV3: 0xEa0E8caE2dba07D3BC828f42fd6219fF93ddCe97 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveComposerV5: 0xe484191bfF3e4DED3520d1D8e0fcf098CAef4cE4 (roles: destination_receiver, recovery_target, forbidden_recipient) ### Base (chain id 8453) - CleaveSwapShell: 0xb08F28a3575805ee1E3729fc19Ab7E869CBAF563 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveMeasuredShellV2: 0x003d4C95756608Ed4C11C5d0Ad9ca4c4076cAF20 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveCrossChainRouterV3: 0x545fef65c37ECEE32309d879ABafaa959E9F114C (roles: tx_target, approval_spender, forbidden_recipient) - CleaveComposerV5: 0x58b73b40b5ED797833955397dF989AA2DEdD50A4 (roles: destination_receiver, recovery_target, forbidden_recipient) ### BNB Chain (chain id 56) - CleaveSwapShell: 0x48dD089939C9a29211e7De9417e91A141D37F697 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveMeasuredShellV2: 0xC269a4F4dEbD4036597ee830349d824D5bA9ca7E (roles: tx_target, approval_spender, forbidden_recipient) - CleaveCrossChainRouterV3: 0x02ED7CD8D60768797328B098ce0df2fa99db6f23 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveComposerV5: 0xE242F3DeB6B8d9e76e93b0bf5e461B12a722e86E (roles: destination_receiver, recovery_target, forbidden_recipient) ### Polygon (chain id 137) - CleaveSwapShell: 0x5b4a223D8489a3b97d4EBe8fE93C6A7aC3Ec1AD6 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveMeasuredShellV2: 0xA06eE4d57A2E6ea9213Ab4Bce2C055fD09BB43A1 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveCrossChainRouterV3: 0xEa0E8caE2dba07D3BC828f42fd6219fF93ddCe97 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveComposerV5: 0x6Cbc5c7AA249EDD719001786b6e0a07D44027693 (roles: destination_receiver, recovery_target, forbidden_recipient) ### Optimism (chain id 10) - CleaveSwapShell: 0xb08F28a3575805ee1E3729fc19Ab7E869CBAF563 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveMeasuredShellV2: 0x003d4C95756608Ed4C11C5d0Ad9ca4c4076cAF20 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveCrossChainRouterV3: 0x34FCCA283211224877F89F814eeA0a3a912fd354 (roles: tx_target, approval_spender, forbidden_recipient) - CleaveComposerV5: 0xAB708AEd94a07B9da06D92b4796988ee6eD0D32c (roles: destination_receiver, recovery_target, forbidden_recipient)