An independent program checks our published API against the networks and venues themselves, every few hours. Findings are published whole, including our own errors.Note 11
These findings describe an earlier build. The run tested 20261104T2025Z-10452119a6; the site now serves 20261106T0030Z-2c6eb504c7, deployed after it. Some findings below may already be fixed and new ones may exist. Until a run reaches the live build, this is a record of the earlier one, not a report on today's release.
A check that could not run is counted separately and never as a pass.
An API nobody could reach must not look like an API that answered correctly.
Failing means both sides measure the same thing and they disagree, and that is the only kind that stops a deploy. Everything under to read is real information and not a defect: a coverage gap we publish deliberately, a plausibility bound against a source whose universe differs from ours, or a comparison whose two sides are not the same quantity, where no tolerance between them would mean anything.
failing
crowding.members answers 402 to a stranger, and https://aspern.org/vault/ethereum-adpend-usdc-555558 renders the same figures to one for nothing (LLTV; Share).
Either withdraw the price or stop publishing it; a thing cannot be both sold and given away.
the website
failing
this tool is called by nothing and is not in NEVER_CALL, so nothing would notice if it stopped answering.
Give derive() an argument for it, or name it in NEVER_CALL with a reason.
/mcp · simulate_withdrawal
warning
1 of 1 dYdX vaults carry no contract address — $1,941,168 that cannot be confirmed on a chain
GET /v1/vaults · dYdX · expected 0, got 1
warning
4 of 4 ForgeYields vaults carry no contract address — $1,255,058 that cannot be confirmed on a chain
GET /v1/vaults · ForgeYields · expected 0, got 4
warning
1 of 1 Sherpa vaults carry no contract address — $465,918 that cannot be confirmed on a chain
GET /v1/vaults · Sherpa · expected 0, got 1
warning
1 of 60 Lagoon vaults carry no contract address — $450,229 that cannot be confirmed on a chain
GET /v1/vaults · Lagoon · expected 0, got 1
warning
1 of 9 D2 Finance vaults carry no contract address — $320,541 that cannot be confirmed on a chain
GET /v1/vaults · D2 Finance · expected 0, got 1
warning
2 of 34 Concrete vaults carry no contract address — $250,139 that cannot be confirmed on a chain
GET /v1/vaults · Concrete · expected 0, got 2
warning
4 of 4 MaxShot vaults carry no contract address — $202,526 that cannot be confirmed on a chain
GET /v1/vaults · MaxShot · expected 0, got 4
warning
5 of 30 Ember Protocol vaults carry no contract address — $105,287 that cannot be confirmed on a chain
GET /v1/vaults · Ember Protocol · expected 0, got 5
warning
1 of 11 Neutral Trade vaults carry no contract address — $0 that cannot be confirmed on a chain
GET /v1/vaults · Neutral Trade · expected 0, got 1
warning
utilisation disagrees with Lista by 7.4 points
GET /v1/vaults?platform=lista-lending · lista-usdc-savings-vault-9651ae · expected 0.7580211859273854, got 0.8323158284192971
warning
utilisation disagrees with Lista by 8.0 points
GET /v1/vaults?platform=lista-lending · gauntlet-usdt-vault-6d6783 · expected 0.9251206468206239, got 0.8447700881562871
warning
utilisation disagrees with Lista by 12.0 points
GET /v1/vaults?platform=lista-lending · pangolins-usdt-vault-eb4f6f · expected 0.9130499578987219, got 0.7934527054719375
investigating
measured share predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-steakhouse-prime-usdc-beef08 · expected 0.787878787878788, got 1
investigating
measured share predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-gauntlet-usdc-prime-8c106e · expected 0.787878787878788, got 1
investigating
score predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-gauntlet-usdc-prime-8c106e · expected 20, got 15
investigating
measured share predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-spark-blue-chip-usdt-vault-b0c424 · expected 0.787878787878788, got 1
investigating
score predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-spark-blue-chip-usdt-vault-b0c424 · expected 35, got 27
investigating
measured share predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-rockawayx-usdc-yield-e01810 · expected 0.787878787878788, got 1
investigating
score predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-rockawayx-usdc-yield-e01810 · expected 22, got 17
investigating
measured share predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-pendle-ecosystem-usdc-55c1b6 · expected 0.787878787878788, got 1
investigating
score predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-pendle-ecosystem-usdc-55c1b6 · expected 18, got 14
investigating
measured share predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-3jane-ecosystem-vault-e05fad · expected 0.787878787878788, got 1
investigating
score predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-3jane-ecosystem-vault-e05fad · expected 10, got 13
investigating
measured share predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-pendle-ecosystem-high-yield-usdc-cf609f · expected 0.690909090909091, got 0.9030303030303031
investigating
score predates exit being withdrawn since scoring, which the answer states in withdrawnSinceScoring
GET /v1/vaults/:slug (risk) · ethereum-pendle-ecosystem-high-yield-usdc-cf609f · expected 21, got 16
not comparable
33 of 529 Hyperliquid vaults are published as no longer measured, $4,259 at their last reading, and say so on every surface
GET /v1/vaults · Hyperliquid
not comparable
1 of 224 Euler vaults are published as no longer measured, $1,292,464 at their last reading, and say so on every surface
GET /v1/vaults · Euler
not comparable
1 of 4 Veda vaults are published as no longer measured, $119 at their last reading, and say so on every surface
GET /v1/vaults · Veda
not comparable
1 of 18 Makina vaults are published as no longer measured, $99,378 at their last reading, and say so on every surface
GET /v1/vaults · Makina
not comparable
1 of 46 Kamino vaults are published as no longer measured, $100,316 at their last reading, and say so on every surface
GET /v1/vaults · Kamino
not comparable
1 of 4 Spectra MetaVaults vaults are published as no longer measured, $108,334 at their last reading, and say so on every surface
GET /v1/vaults · Spectra MetaVaults
not comparable
3 of 4 ForgeYields vaults are published as no longer measured, $1,255,058 at their last reading, and say so on every surface
GET /v1/vaults · ForgeYields
not comparable
55 of 2295 Krystal Auto-Farm Vault vaults are published as no longer measured, $16,371 at their last reading, and say so on every surface
GET /v1/vaults · Krystal Auto-Farm Vault
not comparable
1 of 4 MaxShot vaults are published as no longer measured, $15,684 at their last reading, and say so on every surface
GET /v1/vaults · MaxShot
not comparable
the FREE public endpoint for this chain refused logs 1,000,000 blocks back and at every shallower depth tried.
This is the free-tier floor, NOT a statement about our own readers, which use keys this check does not hold: anybody reading this chain without a key gets that much history and no more.
GET /v1/vaults · base · expected 1000000, got null
| Check | Reaches | Examined | Result |
|---|---|---|---|
| a vault we could barely measure is not scored as dangerous | identity | 242 | clean |
| every field is the type the published schema says it is | shape | 25 | clean |
| every declared response shape still matches what the operation answers | shape | 72 | clean |
| identifiers are unique, quantities that cannot be negative are not, and nothing is observed after it is computed | identity | 101 | clean |
| a filter and its negation add up to the whole corpus | identity | 4 | clean |
| a vault reads the same on the list as it does on its own page | identity | 8 | clean |
| every scheduled job has code, runs, and finishes inside its ceiling | identity | 226 | clean |
| figures that should change are still changing | identity | 225 | clean |
| no single chain falls far behind the rest on payment coverage | identity | 6 | clean |
| a figure does not borrow a coverage from a different field | identity | 1 | clean |
| an unreadable parameter is refused rather than dropped | identity | 4 | clean |
| every documented route answers | shape | 86 | clean |
| no NaN, Infinity or unparseable timestamp in any payload | shape | 11 | clean |
| pagination arithmetic holds and pages do not overlap | shape | 3 | clean |
| nonsense parameters are refused, not crashed on or silently ignored | shape | 10 | clean |
| risk score is the weighted average of its own published components | identity | 100 | 13 findings |
| supplied equals lent out plus left, and none of the three is a zero standing in for unknown | identity | 40 | clean |
| every flag carries an observation and its innocent reading, and never a verdict | identity | 100 | clean |
| counts and capital agree between the list, the detail and /v1/meta | identity | 4 | clean |
| an absent measurement is null, never a zero that reads as a value | identity | 100 | clean |
| every figure says when it was read, and nothing is stale without saying so | identity | 20 | clean |
| capital we publish is capital we have re-read | identity | 4143 | 9 findings |
| capital we publish can be checked against a chain | identity | 4143 | 9 findings |
| an identifier a consumer would look up on a chain is either an address or is labelled as not one | identity | 100 | clean |
| capital the API reports matches the vault contract read directly | source | 14 | clean |
| Morpho vaults match what Morpho publishes about them | source | 25 | clean |
| Lista vaults reconcile against what Lista publishes, itemised | source | 26 | 3 findings |
| platform capital is the right order of magnitude against DefiLlama | source | 2 | clean |
| the block rate behind every historical window still matches the chain | source | 7 | clean |
| the alerting is still running, and nothing is stuck in the delivery queue | source | 2 | clean |
| the data consumer is still reporting, so its quiet is real quiet | source | 1 | clean |
| an endpoint asked about a block before a contract existed refuses, rather than answering | source | 4 | clean |
| log history reaches as far back as the readers assume it does | source | 4 | 1 finding |
| our realised return agrees with the venue that computes the same figure | source | 51 | clean |
| the same quantity asked for two ways answers the same both times | identity | 242 | clean |
| a key that holds a capability actually receives the field it pays for | identity | 12 | clean |
| a capability the key lacks is refused with a 402 that names it | shape | 6 | clean |
| POST /v1/risk names the holdings its shock ladder cannot speak for | identity | 3 | clean |
| a redemption that cannot be paid says so rather than that nothing must be sold | identity | 8 | clean |
| the CSV export carries what the JSON carries | identity | 9 | clean |
| a vault reported closed says so, and a dead one is not still counted as live | identity | 200 | clean |
| a value is in the unit its field name claims | shape | 13 | clean |
| a published capital figure says when it was read | identity | 2000 | clean |
| the freshness block covers the readings actually in the payload | identity | 5 | clean |
| a residual correlation is only reported where the raw one could be measured | identity | 120 | clean |
| an availability status and the data beside it say the same thing | identity | 18 | clean |
| two adjacent pages share no row, and a traversal repeats itself | identity | 3 | clean |
| the plan a key names, the quota it reports, and the price list agree | identity | 1 | clean |
| the free surface answers an unkeyed caller | shape | 4 | clean |
| no paid field reaches a caller without a key | identity | 3 | clean |
| a key gets what it paid for | identity | 3 | clean |
| the API says which key it recognised | shape | 3 | clean |
| the website and the API agree about whether we are charging | source | 2 | clean |
| the website does not give away what the API charges for | source | 2 | 1 finding |
| the API publishes what it withholds | shape | 18 | clean |
| a vault profile withholds the same rows for a stranger as the limits promise | source | 4 | clean |
| the website withholds what the API says it withholds | source | 5 | clean |
| every tool is either exercised or deliberately excluded | shape | 40 | 1 finding |
| the tool surface answers and every tool describes itself | shape | 40 | clean |
| every tool returns the fields its own schema promises | identity | 32 | clean |
| the hand-checked sample still says what it said | source | 127 | clean |