---
title: "Aggregator Revert Rates"
method: GET
path: "/api/v1/revert-rates"
tags: ["Execution Benchmarks"]
---

# Aggregator Revert Rates

`GET /api/v1/revert-rates`

## Request

- Base URL: `https://cleartracedata.com` (the document declares no server; this is the origin it was published from)
- URL: `https://cleartracedata.com/api/v1/revert-rates`
- Auth: none declared

**Public API: Returns per-aggregator transaction revert rates.**

The revert rate is the share of an aggregator's routing transactions that
fail on-chain — a distinct reliability metric, reported per chain (there is
no cross-chain rollup). A high rate signals routes that frequently don't
clear at the expected outcome.

Rates are computed after a **sender-level bot filter** (methodology v5,
effective 2026-07-05) that excludes competing solver/keeper bots — senders
with zero successful txs in the window, senders reverting >=50% of 5+ txs,
and senders with 100+ reverts at a >=10% personal rate — so the figure
is not dominated by solver fill races. Data served
before 2026-07-05 used the looser v4 filter and read higher for
solver-heavy routers. Known residual: the Odos/Ethereum cell remains
inflated by address-rotating spam that no per-sender rule can separate.

Since methodology v6 (2026-07-07) each row also carries a **user-only
revert rate** (`user_revert_rate_pct`, with `user_reverted_txs` /
`user_txs`): the same computation restricted to senders whose personal
revert rate is under 10%, i.e. whose own transactions succeeded at least 90%
of the time over the window. That is a threshold on the outcome being
measured, not a classification of who the sender is: bounded under 10% by
construction, so read it as the failure rate among consistently-succeeding
senders, not as the share of all attempts that fail. It is the number to
read for residual cells like Odos/Ethereum, subject to that caveat.

### Do not rank across execution models

Each row carries an `execution_model` and a `revert_comparable` flag. A revert
rate measures reliability only where **the failing transaction is the user's
own** — that is, on a `router` venue, where the user signs and submits the swap.

On a `batch_auction` venue (CoW Protocol) the user signs an *order* and a solver
settles a batch; on an `intent` venue (1inch Fusion, which settles through the
Limit Order Protocol) a resolver submits. An order that cannot be filled never
becomes a transaction at all. Their on-chain revert rate is therefore
structurally near zero no matter how reliably they fill — it reflects
solver/resolver settlement, not user experience.

Sorting every row by `revert_rate_pct` puts CoW and Fusion at the top of the
table, and that ordering says nothing about reliability. Filter to one execution
model before comparing — `?revert_comparable=true` returns only the rows that may
legitimately be ranked against each other.

## Query parameters

- `chain` string: Filter by blockchain (ethereum, base, arbitrum, optimism).
- `project` string: Filter by aggregator/project name.
- `revert_comparable` boolean: Set true to return only venues whose revert rate may legitimately be ranked against each other — the `router` venues, where the user submits the swap so a failure is a reverted user transaction. Excludes batch-auction (CoW) and intent (1inch Fusion) venues, whose orders never reach the chain when they fail and whose on-chain revert rate is therefore structurally ~0.
- `limit` integer: Maximum number of rows to return.
- `offset` integer: Pagination offset.

## Response `200`

Per-aggregator, per-chain transaction revert (failure) rates.

- RevertRatesResponse
  - `revert_rates` RevertRate[], required: Per-aggregator revert rates, highest first. Rows carry execution_model / revert_comparable — only compare rates within one execution model.
    - `project` string, required: The aggregator or DEX routing the transactions.
    - `chain` string, required: The blockchain network.
    - `revert_rate_pct` number, required: Percentage of routing transactions that failed on-chain, after the sender-level bot filter (methodology v5, 2026-07-05).
    - `reverted_txs` integer, required: Number of reverted (failed) routing transactions from non-bot senders.
    - `total_routing_txs` integer, required: Total routing transactions analyzed (non-bot senders).
    - `user_revert_rate_pct` number, nullable: Revert rate over ONLY senders whose own transactions to the venue succeeded at least 90% of the time over the window (<10% personal revert rate with at least one success; methodology v6, 2026-07-07). That is a threshold on the outcome being measured, not a classification of who the sender is: bounded under 10% by construction, so read it as the failure rate among consistently-succeeding senders, not as the share of all attempts that fail. The figure to read for cells whose headline is a documented bot-spam residual, subject to that caveat. Null when the cell has no v6 data OR no qualifying senders — disambiguate via user_txs (null = pre-v6, 0 = no qualifying senders).
    - `user_reverted_txs` integer, nullable: Reverted transactions from senders passing the v6 threshold (<10% personal revert rate, at least one success). Null for pre-v6 data.
    - `user_txs` integer, nullable: Total transactions from senders passing the v6 threshold (<10% personal revert rate, at least one success). Null for pre-v6 data.
    - `execution_model` string: How the venue settles: `router` (the user signs and submits the swap), `batch_auction` (the user signs an order; a solver settles a batch), `intent` (the user signs an intent; a resolver submits), or `unclassified` (submitter not established, or the venue blends models).
    - `revert_comparable` boolean: Whether this revert rate is comparable to another venue's. TRUE only for `router` venues, where the failing transaction is the user's own. On a batch auction (CoW) or intent venue (1inch Fusion), an order that cannot be filled never becomes a transaction at all — so the on-chain revert rate is structurally near zero and measures solver/resolver behaviour, NOT user reliability. Do not rank across execution models: sorting this endpoint's rows by revert_rate_pct puts CoW and Fusion on top for a reason that has nothing to do with reliability.
  - `total` integer, required: Total number of matching rows.
  - `limit` integer, required: The maximum number of rows returned.
  - `offset` integer, required: The offset used for pagination.

---

[API](https://skmtc.dev/cleartracedata/apis/cleartrace-api.md) · [All operations](https://skmtc.dev/cleartracedata/apis/cleartrace-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cleartracedata/apis/cleartrace-api/revisions/2073a5a38ab5?raw)
