Skip to main content

Overview

The v3 RWA Risk endpoints give you a Webacy-native structural risk score for stablecoins and real-world asset tokens. Unlike the Depeg Monitor — which tracks real-time price deviation — v3 RWA Risk evaluates the structural health of a token: collateral quality, smart contract governance, liquidity depth, exploit history, and more. Scores are updated on a 24-hour cadence and computed against a versioned grading scheme you can pin for consistency.

Endpoints

Token Detail

GET /api/v3/rwa/{address} — Full structural risk decomposition: composite grade, seven weighted categories, criterion-level pass/warn/fail status, and coverage metadata.

Batch Structural Health

POST /api/v3/rwa/batch/structural-health — Check up to 100 tokens in one call. Moody’s-inspired 24h cadence. Always returns 200 with per-token results.
GET /api/v3/rwa/{address} requires a chain query parameter (for example eth); grading_scheme is optional and defaults to v1. The batch endpoint takes { address, chain } pairs in the request body.

Key Concepts

Score Polarity

Higher score = more risk. This is the opposite of yield or performance scores.composite.score and all categories.*.score values are in the range 0–100, where 0 means no structural risk and 100 means maximum structural risk. The letter grade A+ corresponds to a score near 0 (best); F corresponds to a score near 100 (worst).

Composite Grade

Each token receives a composite score derived from seven weighted risk categories. The weights below apply to the v1 stablecoin grading scheme:
CategoryWeightDescription
asset_collateral30%Collateral quality, reserve transparency, and backing type
market_liquidity20%On-chain liquidity depth and DEX/CEX accessibility
smart_contract20%Audit history, contract ownership model, and timelock presence
operational_governance15%Multisig controls, admin key practices, and operational hygiene
hack_exploit_history15%Known exploits or security incidents
counterparty0%(Reserved — weights may shift in future scheme versions)
chain_infrastructure0%(Reserved — weights may shift in future scheme versions)
The detail response also returns two composite-level fields, upstream_risk and clamped_by_upstream. When a token’s composite score is raised by risk inherited from an upstream dependency, upstream_risk carries that contributing score and clamped_by_upstream is true; when no upstream adjustment applies — as in the example below — they are null and false.

Letter Grades and Stars

GradeStarsScore RangeInterpretation
A+★★★★★0–9Excellent structural health
A★★★★★10–19Strong — minor concerns only
B★★★★☆20–34Good — a few watchpoints
C★★★☆☆35–49Moderate risk — review recommended
D★★☆☆☆50–69Elevated risk — close monitoring needed
F★☆☆☆☆70–100High structural risk

Criterion Status

Each criterion in a category has one of three statuses:
StatusMeaning
passCriterion is satisfied — no risk contribution
warnCriterion is partially met or data quality is limited
failCriterion is not met — contributes to category score

large_holder_concentration — Herfindahl Grading

The large_holder_concentration criterion is graded on the Herfindahl Concentration Index (HCI) computed across the top-10 holders:
HCI RangeStatus
hci_10 < 0.20pass — broadly distributed
0.20 ≤ hci_10 < 0.40warn — moderate concentration
hci_10 ≥ 0.40fail — highly concentrated
null (data unavailable)warn

Data Quality

Every criterion carries a data_quality block:
{
  "confidence": "high",
  "last_observed_at": "2026-05-20T12:00:00Z",
  "source": "webacy"
}
confidence is "high", "medium", or "low". Use last_observed_at to surface data staleness to your users.

Coverage — Live vs. Roadmap

The v3 framework defines more criteria than are currently live. The coverage block in every detail response tells you exactly which criteria are active today vs. pending producer data.
CriterionCategoryLive?
auditedsmart_contractYes
mint_cap_presentsmart_contractYes
owner_is_multisigsmart_contractYes
timelock_presentsmart_contractYes
share_price_stableasset_collateralYes
mint_burn_anomalymarket_liquidityYes
large_holder_concentrationmarket_liquidityYes
no_exploit_historyhack_exploit_historyYes
supply_reserves_reconciliationasset_collateralRoadmap
large_transaction_alertsmarket_liquidityRoadmap
admin_key_changesoperational_governanceRoadmap
timelock_changesoperational_governanceRoadmap
Roadmap criteria are excluded from scoring until their producer tables are ready. When they go live, scores will shift — pin a grading scheme (see below) if you need stability.

Grading Scheme Versioning

Use ?grading_scheme=v1 to pin the scheme for your integration. The scheme version is reflected in:
  • The composite.grading_scheme field in the response body
  • The Webacy-Grading-Scheme response header
Once pinned, v1 is frozen: no weight re-tunes, no new criteria added. When Webacy ships improvements they will be published as v2 with a minimum 9-month deprecation window before v1 is retired.
The batch endpoint (POST /api/v3/rwa/batch/structural-health) emits raw criterion data only — no composite score, no grading scheme parameter. It is always scheme-neutral. Today it evaluates two live criteria — mint_burn_anomaly and large_holder_concentration; additional structural criteria will be added as their producer data goes live.

Authentication

