What this is
10inch aggregates liquidity across venues and returns a single best route. Two things make it different from a generic swap aggregator. First, it understands that a tokenized equity tracks a market that closes, and prices that fact explicitly instead of quoting a stale number. Second, every quote carries the evidence behind it: which venues were consulted, what spread was applied, and the instant it was true.
The quoting layer runs server-side. Venue API keys never reach the browser; the client only ever talks to /api/quote.
Exactly what we prove
This wording is deliberate and is used verbatim across the product:
We do not promise the best price in the world. We prove the best price available among the venues quoted at instant T.
The distinction matters. A claim of universal best price is unverifiable. A claim about a named set of venues at a named moment is checkable, and the quote carries the list. Note also that 10inch is an aggregation layer: it holds no custody, issues no token, runs no pool of its own.
Quotes that respect the bell
Any pair containing a tokenized equity passes through the guard. Crypto-only pairs bypass it entirely and are marked 24_7. The guard never blocks trading outside market hours; it prices the added risk and says so in the response.
| Phase | Window (ET) | Guard spread |
|---|---|---|
| open | 09:30 – 16:00 | +0 bps |
| pre | 04:00 – 09:30 | +50 bps |
| post | 16:00 – 20:00 | +50 bps |
| closed | overnight, trading day | +150 bps |
| closed | weekend or holiday | +250 bps |
The calendar is NYSE, daylight-saving correct, with holidays and the two early closes (13:00 ET) handled. Widening is applied by worsening the quoted buyAmount, and the amount is reported as guardAdjustmentBps so it can never be silent. Outside market hours staleness.isStale is true and referencePriceAt points at the last close.
The contract
One shape is returned by every quoting path, and it is the stable contract between the interface, this service, and anything that replaces it later.
interface Quote {
id: string; // quote uuid
chainId: number;
sellToken: string; // address
buyToken: string;
sellAmount: string; // base units, bigint-safe string
buyAmount: string;
price: string; // buy/sell, decimal string
marketPhase: "open" | "pre" | "post" | "closed" | "24_7";
spreadBps: number; // total spread applied
guardAdjustmentBps: number; // how much the guard widened (0 when 24_7)
staleness: {
referencePriceAt: string; // ISO; last close when stale
isStale: boolean;
};
bestAmong: string[]; // venues consulted, e.g. ["0x:uniswap_v3"]
route: { source: string; proportionBps: number }[];
expiresAt: string; // ISO; invalid afterwards
transaction?: { // firm quotes only
to: string; data: string; value: string; gas: string;
};
issues?: { allowance?: { spender: string } | null; balance?: boolean };
}A note on bestAmong: it records the underlying venues that were quoted, never an aggregator as a single opaque name. That is what makes the count in the claim meaningful.
GET /api/quote
| Param | Meaning |
|---|---|
| chainId | supported EVM chain id |
| sellToken | address; native asset uses 0xEeee…EEeE |
| buyToken | address |
| sellAmount | base units, integer string |
| taker | required for a firm quote |
| mode | price (indicative) or quote (firm, with transaction) |
| slippageBps | optional, 1–1000; omitted uses the venue default |
curl "https://10inch.io/api/quote?\ chainId=8453&\ sellToken=0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE&\ buyToken=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913&\ sellAmount=1000000000000000000&\ mode=price"
Quotes are never cached, anywhere. Every request reaches the venue live and the response carries Cache-Control: no-store. A cached quote is a stale price, which is the exact failure the guard exists to prevent. Indicative quotes live 15 seconds, firm quotes 30.
GET /api/tokens
Returns the curated token list, optionally filtered by chainId. Every listed token was verified to have a live route before being added. Each entry carries isRWA and marketCalendar, which is how the interface knows to group tokenized equities separately and when to show the market-phase badge.
curl "https://10inch.io/api/tokens?chainId=8453"
From quote to settled trade
The interface performs these steps in order:
- 01Network — switches the wallet to the quoted chain if needed.
- 02Approval — for ERC-20 sells, an exact-amount approval — never unlimited, so a compromised venue can reach one trade, not a balance.
- 03Firm quote — fetched after the approval confirms, so wallet-confirmation time never consumes the quote's validity window.
- 04Expiry guard — a firm quote is refused past expiresAt, with a 1.5s buffer for wallet latency.
- 05Send and confirm — the transaction is submitted, the receipt awaited, and reverts surfaced explicitly.
Settlement runs through audited venue contracts. 10inch never takes custody of funds at any point in this flow.
Failure is explicit
Every failure returns a readable code. The interface never renders an empty quote or an endless spinner.
| Code | HTTP | Cause |
|---|---|---|
| INVALID_REQUEST | 400 | malformed or missing parameter |
| UNSUPPORTED_PAIR | 422 | no venue covers this pair on this chain |
| NO_LIQUIDITY | 422 | no route with available liquidity |
| TAKER_REQUIRED | 422 | firm quote requested without a taker |
| UPSTREAM_BAD_REQUEST | 422 | the venue rejected the request |
| UPSTREAM_UNAVAILABLE | 502 | the venue is unreachable |
Where it works today
Quoting and execution run on Ethereum 1, Optimism 10, Polygon 137, Base 8453 and Arbitrum 42161. Base is the default: it carries the deepest routable liquidity for the listed token set.
Solana and Bitcoin wallets connect and are recognised, but trading on them is not live: the interface says so plainly and makes no quote request for those networks.
What comes next
- 01Attested execution — orderbook snapshots signed at the millisecond of execution and Merkle-anchored on chain, with a public verifier, so a historical quote can be checked by anyone rather than taken on trust.
- 02Agent-native access — a machine interface with per-quote metering, letting autonomous agents price and trade under scoped, expiring permissions.
- 03Intent matching — opposing orders matched peer-to-peer at mid-price before the open market is touched, which produces price improvement without any pool of our own.
- 04Cross-protocol yield — borrow and lending rates aggregated across protocols, with one-click collateral migration and no balance-sheet risk taken by 10inch.
