← Back to Documentation

RWA Risk Oracle — API Reference

Complete endpoint reference for multi-vector risk scoring, compliance intelligence, and evidence-grade data across 75+ tokenized asset protocols.

41
Endpoints
61
Protocols Scored
9
Risk Vectors
$20B++
TVL Coverage
Interactive Explorer OpenAPI YAML OpenAPI JSON

Authentication

All endpoints require an API key via the X-API-Key header. The public dashboard at /portfolio.html uses a server-side proxy and does not expose keys.

curl -H "X-API-Key: YOUR_KEY" https://api.feedoracle.io/api/v1/rwa/risk

Base URL: https://api.feedoracle.io/api/v1/rwa · Get API Key →

Evidence Layer: Every response includes an evidence object with ECDSA ES256K (secp256k1) signature, SHA-256 payload hash, and manifest ID. Verify signatures via JWKS. Responses include meta.schema_version and meta.scoring_model_version for reproducibility.

Risk Scoring Core

Multi-vector risk scores for tokenized asset protocols. 9 dimensions weighted into a composite 0–100 score with letter grades (A–F). Includes algorithmic reason codes explaining each score.

GET /v1/rwa/risk All protocol scores

Returns composite risk scores for all scored protocols with market summary and risk distribution.

Query Parameters

ParamTypeDescription
profilestring optionalRisk profile preset: conservative, balanced, growth. Changes vector weights.
typestring optionalFilter by asset type: regulated_stablecoin, treasury, commodity, credit, synthetic, real_estate, equities, insurance, xrpl_infrastructure, xrpl_custody, xrpl_tokenization

Response Fields

protocols_scoredintNumber of actively scored protocols (currently 61+)
protocols[]arrayArray of protocol score objects
.slugstringURL-safe identifier (e.g. paxos-gold)
.protocolstringDisplay name
.risk_scoreintComposite score 0–100 (higher = safer)
.risk_gradestringLetter grade: A (≥85), B (≥70), C (≥55), D (≥40), F (<40)
.typestringAsset class (regulated_stablecoin, treasury, commodity, credit, synthetic, real_estate, equities, insurance, xrpl_infrastructure, xrpl_custody, xrpl_tokenization)
.tvl_usdnumber|nullTotal Value Locked in USD
.risk_vectorsobjectIndividual dimension scores (0–100 each)
.reason_codesobjectAlgorithmic & AI-assisted explanation codes (positive + negative)
.risk_flags[]arrayActive risk warnings
market_summaryobjectAggregate TVL, grade distribution, risk distribution
tbill_3m_yieldnumberCurrent US 3-month T-bill benchmark yield

Risk Vectors (9 dimensions)

VectorWeightMeasures
institutional20%Issuer credibility, regulatory licenses, audit history
maturity15%Protocol age, track record, incident history
diversification10%Multi-chain deployment, chain HHI concentration
dex_liquidity12%DEX depth, volume, pair diversity
onchain_transparency12%Contract verification, recent activity, proxy patterns
esg_carbon8%Carbon footprint per chain weighted by TVL
yield_spread8%Yield spread vs T-Bill benchmark, sustainability metrics
tvl_weight10%TVL size and stability weighting
regulatory5%Regulatory coverage, licensing status, compliance framework
GET /v1/rwa/risk/{slug} Single protocol — full detail + evidence

Returns complete risk profile for a single protocol including all 9 vector scores, compliance data, legal state, identifier registry, ESG breakdown, and ECDSA-signed evidence.

Path Parameters

ParamTypeDescription
slugstring requiredProtocol identifier (e.g. rlusd, usdc, xrpl-ecosystem, paxos-gold)

Response Fields (protocol object)

risk_scoreintComposite 0–100
risk_gradestringA/B/C/D/F
risk_vectorsobjectAll 9 dimension scores
reason_codesobject.codes[] with vector, impact (positive/negative), text explanation
complianceobjectJurisdiction access, sanctions screening, investor requirements
legal_stateobjectContract powers, transfer finality, dispute resolution
identifier_registryobjectToken (symbol, chain, contract), issuer (name, country, LEI), underlying (ISIN, type)
esg_carbonobjectESG score, category, chain-by-chain breakdown, data provenance
dex_liquidityobjectTotal liquidity USD, 24h volume, category
onchain_transparencyobjectVerification status, proxy detection, activity recency
chainsobjectPer-chain TVL distribution
tvl_delta_7d_pctnumber7-day TVL change percentage
tvl_delta_30d_pctnumber30-day TVL change percentage

