{
  "markdown": "# Swap API\n\n**Executable token swap calldata in one GET request.** No API keys. No accounts. No SDK bloat.\n\n```\nhttps://api.swapapi.dev\n```\n\n---\n\n## Quick Start\n\nSwap 1 ETH for USDC on Ethereum:\n\n```bash\ncurl \"https://api.swapapi.dev/v1/swap/1?\\\ntokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&\\\ntokenOut=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&\\\namount=1000000000000000000&\\\nsender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"\n```\n\nThat's it. The response contains everything you need to sign and broadcast.\n\n---\n\n## Example Response\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"status\": \"Successful\",\n    \"tokenFrom\": {\n      \"address\": \"0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\",\n      \"symbol\": \"ETH\",\n      \"name\": \"Ether\",\n      \"decimals\": 18\n    },\n    \"tokenTo\": {\n      \"address\": \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n      \"symbol\": \"USDC\",\n      \"name\": \"USD Coin\",\n      \"decimals\": 6\n    },\n    \"swapPrice\": 2435.12,\n    \"priceImpact\": 0.0003,\n    \"amountIn\": \"1000000000000000000\",\n    \"expectedAmountOut\": \"2435120000\",\n    \"minAmountOut\": \"2422947280\",\n    \"tx\": {\n      \"from\": \"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\n      \"to\": \"0x011E52E4E40CF9498c79e329EBc29ed08c8B5abB\",\n      \"data\": \"0x2646478b...\",\n      \"value\": \"1000000000000000000\",\n      \"gasPrice\": 30000000000,\n      \"gas\": \"250000\"\n    }\n  },\n  \"timestamp\": \"2026-03-12T00:00:00.000Z\"\n}\n```\n\n| Field | Description |\n|-------|-------------|\n| `success` | Boolean indicating request success |\n| `data.status` | `\"Successful\"`, `\"Partial\"`, or `\"NoRoute\"` |\n| `data.tokenFrom/tokenTo` | Token metadata (address, symbol, decimals) |\n| `data.swapPrice` | Exchange rate |\n| `data.priceImpact` | Slippage impact (0.001 = 0.1%) |\n| `data.expectedAmountOut` | Estimated output in token's smallest unit |\n| `data.minAmountOut` | Guaranteed minimum (respects your `maxSlippage`) |\n| `data.tx` | Transaction object ready to sign and send |\n\n---\n\n## API Reference\n\n**Endpoint:** `GET /v1/swap/{chainId}`\n\n**Parameters:**\n\n| Param | Required | Description |\n|-------|----------|-------------|\n| `chainId` | path | Chain ID (1=Ethereum, 8453=Base, 42161=Arbitrum, etc.) |\n| `tokenIn` | query | Input token address. Use `0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE` for native ETH |\n| `tokenOut` | query | Output token address |\n| `amount` | query | Input amount in smallest unit (e.g., wei for ETH) |\n| `sender` | query | Your wallet address (used to build the tx) |\n| `maxSlippage` | query | Optional. 0-1 (default: 0.005 = 0.5%) |\n\n**Response codes:**\n- `200` — Quote ready\n- `400` — Invalid params or unsupported chain\n- `429` — Rate limit exceeded (60/min per IP)\n- `502` — Upstream service error\n\n---\n\n## More Curl Examples\n\n### Base (ETH → USDC)\n\n```bash\ncurl \"https://api.swapapi.dev/v1/swap/8453?\\\ntokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&\\\ntokenOut=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&\\\namount=500000000000000000&\\\nsender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"\n```\n\n### Arbitrum (USDC → ETH with 1% slippage)\n\n```bash\ncurl \"https://api.swapapi.dev/v1/swap/42161?\\\ntokenIn=0xaf88d065e77c8cC2239327C5EDb3A432268e5831&\\\ntokenOut=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&\\\namount=1000000000&\\\nsender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&\\\nmaxSlippage=0.01\"\n```\n\n### Ethereum Mainnet (DAI → USDC)\n\n```bash\ncurl \"https://api.swapapi.dev/v1/swap/1?\\\ntokenIn=0x6B175474E89094C44Da98b954EedeAC495271d0F&\\\ntokenOut=0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48&\\\namount=1000000000000000000000&\\\nsender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"\n```\n\n### Polygon (MATIC → USDC)\n\n```bash\ncurl \"https://api.swapapi.dev/v1/swap/137?\\\ntokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&\\\ntokenOut=0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174&\\\namount=10000000000000000000&\\\nsender=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\"\n```\n\n---\n\n## Executing Swaps\n\nThe API gives you an unsigned transaction. Sign it and broadcast:\n\n### With Foundry `cast`\n\n```bash\n# 1. Set swap parameters\nCHAIN_ID=8453\nTOKEN_IN=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE\nTOKEN_OUT=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\nAMOUNT=1000000000000000000\nSENDER=0x...        # Your address\nPRIVATE_KEY=0x...   # Your private key\nRPC_URL=https://mainnet.base.org\n\n# 2. Get swap quote\nRESPONSE=$(curl -s \"https://api.swapapi.dev/v1/swap/$CHAIN_ID?\\\ntokenIn=$TOKEN_IN&\\\ntokenOut=$TOKEN_OUT&\\\namount=$AMOUNT&\\\nsender=$SENDER\")\n\n# 3. Parse the tx fields\nTX_TO=$(echo \"$RESPONSE\" | jq -r '.data.tx.to')\nTX_DATA=$(echo \"$RESPONSE\" | jq -r '.data.tx.data')\nTX_VALUE=$(echo \"$RESPONSE\" | jq -r '.data.tx.value')\nTX_GAS=$(echo \"$RESPONSE\" | jq -r '.data.tx.gas')\n\n# 4. Sign and send\ncast send \\\n  --rpc-url \"$RPC_URL\" \\\n  --private-key \"$PRIVATE_KEY\" \\\n  \"$TX_TO\" \\\n  --value \"$TX_VALUE\" \\\n  --gas-limit \"$TX_GAS\" \\\n  --data \"$TX_DATA\"\n```\n\n### With viem\n\n```typescript\nimport { createWalletClient, http } from 'viem'\nimport { privateKeyToAccount } from 'viem/accounts'\nimport { base } from 'viem/chains'\n\nconst account = privateKeyToAccount('0x...')\n\nconst client = createWalletClient({\n  account,\n  chain: base,\n  transport: http()\n})\n\nconst response = await fetch(\n  'https://api.swapapi.dev/v1/swap/8453?' +\n  'tokenIn=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&' +\n  'tokenOut=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&' +\n  'amount=1000000000000000000&' +\n  'sender=' + account.address\n)\n\nconst { data } = await response.json()\n\nconst hash = await client.sendTransaction({\n  to: data.tx.to,\n  data: data.tx.data,\n  value: BigInt(data.tx.value),\n  gas: BigInt(data.tx.gas)\n})\n\nawait client.waitForTransactionReceipt({ hash })\n```\n\n## MCP Server\n\nFor AI agents, Claude Desktop, Cursor, Cline, and other MCP clients:\n\n```bash\nnpx @swapapi/mcp\n```\n\nOr add to Claude Desktop config:\n\n```json\n{\n  \"mcpServers\": {\n    \"swapapi\": {\n      \"command\": \"npx\",\n      \"args\": [\"@swapapi/mcp\"]\n    }\n  }\n}\n```\n\nSee [mcp/README.md](./mcp/README.md) for full MCP documentation.\n\n---\n\n## OpenAPI Spec\n\nSee [openapi.json](./openapi.json) for the full OpenAPI specification.\n\n---\n\n## Limits\n\n- **Rate limit:** 60 requests/minute per IP\n- **No authentication required**\n- **Free to use**\n\n---\n\n## License\n\nMIT\n",
  "bytes": 6169,
  "sha": "b283bbc1bc30f348fa2b3b5562f7f864ed4eb221c9a21acb7b2e300bceca2a3c",
  "repo_slug": "swap-api/swap-api",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_swap_api_mcp_241029c7/readme"
}