Overview
The V3 vault risk surface (/api/v3/*) is a new, versioned API that builds on top of the v2 risk pipeline. It introduces:
- A composite letter grade (
A+–F) plus an underlying 0–100 score. - Per-category contributors with explicit weights, so you can see exactly which categories drove a vault’s score.
- A dense criteria taxonomy (
pass/warn/failper criterion) across all seven Webacy risk categories. - Honest coverage disclosure — every response tells you how many criteria are live versus planned.
- A pass-through
riskenvelope identical to v2 for clients that already consume the standard Webacy risk format.
/api/v2/*) is frozen but supported. New integrations should target V3; existing integrations have a migration window — see the v2 → V3 migration guide.
Endpoints
Vault Detail (V3)
GET /api/v3/vaults/{address}?chain={chain} — Composite grade, category contributors, criteria taxonomy, coverage disclosure, and the v2 risk envelope.Framework Taxonomy
GET /api/v3/framework — Public endpoint returning the full criteria taxonomy and roadmap status. No API key required.Versioning contract
V3 responses carry a stable contract on every request. Pin it and you get reproducible scoring across the deprecation window.URL path
/api/v3/... — parallel to /api/v2/.... The major version lives in the path; minor revisions ship under the same path with additive fields.
Response body
Every V3 response includes a top-levelschema_version field (currently "3.0").
Response headers
| Header | Value | Meaning |
|---|---|---|
Webacy-Api-Version | 3.0 | Major.minor version of the response schema |
Webacy-Framework-Version | v1 | Which criteria taxonomy was used to score this response |
Webacy-Grading-Scheme | v1 | Which letter-grade mapping was used (echoes the resolved pin) |
Query parameters for pinning
| Parameter | Default | Behavior on unknown value |
|---|---|---|
?framework_version=v1 | v1 | 400 with { error, supported_versions: ['v1'] } |
?grading_scheme=v1 | v1 | 400 with { error, supported_schemes: ['v1'] } |
Score polarity
Worked example
A vault that scores64 lands at C-:
composite.score is 64. That’s not a bug — read the next section.
The upstream floor
composite.score = max(framework_composite, upstream_risk).The composite is floored from below by upstream_risk, which is a verbatim copy of risk.overallRisk from the v2 envelope. When the v2 pipeline detects high upstream risk (active exploits, sanctioned counterparties, severe protocol issues), the V3 composite cannot grade better than that signal allows — even if every framework criterion looks clean.The boolean clamped_by_upstream: true is the visible red flag. When you see it, the contributors below tell you what the framework saw, and upstream_risk tells you what the v2 pipeline saw — the worse of the two wins.When you’ll see this
A vault might show every category contributor near zero and still gradeC- or worse. That happens when risk.overallRisk on the same response is elevated. Surface clamped_by_upstream in your UI alongside the contributors so users understand why a clean-looking vault has a high score — the framework wasn’t blind, the upstream pipeline just had the louder signal.
Categories
All V3 responses include scores for seven Webacy risk categories. Phase 1 ships 28 of 42 criteria live; the rest are present in the taxonomy withlive: false and a phase marker.
| Key | Name | Phase 1 weight |
|---|---|---|
smart_contract | Smart contract | 0.20 |
operational_governance | Operational governance | 0.20 |
asset_collateral | Asset & collateral | 0.15 |
market_liquidity | Market & liquidity | 0.20 |
counterparty | Counterparty | 0.10 |
hack_exploit_history | Hack & exploit history | 0.15 |
chain_infrastructure | Chain infrastructure | 0.00 |
chain_infrastructure has zero weight in Phase 1 (the category is present so the schema is stable) and becomes non-zero in Phase 2B. The category’s criteria object on the vault detail response will be empty ({}) until then.
For the full criteria taxonomy — including which criteria are live in Phase 1 and which phase each unlive criterion is scheduled for — call the framework endpoint. It’s the canonical source; this docs site reflects whatever the framework endpoint returns.
Coverage disclosure
Every V3 vault detail response includes acoverage block:
10 in a category where 3 of 6 criteria are live is a different statement than a score of 10 in a category where all criteria are live.
Related resources
Framework Methodology
How the framework is structured, how scores compose, and why the taxonomy is API-driven.
v2 → V3 Migration
What changed, what stayed, and how to pin your client for stable scoring.
Vault Detail (V3)
Full request/response reference for
GET /api/v3/vaults/{address}.Framework Taxonomy
Public endpoint returning the live framework taxonomy.