Enhanced — Regulated Stablecoins

For regulated_stablecoin assets (RLUSD, USDC, PYUSD, USDG, EURC, USDP).

stablecoin_detail.issuerstringIssuing entity (Ripple, Circle, PayPal)
stablecoin_detail.custodianstringReserve custodian
stablecoin_detail.auditorstringAttestation auditor
stablecoin_detail.pegobject.target, .current, .deviation
stablecoin_detail.reservesobject.ratio, .value_usd, .outstanding — CPA-attested (RLUSD)
stablecoin_detail.complianceobject.mica, .genius — MiCA + GENIUS Act status
stablecoin_detail.anchoringobject.total, .polygon, .xrpl — on-chain anchors (RLUSD)
stablecoin_detail.supplyobject.total, .chains, .change_24h

Enhanced — XRPL Native Assets

For XRPL assets (xrpl-ecosystem, ripple-custody, xrpl-tokenized-assets).

xrpl_detail.networkobject.ledger_index, .server_state, .peers — live ledger
xrpl_detail.xrp_marketobject.price_usd, .change_24h, .volume_24h — Bitstamp
xrpl_detail.whale_flowsobject.sentiment, .net_flow_24h_xrp, .inflow, .outflow
xrpl_detail.rwa_ecosystemobject.custody_aum, .rlusd_supply, .tokenized_assets
GET /v1/rwa/risk/{slug}/pdf PDF risk report

Generates a downloadable PDF risk assessment report for a single protocol. Includes score breakdown, risk vectors, compliance summary, and evidence metadata. Returns application/pdf.

GET /v1/rwa/market Market overview & aggregate stats

Aggregate market intelligence: total RWA TVL, grade distribution, sector breakdown, TVL trends, and benchmark comparison.

Protocol Registry Supporting

Structured identifiers for each protocol: token metadata (symbol, chain, contract address), issuer details (name, country, LEI), and underlying asset classification (ISIN, type). Powers compliance mapping and cross-referencing.

GET /v1/rwa/registry All protocol identifiers

Query Parameters

ParamTypeDescription
typestring optionalFilter: regulated_stablecoin, treasury, commodity, credit, synthetic, real_estate, equities, insurance, xrpl_infrastructure, xrpl_custody, xrpl_tokenization
chainstring optionalFilter by deployment chain
has_leiboolean optionalOnly protocols with LEI identifier

Response Fields

total_protocolsintTotal protocols in registry
registry_versionstringRegistry data version
protocols[].tokenobjectsymbol, chain, contract_address, decimals
protocols[].issuerobjectname, country, lei, website
protocols[].underlyingobjectisin, type, description
protocols[].complianceobjectregulated, license_type, jurisdiction
GET /v1/rwa/registry/{slug} Single protocol identifiers

Returns full identifier record for a single protocol.

GET /v1/rwa/registry/search Search by name, symbol, or ISIN

Query Parameters

ParamTypeDescription
qstring requiredSearch query (matches name, symbol, ISIN, LEI)
GET /v1/rwa/registry/stats Registry statistics

Aggregate statistics: total protocols, type distribution, chain distribution, LEI coverage percentage.

Compliance Intelligence Core

Cross-border regulatory status for each protocol: jurisdiction accessibility, sanctions screening (OFAC/EU/UN), investor qualification requirements, and reporting obligations. Powers MiCA Article 66 and DORA workflows.

GET /v1/rwa/compliance All protocols — compliance overview

Returns compliance summary for all scored protocols.

GET /v1/rwa/compliance/{slug} Single protocol — full compliance detail

Response Fields

