Asset by ID
Endpoints under /assets/:assetId for variants, markets, OHLCV, and more.
All endpoints on this page are Platform API endpoints.
Asset (canonical or singleton): GET /v1/assets/:assetId
Fetch an asset and, optionally, attach additional “include” blocks in one request.
-
assetIdmay be a canonical slug (for example:solana,usd,tesla), an alias, a raw Solana mint, or a deterministic singleton ref of the formsolana-<mint>. -
Known mint refs return the canonical asset group. For example,
/v1/assets/solana-EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1vreturnsasset.assetId: "usd". -
Unknown mints still return singleton assets with IDs of the form
solana-<mint>. -
Auth:
x-api-key -
Scope:
assets:read
Query params
include(optional): comma-separated list of:profileriskohlcvmarkets
mint(optional): pick a specific variant mint for include computations; must be a variant of this asset.variantsMode(optional): set toallto disable server-side capping of large variant sets.primaryVariantStrategy(optional):liquidity(default),execution_quality, orstock_redeemability.
When using includes, additional params apply:
ohlcv params
ohlcvInterval(default1H): one of1m,5m,15m,1H,4H,1D,1WohlcvFrom/ohlcvTo(unix seconds): default to last 7 days
markets params
marketsOffset(default0)marketsLimit(default10, clamped to1–50)
Notes
- Includes are best-effort and returned as
{ ok: true, data }or{ ok: false, reason, message }per include key. - When the path is a known mint ref and
mintis not provided as a query param, that path mint is used for variant include computations. For mapped public equities, the detailinclude=ohlcvblock still uses canonical stock-market candles unless you passmintexplicitly. - Responses can include top-level
resolutionmetadata when the request path was resolved from an alias or mint ref. - This endpoint may trigger background cache warming if data is missing/stale.
asset.imageUrlis curated canonical imagery (storage-backed where configured).asset.primaryVariant.market.logoURIis a best-effort per-token icon from indexed/cache sources and may benull(the server may fall back toasset.imageUrlwhen missing).asset.primaryVariantis chosen deterministically from the asset’s spot-like variants (native,wrapped,bridged,stablecoin,lst,tokenized_equity,basket) by highest liquidity, then trust tier, then 24h volume, then curated mint rank unless an opt-in primary strategy applies. Variants flaggedcompromisedorblockedare skipped by every strategy (see Advisories).asset.primaryVariant.advisoryand every variant object underasset.variantGroups.*[]carryadvisory: { status, reason, url, since } | null. The key is always present;nullmeans the mint is not flagged.asset.advisoriesis always present: an array of{ mint, variantId, status, reason, url, since }for every flagged variant of the asset ([]when none). It includes variants that list surfaces hide, so a page can show a “sibling flagged” notice even when the primary variant is fine.primaryVariantStrategy=stock_redeemabilityapplies to equities and tokenized equities. It favorsshare_redeemableovercash_redeemableovernot_redeemableor missing stock tiers when the higher-tier variant has zero/unknown liquidity on both sides or is within5xof the more liquid variant.asset.primaryVariant.stockVariantTierandasset.variantGroups.tokenizedEquity[].stockVariantTiermay be present withshare_redeemable,cash_redeemable, ornot_redeemable. This is informational API metadata, not legal, tax, accounting, or investment advice.- Variant market blocks may include
source,metricsSource,volume1hUSD,trade1h,trade24h,uniqueWallet1h,uniqueWallet24h,lastTradeAt, andasOfwhen those fields are available in the Convex cache.metricsSource="clickhouse_trades"means market metrics were materialized from successful direct USD-stable Solana trades. Public API routes still read these fields from Convex/cache only. - When present,
asset.stats.liquidity,asset.stats.volume24hUSD, andasset.stats.volume30dUSDare canonical on-chain aggregates across variants.volume30dUSDis a nullable rolling 30-day USD volume sum from cached daily candles, so clients do not need to sum candles themselves when it is populated. For mapped public equities,asset.stats.price,asset.stats.volume24hUSD, andasset.stats.priceChange24hPercentcome from canonical stock-market data; otherwise price fields come from the primary variant or external canonical provider. asset.canonicalMarket.sourcecan becoingecko,clickhouse_stock, orprestocks.clickhouse_stockis used for mapped public equities.prestocksis used for tokenized pre-IPO equities backed by PreStocks reference data (e.g. Anduril, OpenAI, Anthropic); consumers with exhaustiveswitch(source)handling should add a default branch. Passingmintkeeps variant-specific include computations, includinginclude=ohlcv, on the on-chain mint.- For
canonicalMarket.source="prestocks",marketCapis the implied company valuation (PreStocks reference valuation × token price ÷ reference mark price), not the tokenized float value — mirroring howclickhouse_stockreports the underlying company's market cap. The arm also carriesmarkPriceUsd,markValuationUsd,impliedValuationUsd,premiumToMarkPercent(token premium/discount vs the PreStocks mark), andmint. PreStocks provides no data timestamp, soasOf/providerLastUpdatedAtmirror our fetch time; the block is omitted when the reference feed is stale (>24h). - Variant objects whose mint is a PreStocks token (including
spacex/openaiPreStocks variants) may carry apreStocksblock:{ symbol, markPriceUsd, markValuationUsd, impliedValuationUsd, premiumToMarkPercent, lastFetchedAt }, derived from that variant's own on-chain price. - For
assetId=solana, yield variants can be very large; the server may cap the returned yield variant set by default to keep responses fast. UsevariantsMode=allto request the full set.
Example
curl -sS "$API_BASE_URL/v1/assets/$ASSET_ID?include=profile,risk,ohlcv,markets" \
-H "x-api-key: $API_KEY"{
"asset": {
"assetId": "usd"
},
"resolution": {
"ref": "solana-EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"resolvedBy": "singletonMint",
"assetId": "usd",
"mint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"
}
}Advisories
An advisory is an operator-set flag on a variant mint (never on the canonical asset) for situations such as an issuer exploit, a depegged wrapper, or a contract the issuer has told holders not to interact with. It is stored server-side and takes effect across the API without a deploy, so integrators should read it from the payload they already fetch rather than maintain their own denylist.
type AdvisoryStatus = 'caution' | 'compromised' | 'blocked';
// On every variant object: asset.primaryVariant, asset.variantGroups.*[],
// and rows from /variants and /variant-markets.
type VariantAdvisory = {
status: AdvisoryStatus;
reason: string; // operator-written, safe to show verbatim
url: string | null; // issuer statement or other source, when available
since: number; // unix ms the current status was set
} | null;
// asset.advisories[] — one entry per flagged variant, [] when none.
interface AssetAdvisoryEntry {
mint: string;
variantId: string;
status: AdvisoryStatus;
reason: string;
url: string | null;
since: number;
}Statuses
caution— informational. The variant is served and ranked normally; showreasonas a notice.compromised— the variant stays visible everywhere it would normally appear, but it is excluded from primary-variant selection (another spot-like variant becomesprimaryVariantwhen one exists) and from/v1/assets/trending. Execution endpoints refuse the mint. Clients should refuse to trade it.blocked— everythingcompromiseddoes, and additionally the variant is omitted from/v1/assets/search,/v1/assets/curated,/v1/assets/trending, and v2 list hydration. Direct lookups still work (below).
Guarantees
- This endpoint never 404s a flagged mint.
GET /v1/assets/:assetId,GET /v1/assets/:assetId?mint=<flagged>,GET /v1/assets/solana-<flagged>, and/variantskeep returningblockedandcompromisedvariants withadvisorypopulated, so a shared link to the token still lands on the warning rather than on “not found”. Hard removals use a different mechanism (inactive variants and deletion tombstones) and are the only things that 404. - A
compromisedorblockedvariant is never chosen asprimaryVariantwhile another eligible variant exists. When every variant of an asset is flagged, the API falls back to the normal ranking instead of returningnull, andprimaryVariant.advisorytells you why you should not use it. asset.advisoriesreflects the full asset, including variants a list surface hid;advisoryon each variant object reflects only that mint.- Advisory changes propagate to this endpoint within roughly a minute (server-side cache plus HTTP
max-age);/curatedand/trendingare similar or faster.
Guidance
Treat compromised and blocked as do-not-trade: disable buy/sell/swap actions for that mint, surface reason, and link to url when present. caution is display-only. Do not branch on reason text; branch on status and add a default arm so a future status degrades to a warning rather than to silence.
Variants: GET /v1/assets/:assetId/variants
List variants for an asset (canonical or singleton), optionally filtered.
- Auth:
x-api-key - Scope:
assets:read
Query params
kind(optional): one ofnative,wrapped,bridged,etf,yield,leveraged,basket,lst,stablecoin,tokenized_equity
liquidityTier(optional): one oftier1,tier2,tier3trustTier(optional, deprecated alias): one oftier1,tier2,tier3stockVariantTier(optional): one ofshare_redeemable,cash_redeemable,not_redeemablesortBy(optional):liquidity(default),execution_quality, orstock_redeemabilitymint(optional): ensure a specific variant mint is included in the response (even if server-side capping is active).variantsMode(optional): set toallto disable server-side capping of large variant sets.
Notes
- Each returned variant includes a
marketsnapshot when available; the server may derive a fallback market snapshot from cached DEX markets. - Stock-token variants include
stockVariantTierwhen present. sortBy=stock_redeemabilitysortsshare_redeemablefirst, thencash_redeemable, thennot_redeemableor missing tiers, with liquidity fallbacks inside each tier.trustTieris currently mirrored fromliquidityTierfor backward compatibility.- Legacy
trustTier=experimentalis still accepted and treated astier3. - Every row carries
advisory(nullwhen the mint is not flagged). Flagged variants, includingblocked, are not filtered out here — this is a direct lookup, so the warning must be reachable. See Advisories. - For
assetId=solana, yield variants can be very large; the server may cap the returned yield variant set by default. UsevariantsMode=allto request the full set.
Example
curl -sS "$API_BASE_URL/v1/assets/$ASSET_ID/variants?liquidityTier=tier1" \
-H "x-api-key: $API_KEY"curl -sS "$API_BASE_URL/v1/assets/spacex/variants?stockVariantTier=share_redeemable&sortBy=stock_redeemability" \
-H "x-api-key: $API_KEY"Variant top markets (canonical): GET /v1/assets/:assetId/variant-top-markets
Return the top DEX market for each variant of an asset (best-effort; some variants may have no cached market yet).
- Auth:
x-api-key - Scope:
assets:read
Query params
offset(default0)limit(default10, clamped to1–100)variantsMode(optional): set toallto disable server-side capping of large variant sets.
Notes
- Results are sorted by market liquidity (descending).
- For
assetId=solana, the server may cap the yield variant set by default. UsevariantsMode=allto request the full set.
Variant market (single): GET /v1/assets/:assetId/variant-market
Fetch the cached “variant market” snapshot for a single mint of the asset.
- Auth:
x-api-key - Scope:
assets:read
Query params
mint(optional): defaults to the asset’s primary variant mint
Example
curl -sS "$API_BASE_URL/v1/assets/$ASSET_ID/variant-market" \
-H "x-api-key: $API_KEY"Markets: GET /v1/assets/:assetId/markets
List cached DEX markets for a mint of the asset.
- Auth:
x-api-key - Scope:
assets:read
Query params
mint(optional): defaults to the asset’s primary variant mintoffset(default0)limit(default10, clamped to1–50)
Notes
- Response includes
protocolTokensByMarketfor certain pools to help identify protocol-owned tokens. - This endpoint may trigger background cache warming when markets are missing/stale.
OHLCV (by mint): GET /v1/assets/:assetId/ohlcv
Return OHLCV candles for a specific mint (variant).
- Auth:
x-api-key - Scope:
assets:read
Query params
mint(optional): defaults to primary variant mintinterval(default1H): one of1m,5m,15m,1H,4H,1D,1Wfrom/to(unix seconds): default to last 7 days
Notes
- When stale/missing, the server may trigger cache warming.
- Candles are served from Convex/cache only. When
source="clickhouse_trades"exists on cached candles internally, the candle was materialized from successful direct USD-stable Solana trades. - Cached ClickHouse-derived candles can also carry a per-candle
tradeCountinternally. The public OHLCV response remains backward compatible with the existing OHLCV fields.
Price chart (canonical): GET /v1/assets/:assetId/price-chart
Return canonical price candles.
- Auth:
x-api-key - Scope:
assets:read
Behavior
- If the asset has an external listing ID, this endpoint serves external provider candles (and may warm cache).
- For mapped public equities, this endpoint serves canonical ClickHouse stock candles first.
- Otherwise it falls back to mint-based OHLCV using the primary variant (or
mintquery param).
Profile: GET /v1/assets/:assetId/profile
Return cached external profile/market stats when the asset has an external listing ID.
- Auth:
x-api-key - Scope:
assets:read
Notes
- If no external listing ID is available, response includes
profile: { ok: false, reason: "not_available" }. - When stale/missing, the server may trigger background cache warming.
Tickers: GET /v1/assets/:assetId/tickers
Return cached exchange tickers for the canonical asset (when it has an external listing ID).
- Auth:
x-api-key - Scope:
assets:read
Query params
offset(default0)limit(default10, clamped to1–50)order(optional): accepted values includevolume_descetc; currently served from cached order.
Risk summary/details: GET /v1/assets/:assetId/risk-summary and /risk-details
Return a market-based score derived from cached market snapshots.
- Auth:
x-api-key - Scope:
assets:read
Query params
mint(optional): defaults to primary variant mint
Notes
risk-detailsincludes more inputs in the response (for debugging/scoring transparency).
Description: GET /v1/assets/:assetId/description
Return a cached per-mint description summary when available.
- Auth:
x-api-key - Scope:
assets:read
Query params
mint(optional): defaults to primary variant mint