curl --request GET \
--url https://api.webacy.com/rwa/{address} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.webacy.com/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/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/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/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/rwa/{address}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/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{
"token": {
"address": "<string>",
"chain": "<string>",
"symbol": "<string>",
"name": "<string>",
"assetType": "<string>",
"assetTypeReason": "<string>",
"asset_class": "fiat",
"is_rwa": true,
"subclass": "tbill",
"denomination": {
"code": "<string>",
"name": "<string>",
"category": "<string>",
"pegRatio": "<string>",
"pegType": "<string>"
},
"token_type": "standard",
"token_labels": [
"<string>"
],
"peg_range": [
123
],
"is_collapsed": true,
"is_rwa_nav": true,
"rwa_nav_usd": 123,
"rwa_classification": "tbill",
"rwa_nav_as_of": "<string>",
"market_cap_usd": 123,
"total_market_cap_usd": 123,
"market_cap_by_chain": {},
"circulating_supply": 123,
"total_supply_on_chain": 123,
"total_supply_cross_chain": 123,
"fdv_usd": 123,
"volume_24h": 123,
"volume_24h_usd": 123,
"dex_volume_24h_usd": 123,
"markets": [
{
"dex": "<string>",
"pair": "<string>",
"pool_address": "<string>",
"chain": "<string>",
"liquidity_usd": 123,
"volume_24h_usd": 123
}
],
"markets_all_chains": [
{
"dex": "<string>",
"pair": "<string>",
"pool_address": "<string>",
"chain": "<string>",
"liquidity_usd": 123,
"volume_24h_usd": 123
}
],
"total_dex_liquidity_all_chains_usd": 123,
"migration": {
"status": "active",
"target_symbol": "<string>",
"target_address": "<string>",
"ratio": 123,
"notes": "<string>"
},
"project_info": {
"issuer": "<string>",
"audit_count": 123,
"audit_firms": [
"<string>"
],
"auditor_tier": "top",
"last_audit_date": "<string>",
"audit_report_urls": [
"<string>"
],
"notes": "<string>"
},
"score_delta_24h": 123,
"score_delta_7d": 123,
"segment": "stablecoin"
},
"snapshot": {
"ts": "<string>",
"score": 123,
"tier": "critical",
"drivers": [
{
"name": "<string>",
"raw": 123,
"normalized": 123,
"weight": 123,
"contribution": 123
}
],
"price": 123,
"peg_value": 123,
"abs_dev_clean": 123,
"dev_clean": 123,
"reference_price": 123,
"reference_prices": {},
"price_source": "<string>",
"price_sources_agree": true,
"price_source_deviation": 123,
"within_expected_range": true,
"data_alerts": [
"<string>"
]
},
"risk": {},
"history": {
"hours": 84,
"series": [
{
"ts": "<string>",
"score": 123,
"tier": "critical",
"abs_dev_clean": 123,
"price": 123,
"peg_value": 123
}
],
"consecutive_days_below_peg": 123
},
"depegEvents": [
{
"eventType": "<string>",
"oldTier": "<string>",
"newTier": "<string>",
"riskScore": 123,
"deviationPct": 123,
"detectedAt": "2023-11-07T05:31:56Z"
}
],
"events": [
{
"id": "<string>",
"name": "<string>",
"symbol": "<string>",
"chain": "<string>",
"address": "<string>",
"start": "<string>",
"end": "<string>",
"notes": "<string>"
}
],
"stale": true
}{
"message": "Unauthorized"
}{
"x402Version": 1,
"error": "payment required"
}{
"message": "Payment service temporarily unavailable"
}Get risk detail for a single stablecoin
Returns the full token detail: identity, classification, market data (with cross-chain rollups, DEX markets, migration lifecycle, audit provenance, score deltas), the latest depeg snapshot with full score decomposition, history series, and recorded depeg events. Address is resolved against the DB; supply chain when the same address exists on multiple chains. During partial outage the response carries stale: true.
curl --request GET \
--url https://api.webacy.com/rwa/{address} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.webacy.com/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/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/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/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/rwa/{address}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.webacy.com/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{
"token": {
"address": "<string>",
"chain": "<string>",
"symbol": "<string>",
"name": "<string>",
"assetType": "<string>",
"assetTypeReason": "<string>",
"asset_class": "fiat",
"is_rwa": true,
"subclass": "tbill",
"denomination": {
"code": "<string>",
"name": "<string>",
"category": "<string>",
"pegRatio": "<string>",
"pegType": "<string>"
},
"token_type": "standard",
"token_labels": [
"<string>"
],
"peg_range": [
123
],
"is_collapsed": true,
"is_rwa_nav": true,
"rwa_nav_usd": 123,
"rwa_classification": "tbill",
"rwa_nav_as_of": "<string>",
"market_cap_usd": 123,
"total_market_cap_usd": 123,
"market_cap_by_chain": {},
"circulating_supply": 123,
"total_supply_on_chain": 123,
"total_supply_cross_chain": 123,
"fdv_usd": 123,
"volume_24h": 123,
"volume_24h_usd": 123,
"dex_volume_24h_usd": 123,
"markets": [
{
"dex": "<string>",
"pair": "<string>",
"pool_address": "<string>",
"chain": "<string>",
"liquidity_usd": 123,
"volume_24h_usd": 123
}
],
"markets_all_chains": [
{
"dex": "<string>",
"pair": "<string>",
"pool_address": "<string>",
"chain": "<string>",
"liquidity_usd": 123,
"volume_24h_usd": 123
}
],
"total_dex_liquidity_all_chains_usd": 123,
"migration": {
"status": "active",
"target_symbol": "<string>",
"target_address": "<string>",
"ratio": 123,
"notes": "<string>"
},
"project_info": {
"issuer": "<string>",
"audit_count": 123,
"audit_firms": [
"<string>"
],
"auditor_tier": "top",
"last_audit_date": "<string>",
"audit_report_urls": [
"<string>"
],
"notes": "<string>"
},
"score_delta_24h": 123,
"score_delta_7d": 123,
"segment": "stablecoin"
},
"snapshot": {
"ts": "<string>",
"score": 123,
"tier": "critical",
"drivers": [
{
"name": "<string>",
"raw": 123,
"normalized": 123,
"weight": 123,
"contribution": 123
}
],
"price": 123,
"peg_value": 123,
"abs_dev_clean": 123,
"dev_clean": 123,
"reference_price": 123,
"reference_prices": {},
"price_source": "<string>",
"price_sources_agree": true,
"price_source_deviation": 123,
"within_expected_range": true,
"data_alerts": [
"<string>"
]
},
"risk": {},
"history": {
"hours": 84,
"series": [
{
"ts": "<string>",
"score": 123,
"tier": "critical",
"abs_dev_clean": 123,
"price": 123,
"peg_value": 123
}
],
"consecutive_days_below_peg": 123
},
"depegEvents": [
{
"eventType": "<string>",
"oldTier": "<string>",
"newTier": "<string>",
"riskScore": 123,
"deviationPct": 123,
"detectedAt": "2023-11-07T05:31:56Z"
}
],
"events": [
{
"id": "<string>",
"name": "<string>",
"symbol": "<string>",
"chain": "<string>",
"address": "<string>",
"start": "<string>",
"end": "<string>",
"notes": "<string>"
}
],
"stale": true
}{
"message": "Unauthorized"
}{
"x402Version": 1,
"error": "payment required"
}{
"message": "Payment service temporarily unavailable"
}Authorizations
Path Parameters
Token contract address (hex format).
Query Parameters
Chain the token is on (e.g. eth, sol). Needed when the address exists on more than one chain in Webacy's address index — the endpoint then returns 400 listing the chains. Most EVM addresses do, so pass it on every EVM call.
Hours of history to return (default 24). Values above 720 (30 days) are clamped to 720; values below 1 to 1.
1 <= x <= 720Response
Full token detail with depeg snapshot, score decomposition, and history
Token identity + classification + market data for the detail endpoint.
Show child attributes
Show child attributes
Full point-in-time depeg snapshot returned by the detail endpoint.
Show child attributes
Show child attributes
null when the token has no score yet, rather than an overallRisk of 0.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