compliance_scoreint0–10 composite compliance rating
accessible_jurisdictions[]arrayISO 3166 codes where asset is accessible (e.g. DE, US, SG)
banned_jurisdictions[]arrayJurisdictions where asset is explicitly prohibited
restricted_jurisdictions[]arrayJurisdictions with restrictions (accredited investors only, etc.)
sanctions_screeningstringScreening framework: ofac_eu_un, ofac_only, none
investor_requirementsobjectkyc_required, accredited_only, min_investment
reporting_obligations[]arrayApplicable reporting frameworks
jurisdiction_details[]arrayPer-jurisdiction breakdown with status and notes
cross_border_transferobjectTransfer restrictions, cooling periods, whitelist requirements
GET /v1/rwa/compliance/jurisdiction/{code} All protocols accessible in a jurisdiction

Path Parameters

ParamTypeDescription
codestring requiredISO 3166-1 alpha-2 country code (e.g. DE, US, SG)

Returns all protocols accessible, restricted, or banned in the specified jurisdiction.

GET /v1/rwa/compliance/check Batch compliance check

Check compliance status for multiple protocols against a specific jurisdiction in one call.

Query Parameters

ParamTypeDescription
slugsstring requiredComma-separated protocol slugs
jurisdictionstring optionalISO country code to check against
GET /v1/rwa/compliance/stats Compliance statistics

Aggregate compliance statistics: jurisdiction coverage, average compliance scores, sanctions screening coverage.

Oracle Feeds Core

Real-time consensus price feeds for tokenized assets. Multi-source aggregation (median/weighted median) with outlier removal, disagreement detection, and staleness monitoring. Sources include Chainlink, Pyth, CoinGecko, and direct exchange feeds. Prices are validated against configurable deviation thresholds before publication.

GET /v1/rwa/oracle/feeds/{slug} Consensus price feed for single asset

Response Fields

oracle.value_strstringConsensus value at full precision (e.g. "5054.88000000")
oracle.precisionintDecimal places (typically 8)
oracle.base_assetstringUnderlying reference (e.g. "Gold (XAU)", "USD")
oracle.consensus.rulestringAggregation method (median, weighted_median)
oracle.consensus.sources_usedarrayList of price source names in consensus
oracle.consensus.disagreement_bpsnumberSource disagreement in basis points
oracle.consensus.source_ages_secondsobjectAge of each source data point
oracle.consensus.stale_sourcesarrayList of stale (>300s) source feeds
GET /v1/rwa/oracle/status Oracle feed health status

Returns operational status of oracle feed infrastructure including source availability and freshness metrics.

DEX Liquidity Enrichment

On-chain DEX liquidity depth, volume, and pair diversity across chains and decentralized exchanges. Note: many RWA tokens (e.g. tokenized T-Bills) trade primarily via mint/redeem on the primary market rather than on DEXes. For these assets, the result.liq.cat may show THIN or NO_DEX — this does not necessarily indicate illiquidity but rather a different redemption model (e.g. T+0, T+1, daily NAV).

GET /v1/rwa/liquidity All protocols — liquidity overview

Returns DEX liquidity summaries for all tracked protocols.

GET /v1/rwa/liquidity/{slug} Single protocol — detailed liquidity

Response Fields

result.m.total_liq_usdnumberTotal DEX liquidity in USD
result.m.vol_24h_usdnumber24-hour DEX trading volume
result.m.pair_countintNumber of active trading pairs
result.m.chains[]arrayChains with liquidity
result.m.dexes[]arrayDEXes providing liquidity (Uniswap, Curve, etc.)
result.liq.scoreintLiquidity score 0–100
result.liq.catstringDEEP / MODERATE / THIN / NO_DEX

On-Chain Transparency Enrichment

Smart contract verification status, proxy patterns, transaction activity recency, and on-chain trust signals.

GET /v1/rwa/onchain All protocols — on-chain overview

Returns on-chain transparency summaries for all tracked protocols.

GET /v1/rwa/onchain/{slug} Single protocol — on-chain detail

Response Fields

result.transparency.scoreintTransparency score 0–100
result.transparency.categorystringTRANSPARENT / PARTIAL / OPAQUE
result.verifiedbooleanContract source code verified on block explorer
result.is_proxybooleanUses upgradeable proxy pattern
result.recent_txsintTransaction count in recent period
result.days_since_last_txintDays since last on-chain transaction

