Skip to main content
GET
/
v1
/
assets
/
{symbol}
/
state
Get an asset's current peg state
curl --request GET \
  --url https://api.pegana.xyz/v1/assets/{symbol}/state
{
  "asset": "<string>",
  "discount": "<string>",
  "intrinsic_usd": "<string>",
  "market_usd": "<string>",
  "since": "2023-11-07T05:31:56Z",
  "stale": true,
  "updated_at": "2023-11-07T05:31:56Z"
}

Path Parameters

symbol
string
required

Asset symbol — case-insensitive; resolved to canonical casing

Response

Current state + transition timestamp

asset
string
required
discount
string
required
intrinsic_usd
string
required
market_usd
string
required
since
string<date-time>
required

Timestamp of the most recent transition into the current state. Equals the current snapshot timestamp if the engine has only ever observed one state for this asset.

stale
boolean
required

true when updated_at is older than the 15-minute freshness bound the list/detail endpoints enforce — i.e. the feed has likely frozen. Unlike list/detail, /state still returns the last value rather than 404-hiding it; read this flag to fail safe. Consumers needing a tighter bound can derive their own from updated_at.

state
enum<string>
required

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.

Available options:
PEGGED,
DRIFT,
DEPEG,
CRITICAL,
BLACK_SWAN,
UNKNOWN
updated_at
string<date-time>
required

Timestamp the current snapshot was computed (the latest discount_snapshots.ts). Distinct from since (state-transition time): this is the FRESHNESS signal. The engine stops writing snapshots when a feed goes stale ("missing data is not confirming data" — H8), so a frozen updated_at is exactly how a stale/frozen feed surfaces on this endpoint.