Get an asset by mint address
Path Parameters
SPL mint address (base58) — the canonical on-chain identifier. Resolves to the same card as /v1/assets/{symbol}.
Response
Latest snapshot for the asset
Peg anchor — how to interpret the asset's fair value without knowing Pegana's internal taxonomy.
"USD"— fixed $1 target (fiat-backed, RWA, delta-neutral, CDP stablecoins). A discount from $1 IS the risk signal."FX"— fixed non-USD fiat exchange-rate peg (e.g. EURC→EUR, BRZ→BRL). Readpeg_targetfor the specific currency. A discount from the FX rate IS the risk signal."NAV"— intrinsic redemption / net-asset value, NOT a fixed fiat rate (LSTs, yield-bearing stables, synthetic leverage). NAV itself moves; the discount is relative to it.
Derived from class, NOT from peg_target. A yield-bearing stable can
have peg_target = "USD" yet anchor = "NAV" because its fair value
legitimately accrues above $1 over time.
USD, FX, NAV Consumer-facing calibration label, provisional | calibrated — the
self-describing form of monitoring_only (provisional ⇔
monitoring_only=true), in the SAME vocabulary the dispatcher emits on
the webhook canonical event. Always present.
provisional, calibrated True when the asset is actively monitored but excluded from the
calibrated launch denominator. This is a calibration-status flag, not a
health state: an asset can be PEGGED and monitoring_only=true.
Which direction of discount is the risk signal, so a consumer reading
the raw signed number knows how to interpret it. Derived from anchor:
"below" for USD/FX anchors (a discount from peg is the risk),
"either" for NAV anchors (premium and discount are both meaningful).
below, either Circulating supply of the mint (rust_decimal, serialized as a JSON
string), scaled by decimals. This is a SIZE/CONTEXT signal — NOT a
peg-safety signal — and is NEVER an input to discount/state/
thresholds. Sourced from the on-chain SPL Mint account's supply
field by the isolated token_supply indexer task on a slow (~10 min)
cadence (migration 0065). No freshness bound is enforced on this
field the way updated_at is for discount — supply changes slowly
by nature. null until the mint has been observed at least once —
serialized as null (like discount), not omitted.
Pyth oracle confidence bucket: high | medium | low | unknown.
Scopes the PRICE-ORACLE confidence interval only (conf/price ratio), NOT
market-quote / route-depth reliability. Omitted when no discount snapshot
exists yet. Reflects the LATEST snapshot — an omitted value means "no
current signal" and MUST NOT be rendered as a positive bucket; the client
gates on updated_at freshness before showing it (hardening H1/H9).
high, medium, low, unknown Seconds the asset has resided in its CURRENT committed FSM band (engine
band_since). Omitted until the engine has stamped it. Read with state;
sustained is the thresholded view (Spec 03).
Peg-jitter scalar over the trailing 24h (BSRV-03): peak-to-trough
dispersion of the discount, max(max_discount) - min(min_discount),
in the same signed-fraction units as discount. A cheap stability
measure (always >= 0) computed server-side once per scan instead of
every client recomputing it from the averaged series_24h. Trailing
24h, independent of the current-snapshot freshness bound. Omitted when
no discount_1m rows exist in the window.
Market capitalization in USD = circulating_supply × market_usd — a
SIZE/CONTEXT signal for gauging relative scale across assets, NOT a
peg-safety signal and NEVER an input to discount/state/thresholds.
None whenever either factor is missing (no circulating_supply
observed yet, or no fresh market_usd snapshot). Serialized as null
(like discount), not omitted.
Human-readable reason for monitoring_only=true. Omitted for fully
calibrated assets.
YYYY-MM-DD date when the asset entered monitoring-only status. Omitted for fully calibrated assets.
Advisory, API-synthesized, OUT-OF-HASH "amber" annotation from the
independent Pyth oracle leg — sits BELOW the hard Pyth-confidence gate
(500bps -> UNKNOWN). Computed purely from data already on this row
(see oracle_degraded.rs); NEVER a receipt input and NEVER touches
discount/state/thresholds. Only ever populated on the
single-asset detail endpoints (/v1/assets/{symbol} + by-mint) — the
/v1/assets list has no oracle asof-join, so this is always omitted
there. Omitted (not null) whenever the asset carries no subscribed
oracle feed, the tick is already hard-gated to UNKNOWN, or nothing
amber fired.
Derived 0-100 peg-risk score — a single sortable/thresholdable number for
integrators, ALONGSIDE (never replacing) state. Anchored to the committed
state so it never disagrees with the classification (PEGGED ≤ 24, DRIFT
25-49, DEPEG 50-74, CRITICAL 75-94, BLACK_SWAN 95-100), interpolated within
the band by the effective discount magnitude. null when state is
UNKNOWN/absent, no discount exists, or thresholds are the CDP CR-form —
we never fabricate a score (ADR-0019). Deterministic + reproducible from
the other published fields; NOT part of any receipt hash. See
crates/api-rs/src/risk_score.rs.
x >= 0Stake-pool SOL per share for Sanctum LSTs (rust_decimal, serialized as
a JSON string). Omitted for non-LST assets. Reflects the LATEST intrinsic
snapshot — read together with updated_at for freshness. NAV decomposition
is intrinsic_usd = sol_per_lst × SOL/USD.
Class-aware peg state. Mirrors the engine PegState enum and the
peg_state Postgres enum. Used for state, from_state, and to_state
fields across the API.
The state is CLASS-AWARE: an LST reading a −1.4% discount (normal unstaking
spread) is PEGGED, while a fiat stable at far less would be DRIFT. Trust
this value directly rather than imposing a naive discount cut.
PEGGED, DRIFT, DEPEG, CRITICAL, BLACK_SWAN, UNKNOWN Advisory machine-readable reason for the snapshot's state. Explanatory only — never a verdict input and not part of any receipt hash.
Emitted today:
premium_sanity— engine NAV-sanity override: smoothed discount exceeded the premium-sanity bound, state forced to UNKNOWN (intrinsic anchor suspect).stale_source— API layer: feed is >15 min stale, state collapsed to UNKNOWN; no fresh discount snapshot exists.
Reserved — not yet emitted (planned for depth-gate / oracle-crosscheck
work): no_oracle_crosscheck | intrinsic_unavailable | shallow_market | nominal.
Omitted when null (most rows).
True when the asset has held a committed ALERTING band (DRIFT+) long enough
to be a sustained episode (a slow mechanism depeg, not a blip). A
PEGGED/UNKNOWN asset is never sustained. Omitted until computed.
Per-asset alert thresholds, served verbatim from assets.thresholds
JSONB (BSRV-01). Two shapes pass through unchanged: bps-keyed
{"drift_bps","depeg_bps","critical_bps"} for most assets, and the
CDP collateral-ratio form {"cr_drift","cr_depeg","cr_critical", "cr_black_swan"} for hyUSD. This is the AUTHORITATIVE source the
client should key band-gauge / chart threshold lines / "closest to
breaking" sort off — replacing any hand-maintained client table. The
column is re-synced to the engine's calibrated assets.toml values by
migration 0042_resync_asset_thresholds. Omitted only if the column
is NULL (never, given the NOT NULL constraint) or fails to decode.
Worst (largest-magnitude) absolute discount observed over the trailing
24h (BSRV-02), in the same signed-fraction units as discount
(e.g. 0.0123 = 123 bps). Computed as
max(greatest(abs(min_discount), abs(max_discount))) over the
discount_1m aggregate — discount is signed, so the abs is required to
catch the worst tick in EITHER direction. Trailing 24h, INDEPENDENT of
the current-snapshot 15-min freshness bound on discount. Omitted when
no discount_1m rows exist in the window.