ESG / Carbon Enrichment

Environmental scoring based on chain-weighted carbon footprint. Sources include FeedOracle Carbon Chain API, EU ETS, Ember Climate, and VeChain ToolChain (source pipeline DNV-certified under ISO 14040/14044).

GET /v1/rwa/esg/{slug} ESG/Carbon score for single protocol

Response Fields

esg.scoreintComposite ESG score 0–100
esg.categorystringEXCELLENT / GOOD / MODERATE / POOR
esg.chains_matchedintChains with carbon data available
esg.breakdown[]arrayPer-chain: chain, symbol, tvl_pct, green_score, co2_mt
esg.data_provenanceobjectSources, cross-validation references, method_reference (ISO standard)
esg.data_provenance.vechain_attestationobjectVeChain sustainability data when available

Events Supporting

Risk-relevant events detected for each protocol: anomalies, governance changes, peg deviations, liquidity shifts, and regulatory developments.

GET /v1/rwa/events All recent events

Returns recent events across all protocols, sorted by recency.

GET /v1/rwa/events/{slug} Events for single protocol

Response Fields

events[]arrayEvent records
.typestringEvent category (anomaly, governance, peg_deviation, liquidity_shift)
.detailstringHuman-readable event description
.severitystringinfo / warning / critical
.detected_atstringISO 8601 detection timestamp
events_countintTotal events returned
GET /v1/rwa/events/stats Event statistics

Aggregate event statistics: event type distribution, severity breakdown, most active protocols.

Score History Supporting

Historical risk score tracking. Enables trend analysis and score change monitoring over time.

GET /v1/rwa/history Score history summary

Response Fields

daysintDays of history available
summaryobjectScore trend summary across protocols
GET /v1/rwa/history/{slug} Score history for single protocol

Response Fields

history[]arrayDaily score snapshots
.datestringISO date
.risk_scoreintRisk score on that date
.risk_gradestringLetter grade on that date
data_pointsintNumber of historical data points

Discovery Enrichment

New protocol detection: monitors DeFiLlama for untracked RWA protocols and provides coverage analysis.

GET /v1/rwa/discovery Untracked protocol discovery

Response Fields

result.total_rwa_defillamaintTotal RWA protocols on DeFiLlama
result.trackedintProtocols tracked by FeedOracle
result.untrackedintNot yet tracked
result.coverage_pctnumberTVL coverage percentage
result.tracked_tvlnumberTotal TVL of tracked protocols
result.new_protocols[]arrayRecently discovered untracked protocols

Yield Analysis NEW

Yield decomposition and source classification. Injected into /v1/rwa/risk/{slug} responses as yield_analysis block. Answers: "Where does the yield come from, and how does it compare to risk-free?"

This is best-effort classification based on issuer disclosures and public sources. Not investment advice. Confidence scores indicate data certainty.

Yield Source Classes

ClassDescriptionExample
US_TREASURY_BILLS_DIRECTBacked directly by US T-BillsOndo USDY, Hashnote USYC
MMF_GOV_ONLYGovernment-only money market fundBlackRock BUIDL, Franklin FOBXX
REPO_TREASURY_COLLATERALRepo agreements collateralized by Treasuries
TOKENIZED_FUND_GOV_BONDSTokenized ETFs/funds holding gov bondsBacked bIB01
PRIVATE_CREDIT_SECUREDLoans secured by real-world collateralCentrifuge
PRIVATE_CREDIT_UNSECUREDUnder-collateralized institutional lendingMaple, Goldfinch
STRUCTURED_CREDITCLOs, ABS, tranched products
COMMODITY_LEASE_OR_FEEGold-backed, commodity-linkedPAXG, XAUT
STABLECOIN_NO_YIELDStablecoins where yield is not passed to holdersUSDC, RLUSD, PYUSD
MIXEDMultiple yield sources combined
UNKNOWNInsufficient data for classification

Response Fields

