Obscura

DeFiLlama Stablecoins

Circulating supply of each stablecoin over time, from DeFiLlama.

defillama_stablecoins — the dataset name to pass to the Obscura API.

Category Markets Columns 12 Refresh Daily Entity key symbol Point-in-time available_date

What one row means

One stablecoin's circulating supply as reported by DeFiLlama's live `stablecoins.llama.fi/stablecoins` endpoint at the moment of a given day's scrape — a daily snapshot of one stablecoin's outstanding supply in its peg currency's units (usually USD), not a historical time series pulled from the source (the source itself has no history parameter).

One row per (stablecoin_id, captured_date).

Point-in-time availability

Every Obscura dataset carries available_date: the calendar day the publisher made the row available, day-of, with no session rounding. It is the one column a backtest filters on, and it means the same thing on every dataset in the catalog.

For defillama_stablecoins: snapshot: available_date = captured_date, a STORED GENERATED column (migration 000205). WHY THAT IS THE DAY IT BECAME AVAILABLE: /stablecoins is a live-state API with no historical endpoint at all, so a reading exists only because we asked, and the day we asked is the day it was obtainable — there is no publisher release to be early or late against. EVIDENCE captured_date is the capture day: it is Utc::now().date_naive() on a live run and BronzeObject::captured_day() on a bronze replay. Generated rather than collector-written so that a replay of an old capture cannot restamp it with today's clock.

Refresh cadence

Obscura refreshes defillama_stablecoins daily — the most frequent scheduled job that re-collects or re-exports it. This is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when a row became public is recorded per row in available_date.

Schema — 12 columns

The full public column list for defillama_stablecoins, with the meaning of every field. The same schema is served unauthenticated at https://api.obscura.trade/v1/catalog/defillama_stablecoins.

ColumnTypeDescription
stablecoin_idtext · not nullDeFiLlama's internal numeric-string id for the stablecoin (field `id` in the `peggedAssets` array, e.g. "1" for Tether), stable across days and used as half of the composite primary key. Not an ISO/ticker identifier — it is DeFiLlama's own catalog id and only resolvable via their API.
captured_datedate · not nullUTC calendar day the collector CONTACTED DeFiLlama — `Utc::now().date_naive()` on a live run, the bronze object's own capture day on a replay — forming the other half of the composite primary key. Because the source is a live-state API with no historical endpoint, the day we asked is the day this reading was obtainable, which is why `available_date` is generated directly from this column and there is no separate event date to conform.
nametextStablecoin's display name from DeFiLlama (`name` field in `peggedAssets`, e.g. "Tether", "USD Coin", "Sky Dollar"). Nullable because parse_stablecoins only requires `id`; a coin missing a name field still ingests with name=NULL.
symboltextStablecoin's ticker/symbol as reported by DeFiLlama (e.g. "USDT", "USDC", "USDS") — not validated against any exchange listing, just the source's own symbol field. Nullable, same reason as name.
peg_typetextDeFiLlama's peg-currency classification (e.g. "peggedUSD", "peggedEUR"), from the `pegType` field. Used both as a dimension for filtering by peg currency and as the key into the source's nested `circulating` object to select which currency's circulating figure to store — so a mismatch or missing pegType causes circulating to come back NULL rather than defaulting to USD.
circulatingdouble precisionCurrent circulating supply of the stablecoin, denominated in its peg currency's units (almost always USD given DeFiLlama's dataset skews to USD-pegged coins) at scrape time. Sourced from `peggedAssets[].circulating.<pegType>`, NOT a fixed key — the collector looks up the sub-field matching each coin's own pegType. Nullable if the source omits a circulating figure for that peg type. Rows below `args.min_circulating` (a task arg, default 0) are filtered out entirely before upsert, so this table can silently exclude dust stablecoins depending on task configuration.
gecko_idtextCoinGecko slug for the stablecoin (`gecko_id` field in `peggedAssets`, e.g. "tether"). The only stable *external* identifier DeFiLlama exposes — our `stablecoin_id` is DeFiLlama-private, so this is the canonical join key to any CoinGecko-keyed price/market dataset. Nullable if the source omits it for a coin.
pricedouble precisionThe coin's actual market price (`price` field in `peggedAssets`, e.g. 0.999), still returned even with `includePrices=false` (that flag only trims the nested per-chain price detail). The direct de-peg signal — deviation from 1.0 — which circulating supply alone cannot reveal. Nullable if absent.
peg_mechanismtextBacking-model classification (`pegMechanism` field in `peggedAssets`, e.g. "fiat-backed", "crypto-backed", "algorithmic"). The key stablecoin risk classifier and a recurring category dimension; not derivable from anything else we store. Nullable if absent.
deprecatedbooleanStatus flag marking a delisted/retired stablecoin (`deprecated` field in `peggedAssets`, true on a handful of coins). A lifecycle status a consumer filters on; NULL/false when the source treats the coin as active.
yield_bearingbooleanAttribute flag marking a yield-bearing stablecoin (`yieldBearing` field in `peggedAssets`, true on a handful of coins). A category/attribute dimension distinguishing yield-bearing from plain stablecoins; NULL/false otherwise.
available_datedatePUBLIC-availability date = captured_date. STORED GENERATED column (migration 000205), read-only; the point-in-time column to filter and join on. It is the day the collector polled DeFiLlama, because a live-state API with no historical endpoint makes that the only day this circulating-supply reading could have been obtained.

