Skip to main content
GET
/
v1
/
assets
/
{symbol}
cURL
curl --request GET \
  --url https://api.pegana.xyz/v1/assets/{symbol}
{
  "class": "<string>",
  "decimals": 123,
  "mint": "<string>",
  "name": "<string>",
  "peg_target": "<string>",
  "symbol": "<string>",
  "confidence": "<string>",
  "discount": "<string>",
  "intrinsic_usd": "<string>",
  "jitter_bps_24h": "<string>",
  "market_usd": "<string>",
  "series_24h": [
    123
  ],
  "sol_per_lst": "<string>",
  "state": "<string>",
  "thresholds": "<unknown>",
  "updated_at": "2023-11-07T05:31:56Z",
  "worst_abs_24h": "<string>"
}

Path Parameters

symbol
string
required

Asset symbol — case-sensitive (e.g. jitoSOL, USDC, hyUSD)

Response

Latest snapshot for the asset

class
string
required
decimals
integer<int32>
required
mint
string
required
name
string
required
peg_target
string
required
symbol
string
required
confidence
string | null

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).

discount
string | null
intrinsic_usd
string | null
jitter_bps_24h
string | null

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_usd
string | null
series_24h
number<double>[] | null
sol_per_lst
string | null

Stake-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.

state
string | null
thresholds
any

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.

updated_at
string<date-time> | null
worst_abs_24h
string | null

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.