FieldTypeDescription
nominal_apynumber?Annualized yield (decimal). Null if unavailable.
benchmark.namestringUS_TBILL_3M (FRED series DTB3)
benchmark.ratenumberCurrent risk-free rate (decimal)
credit_spreadnumber?nominal_apy − benchmark.rate. Null if either missing.
yield_source_classenumTaxonomy classification (see above)
derivationobjectMethod + inputs used for computation
confidence0-1Classification certainty
notesstringSource attribution, disclaimers
Example: Ondo USDY (Treasury-backed, yield-bearing)
{
  "nominal_apy": 0.052,
  "benchmark": {
    "name": "US_TBILL_3M",
    "source": "FRED",
    "rate": 0.045,
    "observed_at": "2026-02-11T00:00:00Z"
  },
  "credit_spread": 0.007,
  "yield_source_class": "US_TREASURY_BILLS_DIRECT",
  "derivation": {
    "method": "nominal_minus_benchmark",
    "inputs": ["defillama_yield", "fred_tbills_3m"]
  },
  "confidence": 0.80,
  "notes": "USDY backed by short-duration US Treasuries and bank deposits."
}
Example: RLUSD (stablecoin, no yield to holders)
{
  "nominal_apy": 0.0,
  "benchmark": { "name": "US_TBILL_3M", "source": "FRED", "rate": 0.036 },
  "credit_spread": -0.036,
  "yield_source_class": "STABLECOIN_NO_YIELD",
  "confidence": 0.95,
  "notes": "Reserves generate yield for issuer, not holders."
}

Redemption / Time-to-Cash NEW

Institutional liquidity profiles: settlement times, gates, minimum amounts, fees. Answers the question: "If I need to exit $50M, how fast can I get cash?"

GET /v1/rwa/redemption All protocols – liquidity profiles
GET /v1/rwa/redemption/{slug} Single protocol – full Time-to-Cash analysis

Response Fields

FieldTypeDescription
primary_exitenumISSUER_DIRECT | DEX_ONLY | HYBRID | OTC | NONE
settlement_timeenumT+0 | T+1 | T+2_BUSINESS_DAYS | VARIABLE | LOCK_PERIOD
settlement_days_maxintegerMaximum calendar days to settlement
minimum_redemption_usdnumberMinimum redemption amount (null if none)
gates.withdrawal_gatebooleanCan issuer halt redemptions?
gates.conditionsstringGate activation conditions
feesobjectFee in basis points (null if free)
liquidity_latency_score0-100Composite: higher = faster exit to cash
nav_frequencyenumREAL_TIME | DAILY | WEEKLY | MONTHLY
confidence0-1Data confidence level
Example: RLUSD (T+0 instant)
{
  "primary_exit": "ISSUER_DIRECT",
  "settlement_time": "T+0",
  "settlement_days_max": 0,
  "minimum_redemption_usd": 100000,
  "gates": { "withdrawal_gate": false, "suspension_rights": false },
  "fees": { "type": "bps", "value": 0 },
  "liquidity_latency_score": 90,
  "nav_frequency": "REAL_TIME",
  "confidence": 0.8
}
Example: Maple Finance (Lock period)
{
  "primary_exit": "NONE",
  "settlement_time": "LOCK_PERIOD",
  "settlement_days_max": 90,
  "gates": { "withdrawal_gate": true, "conditions": "Loan maturity dependent" },
  "liquidity_latency_score": 0,
  "confidence": 0.8
}

Data is expanded progressively. Protocols without redemption data return 404 with a hint field.

Document Registry NEW

Compliance documents with source URLs pointing to issuer/auditor originals. SHA-256 hashes for integrity verification. Single Source of Truth without hosting copyrighted material.

GET /v1/rwa/documents All protocols – document overview
GET /v1/rwa/documents/{slug} Single protocol – full document list

Document Categories

CategoryDescription
attestationReserve/asset attestation reports (CPA, auditor)
auditSmart contract security audits
prospectusOffering memoranda, circulars
legalTerms of service, legal agreements
whitepaperProduct overview, technical specs
factsheetFund factsheets, performance reports
regulatoryRegulatory filings, compliance guidance

Document Fields

