Competitive swap routing for AI agents.

Multi-aggregator swap router on Base. Returns ready-to-execute calldata your agent signs and submits. MCP-native — drop into Claude Code, Cursor, or any MCP-compatible client in one line. Flat 10 bps fee on the buy token, no separate spread.

Live · Base 8453 Three agent surfaces · MCP, eliza, AgentKit 0x + Velora · highest-of-2 10 bps fee · on-chain auditable recipient Selector allowlist · enforce mode

Install (Claude Code)

One line
claude mcp add --transport http --scope user paladin-swap https://swap.paladinfi.com/mcp

Restart Claude Code. Three tools become available: swap_quote (competitive route across 0x and Velora with executable calldata), trust_check_preview (sample-fixture preview of the trust gate — for production trust checks use the paid REST endpoint or npm plugins), and swap_health (router status). Same install works in any MCP-compatible client supporting Streamable-HTTP transport.

Try it (live, display-only)

This widget calls /v1/quote live against the production router. It displays the response — it does not sign, submit, or move funds. Pre-fills a no-op taker if you don't supply one. Use this to confirm the route shape before wiring up your agent.

For USDC/USDT (6 decimals): 5000000 = 5 tokens. For WETH (18 decimals): 1000000000000000000 = 1 token.
A real-looking address improves quote quality on some upstreams; nothing is signed or submitted.
Response will appear here.

What it does

How PaladinFi wraps each upstream

Each upstream aggregator (0x AllowanceHolder dispatching to Settler, Velora AugustusSwapper v6.2) is the actual on-chain executor. PaladinFi adds a defense-in-depth wrapper to constrain what calldata can route through us per source. As of v0.11.71 (live; verifiable via selector_enforcement block of /health):

Layer0x routeVelora route
Outer router whitelist AllowanceHolder (per chain) AugustusSwapper v6.2 (per chain)
Calldata selector allowlist 1 selector (exec) 11 swap selectors
Inner-target validation Settler address required (0x7747f8d2…) priceRoute invariant (srcToken + destToken + srcAmount)
Unconditional deny-list 7 selectors (Permit2 + ERC-20 transfer/transferFrom/approve + Permit2 permit single/batch) 7 selectors (same set)
Failure mode when both upstreams unreachable HTTP 502 (upstream error) on /v1/quote. Per-source breakdown is visible in /health.

The selector + inner-target layers are load-bearing — they're what couples the calldata to the actual swap implementation contract. Walked through in this blog post.

Production state

Production routing has been serving fee-bearing /v1/quote calls on Base since 2026-04-26 (v0.11.45). The current router instance has been serving since 2026-05-12 19:09 UTC (the v0.11.74 deploy, visible in the public CHANGELOG). Deploy windows are brief (under ten minutes); we don't operate a separate status page yet, but /health is the canonical liveness probe.

Honest traction snapshot — last 30 days

If you're evaluating PaladinFi for a wallet or data-distribution integration: NDA-share the revenue and per-integration numbers on a 20-min discovery call.

Adversarial review process

Every public-surface ship runs through a 3-adversary parallel review before deploy (Maintainer + Engineering + Security audit-mode for code; B2B Buyer + Brand Auditor + Domain Skeptic for content). The Security reviewer is briefed "treat as audit not code review; name funds-loss vectors explicitly."

Landmark reviews:

REST API

If your agent doesn't speak MCP, hit the REST endpoint directly.

MethodPathPurpose
GET/healthLiveness + fee config + selector-enforcement state
POST/v1/quoteCompetitive route quote with calldata
POST/mcpMCP Streamable-HTTP transport

Quote example

curl -sS https://swap.paladinfi.com/v1/quote \
  -H 'content-type: application/json' \
  -d '{
    "chainId": 8453,
    "sellToken": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "buyToken":  "0x4200000000000000000000000000000000000006",
    "sellAmount": "5000000",
    "taker": "0xYourAgentWallet"
  }'

Response shape (abridged)

{
  "source": "0x",
  "chainId": 8453,
  "router": "0x0000000000001ff3684f28c67538d4d072c22734",
  "calldata": "0x...",
  "buyAmount": "2160000000000000",
  "minBuyAmount": "2138000000000000",
  "sellAmount": "5000000",
  "gas": "318707",
  "ourFeeBps": 10,
  "ourFeeRecipient": "0xeA8C33d018760D034384e92D1B2a7cf0338834b4",
  "estimatedOurFeeAmount": "2160000000000",
  "estimatedOurFeeToken": "0x4200000000000000000000000000000000000006"
}

Submit as to=router, data=calldata, value=0 from taker.

Rate limits

Free endpoints are rate-limited per source IP via nginx. The /v1/quote free-quote zone allows 5 req/sec sustained, burst 30; /mcp Streamable-HTTP transport allows 10 req/sec sustained, burst 30. Concurrent connections are capped at 5 per source IP. The paid /v1/trust-check has no separate rate cap; pricing ($0.001 USDC/call) constrains volume directly. Rate-limited responses return HTTP 429 with a Retry-After header. If your agent needs sustained throughput beyond this — get in touch.

Fees

Flat 10 basis points (0.1%) on the buy token. The fee is calculated against the actual fill amount, not the quoted estimate, so you never pay more than expected even if pool prices move between quote and fill. PaladinFi's 10 bps is taken from the buy-token side via the upstream aggregator's integrator-fee mechanism (0x's swapFeeBps / Velora's partnerFeeBps), so the buyAmount you see in the response already reflects both any upstream protocol fee and our 10 bps — no additional deduction at fill time.

Fees route directly to the Paladin Swap treasury EOA 0xeA8C33d018760D034384e92D1B2a7cf0338834b4 — also surfaced in /health, auditable on Basescan. The /v1/quote endpoint stays free to query; we don't gate quotes, charge per-call, or take spread on top. PaladinFi never custodies user funds — the only PaladinFi-controlled address in the swap path is the integrator-fee EOA above, receiving the 10 bps. (Note: this pricing applies to Swap routing only. Our separate Trust Check API has its own pricing — $0.001 USDC/call paid evaluation, with a free fixture-only preview endpoint.)

Supported assets

Why this exists

Agent builders that swap on-chain currently glue together aggregator APIs themselves, handle slippage and fee accounting, and reinvent the same routing logic per project. PaladinFi Swap is the routing layer factored out — one tool call, ready calldata, flat fee. Built so agentic wallets can ship faster without holding user funds in custody. Audience is narrow on purpose: agent-builders specifically. If you're building a consumer-facing wallet UI directly, you probably want a wallet-grade aggregator SDK with its own UI components, not a B2B routing API.

Roadmap