All v3 RWA endpoints require an x-api-key header. Requests without a valid key return 403.
curl -H "x-api-key: $API_KEY" "https://api.webacy.com/api/v3/rwa/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48?chain=eth"

Response Headers

Every response (including 4xx errors) includes:
HeaderExampleDescription
Webacy-Api-Version3.0API version
Webacy-Framework-Versionv1Scoring framework version
Webacy-Grading-Schemev1Grading scheme applied

Batch Partial-Success Semantics

The request is validated first. A malformed batch returns 400 Bad Request and no tokens are evaluated:
  • empty tokens array
  • more than 100 tokens
  • unknown or unexpected properties in the body
Once the request is well-formed, the batch endpoint always returns HTTP 200. Check each result’s ok field:
  • ok: true — criterion data is present
  • ok: false — token could not be evaluated; read error_code
error_codeMeaning
NOT_FOUNDToken address/chain not in Webacy universe
INVALID_ADDRESSAddress string is not a valid contract address
UNSUPPORTED_CHAINChain identifier is not supported

Code Examples

curl -X GET \
  "https://api.webacy.com/api/v3/rwa/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48?chain=eth&grading_scheme=v1" \
  -H "x-api-key: $API_KEY"

Example: Token Detail Response

{
  "schema_version": "3.0",
  "metadata": {
    "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
    "chain": "eth",
    "symbol": "USDC",
    "name": "USD Coin",
    "asset_type": "stablecoin",
    "market_cap_usd": 43000000000
  },
  "composite": {
    "grading_scheme": "v1",
    "grade": "A+",
    "stars": 5,
    "score": 4,
    "contributors": {
      "asset_collateral":       { "score": 2, "weight": 0.30 },
      "market_liquidity":       { "score": 5, "weight": 0.20 },
      "smart_contract":         { "score": 3, "weight": 0.20 },
      "operational_governance": { "score": 8, "weight": 0.15 },
      "hack_exploit_history":   { "score": 0, "weight": 0.15 },
      "counterparty":           { "score": 0, "weight": 0 },
      "chain_infrastructure":   { "score": 0, "weight": 0 }
    },
    "upstream_risk": null,
    "clamped_by_upstream": false
  },
  "categories": {
    "smart_contract": {
      "score": 3,
      "criteria": {
        "audited": {
          "status": "pass",
          "data_quality": { "confidence": "high", "last_observed_at": "2026-05-01T00:00:00Z", "source": "webacy" }
        },
        "mint_cap_present": {
          "status": "pass",
          "data_quality": { "confidence": "high", "last_observed_at": "2026-05-20T12:00:00Z", "source": "webacy" }
        },
        "owner_is_multisig": {
          "status": "pass",
          "data_quality": { "confidence": "high", "last_observed_at": "2026-05-20T12:00:00Z", "source": "webacy" }
        },
        "timelock_present": {
          "status": "warn",
          "data_quality": { "confidence": "medium", "last_observed_at": "2026-05-20T12:00:00Z", "source": "webacy" }
        }
      }
    },
    "market_liquidity": {
      "score": 5,
      "criteria": {
        "mint_burn_anomaly": {
          "status": "pass",
          "data_quality": { "confidence": "high", "last_observed_at": "2026-05-31T18:00:00Z", "source": "webacy" }
        },
        "large_holder_concentration": {
          "status": "warn",
          "data_quality": { "confidence": "high", "last_observed_at": "2026-05-31T18:00:00Z", "source": "webacy" }
        }
      }
    }
  },
  "coverage": {
    "framework_version": "v1",
    "total_criteria": 12,
    "live_criteria": 8,
    "per_category": {
      "smart_contract":         { "live": 4, "total": 4 },
      "asset_collateral":       { "live": 1, "total": 2 },
      "market_liquidity":       { "live": 2, "total": 3 },
      "operational_governance": { "live": 0, "total": 2 },
      "hack_exploit_history":   { "live": 1, "total": 1 },
      "counterparty":           { "live": 0, "total": 0 },
      "chain_infrastructure":   { "live": 0, "total": 0 }
    }
  }
}

Example: Batch Response (partial success)

{
  "schema_version": "3.0",
  "results": [
    {
      "address": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
      "chain": "eth",
      "ok": true,
      "mint_burn_anomaly": {
        "status": "pass",
        "data_quality": { "confidence": "high", "last_observed_at": "2026-05-31T18:00:00Z", "source": "webacy" }
      },
      "large_holder_concentration": {
        "status": "warn",
        "data_quality": { "confidence": "high", "last_observed_at": "2026-05-31T18:00:00Z", "source": "webacy" }
      }
    },
    {
      "address": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef",
      "chain": "eth",
      "ok": false,
      "error_code": "NOT_FOUND"
    }
  ]
}

Depeg Monitor

Real-time price-deviation risk for stablecoins — pairs well with v3 structural scores

Holder Concentration Index

Deeper HCI data and historical concentration trends

Scoring Methodology

How Webacy computes risk scores across all product lines

API Authentication

How to obtain and use your x-api-key