FieldTypeDescription
categoryenumDocument type (see above)
titlestringHuman-readable document title
urlURISource URL (issuer/auditor hosted)
issuerstringPublisher of the document
datedatePublication date
hash_sha256string?SHA-256 hash for integrity verification
regulatory_relevanceenum?MiCA | DORA | SEC | NYDFS
Example: RLUSD documents
{
  "slug": "rlusd",
  "total_documents": 4,
  "documents": [
    {
      "category": "attestation",
      "title": "RLUSD Reserve Attestation Report (Nov 2025)",
      "url": "https://www.bpm.com/rlusd-attestation-nov-2025",
      "issuer": "BPM LLP",
      "date": "2025-12-15",
      "regulatory_relevance": "NYDFS"
    },
    {
      "category": "legal",
      "title": "RLUSD Terms of Service",
      "url": "https://ripple.com/legal/rlusd-terms",
      "issuer": "Ripple"
    }
  ]
}

Document URLs point to issuer-hosted originals. FeedOracle does not host or redistribute third-party documents.

id="alerts">

Alerts & Webhooks Supporting

Real-time webhook notifications for risk score changes, grade transitions, and critical events.

GET /v1/rwa/alerts List webhook subscriptions

Returns all active webhook subscriptions for your API key.

POST /v1/rwa/alerts/subscribe Create webhook subscription

Request Body (JSON)

FieldTypeDescription
webhook_urlstring requiredHTTPS webhook endpoint URL
eventsarray optionalEvent types to subscribe to (default: all)
slugsarray optionalProtocol slugs to monitor (default: all)

Webhook Event Payload

Your endpoint receives a POST with this JSON body when a subscribed event fires:

{
  "event": "grade_change",
  "timestamp": "2026-02-11T14:30:00Z",
  "protocol": {
    "slug": "ondo-usdy",
    "name": "Ondo USDY",
    "type": "treasury"
  },
  "previous": { "score": 78, "grade": "B" },
  "current":  { "score": 64, "grade": "C" },
  "reason_codes": [
    { "vector": "tvl_weight", "impact": "negative", "text": "TVL dropped 18% in 7d" },
    { "vector": "dex_liquidity", "impact": "negative", "text": "DEX liquidity below $1M" }
  ],
  "evidence": {
    "signature": "0x3a9f...",
    "manifest_id": "evt-20260211-143000-ondo-usdy"
  }
}

Event types: grade_change, score_threshold, anomaly_detected, peg_deviation, tvl_drop

DELETE /v1/rwa/alerts/{id} Delete webhook subscription

Removes a webhook subscription by ID.

Health Supporting

Service health and operational status.

GET /v1/rwa/health Service health check

Response Fields

statusstringoperational / degraded / down
servicestringService identifier
versionstringAPI version
protocols_trackedintTotal protocols in registry
endpoints[]arrayAll available endpoint paths
signingobjectalgorithm (ES256K), jwks_url
data_sourcesobjectTVL source, benchmark, signing method

Common Response Structure

All endpoints share a consistent envelope with evidence and metadata.

* Response Envelope

Standard Fields

meta.generated_atstringISO 8601 generation timestamp
meta.schema_versionstringResponse schema version (currently rwa-1.0.0)
meta.scoring_model_versionstringScoring model version (risk endpoints only)
meta.normalization_versionstringData normalization version
evidence.manifest_idstringUnique evidence pack identifier (e.g. RWA-2D062586)
evidence.payload_hashobject.alg (SHA-256) + .hex (hash value)
evidence.signatureobject.alg (ES256K) + .hex (ECDSA signature)
evidence.verificationobject.jwks_url, .kid (key identifier)
freshness.data_age_secondsintSeconds since last data refresh
freshness.is_cachedbooleanWhether response served from cache

Error Response

codestringError code (NOT_FOUND, INVALID_REQUEST, RATE_LIMITED, etc.)
messagestringHuman-readable error description
detailsobjectAdditional context (hint, valid_values, etc.)

HTTP Status Codes

CodeMeaning
200Success
400Invalid request parameters
401Missing or invalid API key
404Protocol slug not found
429Rate limit exceeded
500Internal server error
503Data temporarily unavailable for this protocol
Data infrastructure only. FeedOracle provides risk data and verifiable evidence artifacts. Not financial advice, not certification of any kind, not investment recommendation. Users are responsible for their own compliance decisions. Methodology →