API, MCP And CLI
Everything Swap and Payments do is reachable without a browser. The API builds transactions and checks them, and the signature always stays with you.
MCP
22 tools for AI agents: swaps, invoices, batches, wallet checks and signing.
https://swap.vurto.cc/mcp
CLI
vurto-swap: quotes, swaps, invoices and payroll from a CSV, signing on your machine.
The full guide, always current, is swap.vurto.cc/agent-api.md. Fetch it live: when this page and the guide disagree, the guide and the live API win.
Base URLs
| Environment | EVM | Solana |
|---|---|---|
| Production | https://swap.vurto.cc/v1 | https://swap.vurto.cc/v1/svm |
| Development | https://swap-dev.vurto.cc/v1 | https://swap-dev.vurto.cc/v1/svm |
/v1 is public, open to any origin, and stable within v1: a breaking change gets a v2.
Rules Of The API
- No custody. The API returns calldata, typed data or an unsigned Solana transaction. It never asks for a private key or a seed phrase, and refuses a request that looks like one with
400 secret_in_payload. walletis not authentication. It says which wallet will sign. The signature, or a credential issued to that wallet, is the proof.- One read needs a credential: the swap history list,
GET /executions. Everything else works without one. - Amounts: send
amountas a human decimal string; every amount in a response is a raw integer string in the token's smallest unit. Parse it as a big integer, never as a float. - Errors come as
{"error": {"code", "message", "details"}}. Act oncode;messageis safe to show a person.
Credentials
Optional, and worth having when you serve many users from one address: they move your limit from the per-IP cap to the credential's own budget. To issue one, open swap.vurto.cc, connect the EVM wallet it should belong to, sign in, and click the key icon on that wallet's card in the wallet panel. The secret is shown once. Send it as:
Authorization: Bearer vswap_<id>_<secret>
A credential has scopes (read, build) and a budget of 240 cost units per rolling 60 seconds.
Rate Limits Per IP
| Calls | Per Minute |
|---|---|
Builds: /swap, /swap/{buildId}/refresh, /multi-quote/build, /orders | 12 |
Writes: /executions | 20 |
Reads: GET /executions/{id} | 30 |
/ethflow/refund and /invoices | 10 |
/payouts | 6 (100 a day) |
/payouts/charge | 12 |
A 429 means back off, not retry in a loop.
What Is In It
| Area | Endpoints |
|---|---|
| Networks and tokens | GET /chains, /tokens, /token, /balances |
| Swap | POST /quote, /swap, /swap/{buildId}/refresh, /orders, /executions, /ethflow/refund, /warm |
| Baskets (N:N) | POST /multi-quote, /multi-quote/build |
| Delivering to another wallet | POST /destination/challenge, /destination/authorize |
| Invoices | POST /invoices, GET /invoices/{id}, POST /invoices/{id}/pay, /invoices/{id}/payments, /invoices/{id}/analysis-payment/transfer, /invoices/{id}/analysis-payment |
| Batches | POST /payouts, /payouts/charge, /payouts/charge/transaction, /payouts/reuse, /payouts/payments |
| Wallet check | GET /screening/{wallet} |
| Solana | The same vocabulary under /v1/svm: quote, swap, execute, tx, multi-quote, multi-swap, balances, tokens, token, prices |
| Help | GET /health, POST /report |
A First Call
curl -sS https://swap.vurto.cc/v1/quote \
-H 'content-type: application/json' \
--data '{"chainId": 42161, "tokenIn": "USDC", "tokenOut": "WETH",
"amount": "100", "slippageBps": 50, "wallet": "<the EVM address that will sign>"}'
Without wallet the quotes are indicative: real routes and prices, but they cannot be built later.
Solana Differs In Four Places
chainIdis the string"solana-mainnet".- There is no approve, so a build is one transaction and never a
steps[]array. - Signing uses a Solana key.
- A signature is not a receipt. Confirm with
GET /v1/svm/txbefore saying it worked. Addresses are base58 and case-sensitive: never change their case.
MCP For AI Agents
Paste https://swap.vurto.cc/mcp into an MCP client. The tools map one to one to the API: swap_quote, swap_build, swap_status, report_execution, prepare_signing, double_quote, double_build, nn_quote, nn_build, destination_challenge, destination_authorize, invoice_create, invoice_get, invoice_pay, invoice_report_payment, invoice_analysis_pay, invoice_report_analysis_payment, payout_batch, payout_charge, payout_reuse, payout_report_payment and wallet_check.
A ready-made agent skill for Payments: swap.vurto.cc/skills/vurto-payments/SKILL.md. For Lend and Swap through an agent, AnA has its own MCP at https://ana.vurto.cc/mcp, with its agent guide.
CLI
Served by the site itself with a checksum, not from a package registry:
curl -sO https://swap.vurto.cc/cli/vurto-swap-0.3.6.tgz
curl -s https://swap.vurto.cc/cli/vurto-swap-0.3.6.tgz.sha256 | sha256sum -c -
npm i -g ./vurto-swap-0.3.6.tgz
Some commands:
vurto-swap check --wallet 0xRECEIVER --chain base
vurto-swap quote --chain arbitrum --in USDC --out WETH --amount 100 --wallet 0xYourAddress
vurto-swap swap --chain arbitrum --in USDC --out WETH --amount 100 --wallet 0xYourAddress --json > plan.json
vurto-swap sign --wallet 0xYourAddress < plan.json
vurto-swap invoice create --chain base --to 0xRECEIVER --token USDC --amount 100 --memo "rent"
vurto-swap payout --file payroll.csv --chain base --token USDC --wallet 0xPAYER --batch
The CLI signs on your machine, with your wallet or a terminal prompt with echo off.
Batch Contract Called Directly
On EVM, a batch built by Vurto is authorized by Vurto and pays 0.1%. The same batch contract can also be called by anyone without that authorization: then it does no screening and charges 1% on-chain.