Access defillama_stablecoins

Two delivery paths, one identifier. Both require an Obscura account and an active subscription; the catalog entry and the schema above are public.

import obscura

client = obscura.Client("obs_live_…")

df = client.query(
    dataset="defillama_stablecoins",
    symbols=["NVDA", "AAPL"],
    start="2024-01-01",
)

Create a free account Browse all 95 datasets

Frequently asked questions

What is in the defillama_stablecoins dataset?

Circulating supply of each stablecoin over time, from DeFiLlama. One stablecoin's circulating supply as reported by DeFiLlama's live `stablecoins.llama.fi/stablecoins` endpoint at the moment of a given day's scrape — a daily snapshot of one stablecoin's outstanding supply in its peg currency's units (usually USD), not a historical time series pulled from the source (the source itself has no history parameter).

How do I avoid look-ahead bias with defillama_stablecoins?

Filter on defillama_stablecoins.available_date, the day the publisher made the row public. For this dataset that date is derived as follows — snapshot: available_date = captured_date, a STORED GENERATED column (migration 000205). WHY THAT IS THE DAY IT BECAME AVAILABLE: /stablecoins is a live-state API with no historical endpoint at all, so a reading exists only because we asked, and the day we asked is the day it was obtainable — there is no publisher release to be early or late against. EVIDENCE captured_date is the capture day: it is Utc::now().date_naive() on a live run and BronzeObject::captured_day() on a bronze replay. Generated rather than collector-written so that a replay of an old capture cannot restamp it with today's clock. A query of the form WHERE available_date <= '<as-of date>' never sees a row before it existed.

In what formats can I get defillama_stablecoins?

As a Parquet bulk export (POST https://api.obscura.trade/v1/download) or as JSON from the typed query API (POST https://api.obscura.trade/v1/query), both with dataset="defillama_stablecoins". The column schema is public at https://api.obscura.trade/v1/catalog/defillama_stablecoins.

Can I filter defillama_stablecoins by company or symbol?

Yes. defillama_stablecoins carries symbol, the column the API's symbols filter resolves against.

How often is defillama_stablecoins updated?

Obscura refreshes defillama_stablecoins on a daily schedule — that is the most frequent scheduled job that re-collects or re-exports the table. It is Obscura's own pipeline cadence, not the upstream publisher's release schedule; when the publisher makes a row available is described by the availability rule above, and is recorded per row in available_date.

Related datasets

Cboe IndicesDaily history of Cboe's volatility indices, including VIX, sourced directly from Cboe. Crypto MarketsPer-coin market data from CoinGecko: price, market cap and volume across thousands of cryptocurrencies. DeFiLlama ProtocolsTotal value locked in each DeFi protocol, tracked by DeFiLlama. DeFiLlama TVLTotal value locked on each blockchain, from DeFiLlama. Flow MetricsTrade-flow metrics per symbol in fixed time windows: taker (aggressor) buy versus sell volume and trade counts, broken o… Forex OrderbookOANDA's order book and position book by currency pair: where retail traders' open orders and positions sit relative to p… Forex PositionsRetail forex positioning by pair (share of traders long versus short), collected from several broker sentiment feeds. Forex Positions AggregateA consensus long/short reading per currency pair, blending the individual broker sentiment feeds.