Public API
A versioned, read-only HTTP API to compare cross-chain routes the same way rempart.app does. It returns comparisons only: no transaction is ever built or signed by the API.
Base URL: https://rempart.app/api/v1
GET /api/v1/chains
Returns the supported chains, each with its numeric id, URL slug, display name and kind (evm or svm). No parameters. Rate limited to 60 requests per minute per IP.
GET https://rempart.app/api/v1/chainsGET /api/v1/quote
Compares live routes for one swap across every provider that covers the pair, sorted by the guaranteed minimum received. Rate limited to 30 requests per minute per IP.
GET https://rempart.app/api/v1/quoteQuery parameters (quote)
| Name | Required | Description |
|---|---|---|
| from | yes | Source chain: a slug (base, arbitrum, eth, sol…) or a numeric chainId. |
| to | yes | Destination chain: a slug or a numeric chainId. |
| fromToken | yes | Source token: a verified symbol (USDC, ETH…, case-insensitive) or a token address valid for the source chain (0x… on EVM, base58 on Solana). |
| toToken | yes | Destination token: a verified symbol or a valid token address for the destination chain. |
| amount | yes | Amount to swap, in the base units of the source token (an integer, not a decimal). 5 USDC on a 6-decimals token is 5000000. Must be a positive integer, at most 78 digits. |
| slippageBps | no | Slippage tolerance in basis points (50 = 0.5%). Optional, defaults to 50, allowed range 1 to 5000. |
| fromAddress | no | Sender address, valid for the source chain. Optional; a read-only placeholder is used when omitted. |
| toAddress | no | Recipient address, valid for the destination chain. Optional; defaults to the sender for same-ecosystem swaps, otherwise a placeholder. |
Example: curl
Compare a 5 USDC swap from Base to Arbitrum:
curl "https://rempart.app/api/v1/quote?from=base&to=arbitrum&fromToken=USDC&toToken=USDC&amount=5000000"Example: JavaScript fetch
The same request from the browser or Node. CORS is open, so no proxy is needed:
const res = await fetch(
"https://rempart.app/api/v1/quote?from=base&to=arbitrum&fromToken=USDC&toToken=USDC&amount=5000000"
);
const data = await res.json();
// Trié par minimum garanti décroissant : la meilleure route est en tête.
console.log(data.quotes[0]?.providerId, data.quotes[0]?.toAmountMin);Response shape
A stable, additive contract: fields are only ever added, never removed or renamed. Amounts are strings (base units). Abbreviated to one quote below:
{
"version": "v1",
"request": {
"fromChainId": 8453,
"toChainId": 42161,
"fromToken": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"toToken": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"fromAmount": "5000000",
"slippageBps": 50
},
"quotes": [
{
"providerId": "lifi",
"providerName": "LI.FI",
"toAmount": "4998210",
"toAmountMin": "4973219",
"estimatedDurationSec": 32,
"gasCostUsd": 0.12,
"feeCostUsd": 0.02,
"toTokenPriceUsd": 1,
"steps": [
{ "type": "bridge", "tool": "across", "fromChainId": 8453, "toChainId": 42161 }
],
"expiresAt": 1753238400000
}
],
"failures": []
}API key (optional)
You do not need a key. If you send an x-api-key header that matches a key we issued you, the rate limit is raised to 120 requests per minute; otherwise the header is ignored. This is the hook for future quotas and attribution, nothing more.
Limits, honestly
- Comparison only: the API never returns transaction data. There is no execution endpoint. The execution always happens in the user's own wallet on rempart.app.
- Rate limited to 30 requests per minute per IP on /quote (60 on /chains). Every response carries an X-RateLimit-Remaining header; going over returns HTTP 429.
- Amounts are always in base units (integers), never decimals. Getting the token's decimals wrong is the classic way to be off by a factor of a million.
- Quotes go stale fast, in about 30 seconds. Identical requests are cached server-side for a few seconds (x-rempart-cache: hit or miss).
- CORS is open (Access-Control-Allow-Origin: *) on /api/v1 only, so it works from any origin. The execution routes have no CORS and never will.
- The API can be turned off without notice for operational reasons; when it is, every v1 route returns HTTP 503.
- Rempart is non-custodial: it never holds or relays funds, and this API cannot move any. The execution always happens in the user's own wallet on rempart.app.