OCB — Stablecoin Data Dictionary
Every column. Every figure. Every value enum.
The companion to the public bulk exports at /api/data/stablecoin/v1.0/. Every column documented; every enumerated value listed; every nullable column flagged. Free to use with attribution.
How to use these endpoints
All exports are CSV. Always public. Versioned in the URL.
- Base URL
https://onchainbenchmark.com/api/data/stablecoin/v1.0/[figure].csv- Methodology versioning
- The methodology version (
v1.0) is the URL path segment. When v1.1 ships, the v1.0 endpoint stays live forever at its current path. Historical reproducibility is the standards-claim. - Filters (query string)
?instrument=usdc_eth— scope to a single instrument.?since=2026-01-01— ISO date lower bound on the time column.?limit=10000— cap row count (default 100,000; max 1,000,000).
- Headers returned
X-Methodology-Version— methodology under which the rows were produced.X-Row-Count— number of rows in the response body.X-Documentation— link back to this page.Cache-Control: public, max-age=300, stale-while-revalidate=600.
- Citation
- Cite as: OCB Stablecoin Data Export, methodology v1.0, retrieved [date], onchainbenchmark.com/api/data/stablecoin/v1.0/[figure].csv. Attribution requested, not required.
- NULL handling
- NULLs surface as empty CSV cells (consistent with PostgreSQL
COPY). Per OCB's data integrity rule, no value is imputed or fabricated to fill a gap. An empty cell means OCB does not have the data.
Figures index
13 figures across the rating, index, and Stablecoin Activity products.
rating · Daily
Stablecoin Trust Ratings
Latest per-instrument composite score + four dimension scores + band.
| Column | Type | Null | Description |
|---|---|---|---|
| instrument_id | text | no | Stable slug (e.g. usdc_eth, usdt_eth). Matches instrument_registry.id. |
| chain_id | integer | no | Chain ID. EVM chains use their EIP-155 ID (1=Ethereum, 137=Polygon, 8453=Base, 42161=Arbitrum, 43114=Avalanche); non-EVM chains use OCB-internal IDs in the 1100 range (1101=Solana, 1102=Stellar, 1103=Tron). |
| deployment_id | uuid | no | Unique deployment row (per (instrument, chain, contract)) from instrument_deployments. |
| methodology_version | text | no | Always 'v1.0-stablecoin' for this figure. |
| scored_at | timestamptz | no | When this score was computed (UTC). |
| score_total | numeric | no | Composite score in [0, 100]. Sum of the four dimension scores. |
| score_reserve_quality | numeric | yes | Reserve Quality dimension score in [0, 25]. Null when norm_reserves is stale or missing. |
| score_redemption_depth | numeric | yes | Redemption Depth dimension score in [0, 25]. Composite of direct + onchain paths with joint-path bonus. |
| score_holder_concentration | numeric | yes | Holder Concentration dimension score in [0, 25]. Track 1 (retail-facing) for all v1.0 stablecoins. |
| score_transparency | numeric | yes | Transparency dimension score in [0, 25]. 35/30/35 weighted composite, voluntary-attestation cap at 19. |
| score_band | text | no | Band label per methodology §4.5. Values: Healthy · Monitored · Elevated Risk · Flagged |
| git_sha | text | yes | Git SHA of the scoring code that produced this row. Reproducibility provenance. |
index · Daily
Stablecoin Health Index Levels
Supply-weighted health index time series, with Healthy Capital aggregation.
| Column | Type | Null | Description |
|---|---|---|---|
| index_id | text | no | Always 'stablecoin_health'. |
| methodology_version | text | no | methodology_version: 'v1.0-stablecoin' (per-instrument scoring) | 'v1.1-stablecoin' (multi-chain index aggregation). |
| as_of | timestamptz | no | Index observation timestamp (UTC). |
| data_origin | text | no | 'live' for production runs; 'backfill' for historical recomputes; 'calibration' during the 30-day calibration window. |
| raw_index | numeric | no | Supply-weighted average health score in [0, 100]. Σ(score × supply) / Σ(supply). |
| index_level | numeric | no | Inception-rebased level (raw_index normalized to 100 at inception). Pre-inception rows are computed but not authoritative. |
| total_capital_usd | numeric | no | Total covered stablecoin supply in USD across the index population for the day. |
| healthy_capital_usd | numeric | no | USD supply across instruments whose score_total ≥ 80. Column is stored as 'verified_capital_usd' (RWA inheritance); semantics differ by methodology. |
| healthy_ratio | numeric | no | healthy_capital_usd / total_capital_usd, in [0, 1]. |
| constituent_count | integer | no | Number of distinct instruments that contributed to this index level. |
| is_calibrating | boolean | no | True during the 30-day pre-launch calibration window. False once inception is declared. |
rating · Daily (or whenever a new attestation lands)
Reserve Composition (norm_reserves)
Per-observation reserve composition tier + attestation provenance. Reserve Quality input.
| Column | Type | Null | Description |
|---|---|---|---|
| instrument_id | text | no | Stablecoin instrument id. |
| chain_id | integer | no | Chain of the scored deployment. |
| deployment_id | uuid | no | Deployment this observation is anchored to. |
| methodology_version | text | no | Always 'v1.0-stablecoin'. |
| observed_at | timestamptz | no | When OCB observed this attestation state. |
| reserve_composition_tier | text | no | Reserve composition tier per methodology §4.1. Values: cash_tbill_onchain_verifiable · cash_tbill_attested · cash_tbill_mmf · mixed_short_duration · rwa_backed_onchain · mixed_with_commercial_paper · crypto_collateral_buffered · aggregate_only · undercollateralized_or_unverifiable |
| reserve_composition_published_at | timestamptz | yes | Timestamp on the source attestation (the issuer's publication date, not OCB's observation date). |
| reserve_composition_source_kind | text | no | Provenance class of the source attestation per docs/provenance-standard.md. Values: regulated_filing · voluntary_third_party_attestation · issuer_dashboard · onchain_read · self_published_no_attestation · none |
| reserve_composition_source_url | text | yes | URL of the attestation document. Must be publicly accessible per provenance standard. |
| reserve_quality_score | numeric | no | Denormalized tier score in [0, 25]. Scorer recomputes from the tier for reweight optionality. |
rating · Daily
Transparency (norm_transparency_stablecoin)
Three Transparency sub-signals + classifier inputs + voluntary-cap flag.
| Column | Type | Null | Description |
|---|---|---|---|
| instrument_id | text | no | Stablecoin instrument id. |
| chain_id | integer | no | Chain of the scored deployment. |
| deployment_id | uuid | no | Deployment this observation is anchored to. |
| methodology_version | text | no | Always 'v1.0-stablecoin'. |
| observed_at | timestamptz | no | When OCB observed this transparency state. |
| attestation_freshness_score | numeric | no | Sub-signal A: age-of-most-recent-attestation tier in [0, 25] per §4.4. |
| disclosure_consistency_score | numeric | no | Sub-signal B: count-of-attestations-in-180d tier in [0, 25] per §4.4. |
| regulatory_standing_score | numeric | no | Sub-signal C: regulatory framework + auditor tier in [0, 25] per §4.4. |
| attestation_kind | text | no | Whether the supporting attestation is a regulated filing or a voluntary third-party attestation. Values: regulated · voluntary · none |
| voluntary_attestation_cap_applied | boolean | no | True when attestation_kind='voluntary' AND the weighted composite would exceed 19. The composite is then capped at 19. |
| transparency_score | numeric | no | Composite Transparency dimension score in [0, 25]. 35/30/35 weights, voluntary cap applied. |
| source_attestation_url | text | yes | URL of the most recent attestation event used to compute Sub-signal A. |
rating · Daily
Redemption Depth (norm_redemption_stablecoin)
Direct + onchain path scores, supply, and DEX price. Redemption Depth + freshness gate input.
| Column | Type | Null | Description |
|---|---|---|---|
| instrument_id | text | no | Stablecoin instrument id. |
| chain_id | integer | no | Chain of the scored deployment. |
| deployment_id | uuid | no | Deployment this observation is anchored to. |
| methodology_version | text | no | Always 'v1.0-stablecoin'. |
| observed_at | timestamptz | no | When OCB observed this redemption state. |
| direct_path_score | numeric | yes | Direct redemption path score in [0, 22]. Null when direct_redemption_profile='none'. |
| direct_redemption_profile | text | yes | Per-instrument declared profile per §4.2. Values: retail_t0t1_no_freeze · retail_t1t3_targeted_freeze · retail_documented_bulk_freeze · institutional_only_documented · available_opaque_freeze_history · none |
| onchain_path_score | numeric | yes | Onchain DEX-depth path score in [0, 24]. Null when no onchain pool exists with depth > $0. |
| onchain_dex_depth_1pct_usd | numeric | no | Aggregate dollar depth at 1% slippage across configured pools across configured chains. |
| joint_path_bonus_applied | boolean | no | True when both direct and onchain paths exist; composite is then max(direct, onchain) + 3, capped at 25. |
| redemption_depth_score | numeric | no | Composite Redemption Depth dimension score in [0, 25]. |
| outstanding_supply_usd | numeric | no | Total cross-chain-reconciled supply in USD. The supply-weighting input for the Stablecoin Health Index. The freshness gate watches this row. |
| observed_price_usd | numeric | no | Real-time DEX-derived USD price per S1.5-7 of the build plan. Used for all Stablecoin Activity USD valuations and depeg-correct accounting. |
rating · Daily
Holder Concentration (norm_concentration)
Top-10 holder percentage post-exclusion. Shared table with RWA; this export scopes to stablecoin instruments only.
| Column | Type | Null | Description |
|---|---|---|---|
| instrument_id | text | no | Stablecoin instrument id. |
| chain_id | integer | no | Chain of the scored deployment. |
| deployment_id | uuid | no | Deployment this observation is anchored to. |
| methodology_version | text | no | Always 'v1.0-stablecoin'. |
| observed_at | timestamptz | no | When OCB computed this holder distribution. |
| top10_holder_pct | numeric | yes | Top-10 holder share after exclusion of exchange / protocol / treasury / bridge addresses. Null falls back to score=8 per methodology. |
| concentration_track | text | no | Always 'retail_facing' for v1.0 stablecoins per Q4 lock. Values: retail_facing · institutional_direct |
data · Daily (aggregated from hourly norm_transfer_hourly)
Stablecoin Activity — Velocity by Purpose
Daily transfer volume USD segmented by counterparty-pair bucket. Figure 1 of the Stablecoin Activity data product.
Transfer-derived (raw_transfer_events / norm_transfer_hourly). The Alchemy free tier cannot collect transfer data, so this figure is not available at launch. It returns once transfer collection resumes post-upgrade.
| Column | Type | Null | Description |
|---|---|---|---|
| instrument_id | text | no | Stablecoin instrument id. |
| deployment_id | uuid | yes | Null on aggregate-across-chains rows; otherwise the per-deployment slice. |
| methodology_version | text | no | Always 'v1.0-stablecoin-pulse'. |
| day | date | no | UTC day. |
| volume_cex_mediated_usd | numeric | no | USD volume where from or to is a CEX hot/cold wallet. |
| volume_defi_circulating_usd | numeric | no | USD volume where both sides are DeFi (lending pool, DEX router/pool). |
| volume_payments_usd | numeric | no | USD volume where from or to is a payment processor and neither side is CEX or DeFi. |
| volume_bridge_in_out_usd | numeric | no | USD volume where from or to is a bridge contract. |
| volume_issuer_treasury_usd | numeric | no | USD volume where from or to is an issuer treasury address (mints, burns, treasury ops). |
| volume_unlabeled_usd | numeric | no | USD volume where neither side is in address_registry at ≥90% confidence. |
| volume_total_usd | numeric | no | Sum of all six segmented buckets. |
| unlabeled_share_pct | numeric | yes | volume_unlabeled_usd / volume_total_usd × 100. Surfaced as caveat on the figure: if >50%, segmented shares apply to the labeled portion only. |
| transfer_count | integer | no | Total transfer event count for the day. |
data · Daily
Stablecoin Activity — Net Flow + Supply Trajectory
Per-chain daily mint USD, burn USD, net flow, and end-of-day supply. Figure 2 of the Stablecoin Activity data product.
Transfer-derived (mint/burn aggregated directly from raw_transfer_events). The Alchemy free tier cannot collect transfer data, so this figure is not available at launch. It returns once transfer collection resumes post-upgrade.
| Column | Type | Null | Description |
|---|---|---|---|
| instrument_id | text | no | Stablecoin instrument id. |
| chain_id | integer | no | Chain this row covers. |
| deployment_id | uuid | no | Specific deployment (always non-null for this figure). |
| methodology_version | text | no | Always 'v1.0-stablecoin-pulse'. |
| day | date | no | UTC day. |
| daily_mint_usd | numeric | no | USD value of mints (transfers from 0x0 or issuer mint events). |
| daily_burn_usd | numeric | no | USD value of burns (transfers to 0x0 or issuer burn events). |
| daily_net_flow_usd | numeric | no | daily_mint_usd − daily_burn_usd. |
| outstanding_supply_usd | numeric | yes | End-of-day supply × end-of-day DEX price. Excludes bridged_representation deployments per S1.5-6 cross-chain reconciliation. |
data · Daily
Stablecoin Activity — Cross-Chain Composition
Per-chain supply as a percentage of total instrument supply across chains. Figure 3 of the Stablecoin Activity data product.
| Column | Type | Null | Description |
|---|---|---|---|
| instrument_id | text | no | Stablecoin instrument id. |
| chain_id | integer | no | Chain this row covers. |
| deployment_id | uuid | no | Specific deployment. |
| methodology_version | text | no | Always 'v1.0-stablecoin-pulse'. |
| day | date | no | UTC day. |
| chain_supply_usd | numeric | no | Per-chain supply in USD (excluding bridged_representation per S1.5-6). |
| chain_supply_share_pct | numeric | no | chain_supply_usd / total instrument supply across all chains × 100. |
data · Daily (churn metric lags 30 days)
Stablecoin Activity — Holder Churn + Concentration
New addresses, churned addresses, total holders, top-10 share. Figure 4 of the Stablecoin Activity data product.
| Column | Type | Null | Description |
|---|---|---|---|
| instrument_id | text | no | Stablecoin instrument id. |
| chain_id | integer | no | Chain this row covers. |
| deployment_id | uuid | no | Specific deployment. |
| methodology_version | text | no | Always 'v1.0-stablecoin-pulse'. |
| day | date | no | UTC day. |
| new_addresses | integer | no | Distinct to_addresses first-seen as a holder of this specific instrument on this day. |
| churned_addresses | integer | no | Distinct addresses whose last non-zero balance day was today and which then went to zero for ≥30 days. Intentionally lagging. |
| total_holders | integer | no | Distinct addresses with non-zero balance end-of-day, post-exclusion (exchange/protocol/treasury/bridge classes removed). |
| top10_share_post_exclusion | numeric | yes | Top-10 holder share after the same exclusions. Null when all observed holders are excluded. |
data · Daily
Stablecoin Activity — Agentic-Share Leading Indicator
Weighted composite of five proxies for programmatic origination. Figure 5 of the Stablecoin Activity data product — leading indicator, not classifier.
Transfer-derived (sub-signal counters read from norm_transfer_hourly). The Alchemy free tier cannot collect transfer data, so this figure is not available at launch. It returns once transfer collection resumes post-upgrade.
| Column | Type | Null | Description |
|---|---|---|---|
| instrument_id | text | no | Stablecoin instrument id. |
| deployment_id | uuid | yes | Null on aggregate-across-chains rows; otherwise the per-deployment slice. |
| methodology_version | text | no | Always 'v1.0-stablecoin-pulse'. |
| day | date | no | UTC day. |
| sub_dollar_share_pct | numeric | no | Fraction × 100 of daily transfers with value < $1.00 (DEX-priced). |
| sub_second_interval_share_pct | numeric | no | Fraction × 100 of from×to pairs with 2+ transfers in <60s windows. |
| non_round_amount_share_pct | numeric | no | Fraction × 100 of transfers where value × 100 is not an integer (precision beyond cents). |
| off_hours_share_pct | numeric | no | Fraction × 100 of transfers outside 9am–5pm averaged across UTC-8, UTC-5, UTC+0, UTC+8 business windows. |
| contract_counterparty_share_pct | numeric | no | Fraction × 100 of transfers where from_address_kind='contract' OR to_address_kind='contract'. |
| agentic_share_score | numeric | no | Weighted composite in [0, 100]: 0.25*sub_dollar + 0.20*sub_second + 0.15*non_round + 0.15*off_hours + 0.25*contract. |
data · Point-in-time, daily refresh
Coverage Map (Derived view C)
Per (instrument, deployment) view of collector status, classification coverage, last reserve attestation, and last published score.
Its classification_coverage_pct column is derived from pulse_velocity_daily, which is transfer-derived and not available at launch (see pulse-velocity above). Not available at launch; returns once transfer collection resumes post-upgrade.
| Column | Type | Null | Description |
|---|---|---|---|
| instrument_id | text | no | Stablecoin instrument id. |
| chain_id | integer | no | Chain of this deployment. |
| deployment_id | uuid | no | Deployment row. |
| active | boolean | no | True if the deployment is enabled for collectors / normalization / scoring / index. |
| classification_coverage_pct | numeric | yes | 100 − latest unlabeled_share_pct from pulse_velocity_daily. Null when no velocity row exists yet. |
| last_reserve_attestation | timestamptz | yes | Timestamp of the most recent reserve_composition_published_at observed by OCB. |
| last_score_published | timestamptz | yes | scored_at of the most recent trust_scores row under v1.0-stablecoin. |
data · Editorial / event-driven
Events (annotation surface)
Annotated events — depegs, freezes, integrity events, attestation publications, methodology changes. Used as vertical markers on Stablecoin Activity charts.
| Column | Type | Null | Description |
|---|---|---|---|
| id | uuid | no | Stable event row id. |
| instrument_id | text | yes | Instrument the event concerns. Null on market-wide events. |
| deployment_id | uuid | yes | Specific deployment if scoped; null otherwise. |
| event_kind | text | no | Event taxonomy. Values: depeg · freeze · reserve_shift · launch · attestation_published · integrity_event · methodology_change · other |
| occurred_at | timestamptz | no | When the event happened (UTC). |
| ended_at | timestamptz | yes | When the event ended; null on point-in-time events. |
| title | text | no | Headline. |
| summary | text | yes | 1–3 sentence editorial explanation. |
| source_url | text | yes | Primary source link. |
| written_by | text | yes | Author / source attribution. |