curl --request GET \
--url https://api.webacy.com/v3/rwa/{address} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.webacy.com/v3/rwa/{address}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.webacy.com/v3/rwa/{address}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.webacy.com/v3/rwa/{address}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.webacy.com/v3/rwa/{address}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.webacy.com/v3/rwa/{address}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/v3/rwa/{address}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"schema_version": "3.5",
"metadata": {
"address": "0x100faa513ac917181eb29f73b64bf7a434a206fe",
"chain": "base",
"symbol": "usdb",
"name": "USDBridge",
"asset_type": "stablecoin",
"market_cap_usd": null
},
"composite": {
"grading_scheme": "v1",
"grade": "A-",
"stars": 5,
"score": 14.5,
"contributors": {
"smart_contract": {
"score": 41.5,
"weight": 0.2,
"weighted_contribution": 8.3
},
"operational_governance": {
"score": 41.5,
"weight": 0.15,
"weighted_contribution": 6.2
},
"asset_collateral": {
"score": 0,
"weight": 0.3,
"weighted_contribution": 0
},
"market_liquidity": {
"score": 0,
"weight": 0.2,
"weighted_contribution": 0
},
"counterparty": {
"score": 0,
"weight": 0,
"weighted_contribution": 0
},
"hack_exploit_history": {
"score": 0,
"weight": 0.15,
"weighted_contribution": 0
},
"chain_infrastructure": {
"score": 0,
"weight": 0,
"weighted_contribution": 0
}
},
"upstream_risk": 12,
"clamped_by_upstream": false,
"score_source": "framework",
"drivers_complete": true,
"drivers": [
{
"category": "smart_contract",
"category_name": "Smart contract",
"score": 41.5,
"weight": 0.2,
"weighted_contribution": 8.3,
"criteria": [
{
"key": "audited",
"name": "Has third-party audits",
"status": "warn",
"evidence": {
"audit_count": 1,
"auditor_tier": "mid"
}
},
{
"key": "mint_cap_present",
"name": "Minting is capped",
"status": "warn",
"evidence": {
"mint_cap_status": "uncapped"
}
}
]
}
]
},
"categories": {
"asset_collateral": {
"score": 0,
"criteria": {
"share_price_stable": {
"name": "Not depegged",
"status": "pass",
"data_quality": {
"confidence": 0.95,
"last_observed_at": "2026-06-02T09:49:36Z",
"source": "rwa-grade-pipeline"
}
},
"mint_burn_anomaly": {
"name": "No mint/burn anomalies",
"status": "pass",
"data_quality": {
"confidence": 0.95,
"last_observed_at": "2026-06-02T09:49:36Z",
"source": "rwa-grade-pipeline"
}
}
}
},
"smart_contract": {
"score": 41.5,
"criteria": {
"audited": {
"name": "Has third-party audits",
"status": "warn",
"data_quality": {
"confidence": 0.95,
"last_observed_at": "2026-06-02T09:49:36Z",
"source": "rwa-grade-pipeline"
}
},
"mint_cap_present": {
"name": "Minting is capped",
"status": "warn",
"data_quality": {
"confidence": 0.95,
"last_observed_at": "2026-06-02T09:49:36Z",
"source": "rwa-grade-pipeline"
}
}
}
}
},
"coverage": {
"framework_version": "v1",
"total_criteria": 12,
"live_criteria": 8,
"per_category": {
"smart_contract": {
"live": 2,
"total": 2
},
"operational_governance": {
"live": 2,
"total": 4
},
"asset_collateral": {
"live": 2,
"total": 3
},
"market_liquidity": {
"live": 1,
"total": 2
},
"counterparty": {
"live": 0,
"total": 0
},
"hack_exploit_history": {
"live": 1,
"total": 1
},
"chain_infrastructure": {
"live": 0,
"total": 0
}
}
},
"attributes": {
"market": {
"price_usd": 1,
"volume_24h_usd": 45000000
},
"liquidity": {
"total_dex_liquidity_usd": 50000000,
"liquidity_depth_tier": "deep"
},
"classification": {
"token_type": "standard"
},
"issuer": {
"issuer": "Example Labs",
"is_bridged": false,
"bridged_fraction": 0.04,
"reserve_attestation_provider": "Deloitte",
"reserve_attestation_type": "monthly_attestation",
"reserve_attestation_date": "2026-06-30",
"reserve_attestation_lag_days": 10
},
"audits": {
"audit_count": 5,
"auditor_tier": "top",
"last_audit_date": "2026-02-15",
"audit_firms": [
"OpenZeppelin",
"Trail of Bits"
]
},
"governance": {
"governance_tier": "strong",
"owner_is_multisig": true,
"multisig_threshold": 4,
"multisig_signer_count": 8,
"owner_timelock_seconds": 86400,
"upgrade_admin_address": "0xC0ffee0000000000000000000000000000000002",
"upgrade_admin_is_eoa": false,
"currently_paused": false,
"governance_alert": null,
"governance_alert_detail": null,
"mint_role_is_single_eoa": false,
"mint_role_alert": null,
"mint_authority": null,
"mint_activity_total_minted_30d": null,
"mint_activity_tx_count_30d": null,
"mint_activity_alert": null,
"upgrades_30d": 0,
"pause_events_90d": 0,
"ownership_changes_90d": 1,
"mint_role_grants_90d": 2,
"mint_role_revocations_90d": 0
},
"hacks": {
"has_exploit_history": false,
"exploit_total_usd": null,
"hack_classification": null,
"hack_technique": null
},
"sanctions": {
"sanctions_status": null,
"sanctions_designations": null
}
}
}{
"x402Version": 1,
"error": "payment required"
}{
"message": "Payment service temporarily unavailable"
}Get risk detail for a single RWA
Returns the v3 Webacy-native RWA / stablecoin decomposition: composite grade + per-category contributors, the dense categories criteria map, and coverage disclosure. No risk pass-through (the v2 RWA grade has none; composite carries the headline, floored by upstream_risk). POLARITY: scores 0–100, higher = worse.
curl --request GET \
--url https://api.webacy.com/v3/rwa/{address} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.webacy.com/v3/rwa/{address}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.webacy.com/v3/rwa/{address}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.webacy.com/v3/rwa/{address}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.webacy.com/v3/rwa/{address}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.webacy.com/v3/rwa/{address}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/v3/rwa/{address}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"schema_version": "3.5",
"metadata": {
"address": "0x100faa513ac917181eb29f73b64bf7a434a206fe",
"chain": "base",
"symbol": "usdb",
"name": "USDBridge",
"asset_type": "stablecoin",
"market_cap_usd": null
},
"composite": {
"grading_scheme": "v1",
"grade": "A-",
"stars": 5,
"score": 14.5,
"contributors": {
"smart_contract": {
"score": 41.5,
"weight": 0.2,
"weighted_contribution": 8.3
},
"operational_governance": {
"score": 41.5,
"weight": 0.15,
"weighted_contribution": 6.2
},
"asset_collateral": {
"score": 0,
"weight": 0.3,
"weighted_contribution": 0
},
"market_liquidity": {
"score": 0,
"weight": 0.2,
"weighted_contribution": 0
},
"counterparty": {
"score": 0,
"weight": 0,
"weighted_contribution": 0
},
"hack_exploit_history": {
"score": 0,
"weight": 0.15,
"weighted_contribution": 0
},
"chain_infrastructure": {
"score": 0,
"weight": 0,
"weighted_contribution": 0
}
},
"upstream_risk": 12,
"clamped_by_upstream": false,
"score_source": "framework",
"drivers_complete": true,
"drivers": [
{
"category": "smart_contract",
"category_name": "Smart contract",
"score": 41.5,
"weight": 0.2,
"weighted_contribution": 8.3,
"criteria": [
{
"key": "audited",
"name": "Has third-party audits",
"status": "warn",
"evidence": {
"audit_count": 1,
"auditor_tier": "mid"
}
},
{
"key": "mint_cap_present",
"name": "Minting is capped",
"status": "warn",
"evidence": {
"mint_cap_status": "uncapped"
}
}
]
}
]
},
"categories": {
"asset_collateral": {
"score": 0,
"criteria": {
"share_price_stable": {
"name": "Not depegged",
"status": "pass",
"data_quality": {
"confidence": 0.95,
"last_observed_at": "2026-06-02T09:49:36Z",
"source": "rwa-grade-pipeline"
}
},
"mint_burn_anomaly": {
"name": "No mint/burn anomalies",
"status": "pass",
"data_quality": {
"confidence": 0.95,
"last_observed_at": "2026-06-02T09:49:36Z",
"source": "rwa-grade-pipeline"
}
}
}
},
"smart_contract": {
"score": 41.5,
"criteria": {
"audited": {
"name": "Has third-party audits",
"status": "warn",
"data_quality": {
"confidence": 0.95,
"last_observed_at": "2026-06-02T09:49:36Z",
"source": "rwa-grade-pipeline"
}
},
"mint_cap_present": {
"name": "Minting is capped",
"status": "warn",
"data_quality": {
"confidence": 0.95,
"last_observed_at": "2026-06-02T09:49:36Z",
"source": "rwa-grade-pipeline"
}
}
}
}
},
"coverage": {
"framework_version": "v1",
"total_criteria": 12,
"live_criteria": 8,
"per_category": {
"smart_contract": {
"live": 2,
"total": 2
},
"operational_governance": {
"live": 2,
"total": 4
},
"asset_collateral": {
"live": 2,
"total": 3
},
"market_liquidity": {
"live": 1,
"total": 2
},
"counterparty": {
"live": 0,
"total": 0
},
"hack_exploit_history": {
"live": 1,
"total": 1
},
"chain_infrastructure": {
"live": 0,
"total": 0
}
}
},
"attributes": {
"market": {
"price_usd": 1,
"volume_24h_usd": 45000000
},
"liquidity": {
"total_dex_liquidity_usd": 50000000,
"liquidity_depth_tier": "deep"
},
"classification": {
"token_type": "standard"
},
"issuer": {
"issuer": "Example Labs",
"is_bridged": false,
"bridged_fraction": 0.04,
"reserve_attestation_provider": "Deloitte",
"reserve_attestation_type": "monthly_attestation",
"reserve_attestation_date": "2026-06-30",
"reserve_attestation_lag_days": 10
},
"audits": {
"audit_count": 5,
"auditor_tier": "top",
"last_audit_date": "2026-02-15",
"audit_firms": [
"OpenZeppelin",
"Trail of Bits"
]
},
"governance": {
"governance_tier": "strong",
"owner_is_multisig": true,
"multisig_threshold": 4,
"multisig_signer_count": 8,
"owner_timelock_seconds": 86400,
"upgrade_admin_address": "0xC0ffee0000000000000000000000000000000002",
"upgrade_admin_is_eoa": false,
"currently_paused": false,
"governance_alert": null,
"governance_alert_detail": null,
"mint_role_is_single_eoa": false,
"mint_role_alert": null,
"mint_authority": null,
"mint_activity_total_minted_30d": null,
"mint_activity_tx_count_30d": null,
"mint_activity_alert": null,
"upgrades_30d": 0,
"pause_events_90d": 0,
"ownership_changes_90d": 1,
"mint_role_grants_90d": 2,
"mint_role_revocations_90d": 0
},
"hacks": {
"has_exploit_history": false,
"exploit_total_usd": null,
"hack_classification": null,
"hack_technique": null
},
"sanctions": {
"sanctions_status": null,
"sanctions_designations": null
}
}
}{
"x402Version": 1,
"error": "payment required"
}{
"message": "Payment service temporarily unavailable"
}composite.score and every categories.*.score run 0–100, where 0 = no structural risk and 100 = maximum risk (grade A+ ≈ 0, F ≈ 100) — the opposite of yield or performance scores. See Score Polarity for the full grade bands.Assessing freshness
stale flag or generated_at. For a freshness signal, read the RWA grades list (GET /v3/rwa/grades), which carries generated_at and stale.Treat missing, stale, or errored data as unknown — never as safe. See Hard-gating and fail behavior.Segment and classification
metadata.segment carries the derived category — stablecoin or rwa — alongside the classification fields it comes from (metadata.asset_class, metadata.subclass). metadata.asset_type holds the same value as segment and predates the split; prefer segment in new integrations.
metadata.asset_class = "fiat" means the token is denominated in a government currency, not that it is cash-backed.
classification_available: false means the classification could not be loaded for this request. The response still succeeds, but the classification fields are not trustworthy — treat them as unknown.404 for an RWA, see GET /v3/stablecoins/{address}.Authorizations
Path Parameters
Token contract address.
Query Parameters
Chain identifier (e.g. eth, base, pol). Required.
eth, base, bsc, pol, opt, arb, avax, sol, stellar, hedera, tron, sui, ton, sei, btc, gnosis Grading scheme to pin — selects the per-category weights and letter-grade band table. Default v2 (alias of v1's weights, standard 11-band grade scale). peg is the peg-loss-focused weighting. v3/v4/peg-liquidity are registered but withheld behind the v3-grading-scheme feature flag. Unknown values return 400 with the supported list.
v1, v2, peg Response
Webacy-native v3 RWA / stablecoin detail.
Webacy-native v3 RWA / stablecoin detail. Same shape family as VaultV3Response, minus the risk pass-through (the v2 RWA grade has no risk envelope; the headline signal is composite, floored by upstream_risk).
"3.5"
Structural fact sheet for an RWA / stablecoin — identities only.
Show child attributes
Show child attributes
Headline grade block. POLARITY (load-bearing): score is 0–100, HIGHER = WORSE (A+ = 0, F = 100) — same direction as the v2 risk.score on the same response. score = max(Σ contributors·weight, upstream_risk): floored from below by the upstream pipeline risk.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
How many criteria are live today vs defined by the framework — so what the grade reflects is on the wire, not just in docs.
Show child attributes
Show child attributes
Curated, grouped passthrough of the RWA grade record's detail-only facts. Always present as a block; individual leaves are null when the underlying value is not available. The safety score/grade are intentionally excluded — composite remains the only grade.
Show child attributes
Show child attributes
false when the asset classification could not be loaded — metadata.asset_type falls back to stablecoin and asset_class / subclass are null. GET /v3/stablecoins/{address} fails closed (503) in that state.
