Skip to content

Token Metadata

Resolve full metadata for any mint — not just the curated catalog — so you don't replicate the RPC + Metaplex PDA + SPL-mint decode yourself.

Note: this is the plural /v1/tokens/:mint (collection item). It is distinct from the singular GET /v1/token/:mint, which returns the tracked-token "token page" (price, pools, venues).

GET /v1/tokens/:mint

Resolve metadata for one mint.

Path parameters:

  • mint — the SPL mint address (base58).

Query parameters:

  • logo — (optional, default true) a boolean toggle: set logo=false to skip the off-chain image fetch for lower latency. Note the distinction from the response — the resolved image URL comes back in the logoURI field (not logo). The metadataUri is always returned so you can resolve the image yourself if you prefer.

Response:

json
{
  "mint": "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm",
  "name": "Wrapped SOL",
  "symbol": "WSOL",
  "decimals": 9,
  "logoURI": "https://.../logo.png",
  "logoProxyURI": "https://api.venum.dev/v1/tokens/EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm/logo",
  "description": "Wrapped SOL.",
  "priceUsd": 80.31,
  "priceSource": "venum-pools",
  "priceRoute": "direct",
  "liquidityUsd": 48210.5,
  "metadataUri": "https://.../metadata.json",
  "isToken2022": false,
  "source": "metaplex"
}
FieldNotes
decimalsFrom the on-chain SPL mint account (authoritative).
name / symbolMetaplex Token Metadata, falling back to the curated registry symbol.
logoURIThe token icon, resolved from on-chain metadata, falling back to Jupiter's token registry when a token has no usable on-chain image (legacy majors like USDT/USDC carry an empty on-chain uri). null when logo=false or none anywhere.
logoProxyURIA Venum-hosted copy of the icon (GET /v1/tokens/:mint/logo, see below) — stable, CORS-open, non-redirecting. Prefer this for fetch() in a service worker or anywhere a source redirect / 403 / CORS would bite. null when there's no logo to proxy.
descriptionThe off-chain metadata description, resolved inline from the same fetch as the logo (no second hop to metadataUri). null when logo=false or none.
priceUsdCurrent USD price computed from our own indexed pools (same engine as /v1/prices), for any mint we index a USD route for — not just the catalog. Resolved fresh per request (not part of the ~1h metadata cache). null when we index no USD route.
priceSource"venum-pools" when a price was resolved, else null. Explicit so you never mistake a stale/absent price for a real one.
priceRouteHow the price was derived: "direct" (USDC/USDT pool) or "<mint>/<intermediate> × <intermediate>/USDC". null when unpriced.
liquidityUsdUSD (USDC/USDT/SOL-side) capital actually held on-chain in the token's deepest USD-paired pool, verified against the pool vault's real balance — pool-claimed depth is never trusted, so it can't be faked by a dust-traded price. Same signal token search ranks by — the legitimacy discriminator for same-symbol impersonators. null when unmeasurable.
metadataUriRaw on-chain metadata URI (off-chain JSON), if any.
isToken2022true when the mint is owned by the Token-2022 program.
updateAuthorityThe metadata update authority — the strongest on-chain issuer anchor. For tokenized equities this is the issuer's key; match it against issuer keys you trust. We expose the raw key and make no verification claim. null when absent.
mintAuthoritySPL mint authority. null = renounced (supply is fixed). A live mint authority can inflate supply — raw signal for client risk heuristics.
freezeAuthoritySPL freeze authority. null = renounced. A live freeze authority can freeze holder accounts — a honeypot tell on tokens claiming to be freely tradable.
sourcemetaplex | token-2022 | registry | mint — where name/symbol came from. token-2022 = the mint account's embedded TokenMetadata extension (common for tokenized equities).

For batch pricing across many mints in one request, use /v1/prices?tokens=<mint>,<mint>,….

Errors: 400 INVALID_REQUEST (malformed mint), 404 TOKEN_NOT_FOUND (definitively not a token mint / does not exist — safe to treat as terminal), 503 SERVICE_UNAVAILABLE + Retry-After (transient upstream failure — the mint may exist; retry, don't drop). A 404 is never returned for transient conditions, and when we've resolved a mint before, we serve last-known-good metadata through upstream failures instead of erroring. See Error Handling.

Example:

bash
curl -H "x-api-key: $VENUM_API_KEY" \
  https://api.venum.dev/v1/tokens/EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm

The logo proxy — serves the token's icon bytes from Venum's origin. Venum resolves the icon (on-chain + Jupiter fallback), fetches it server-side, and re-serves it CORS-open, cacheable, and non-redirecting. This is the logoProxyURI from the responses above.

Use it wherever hotlinking the raw logoURI is fragile — a service worker doing fetch(), or a source that redirects / 403s non-browser clients / disappears. For a plain <img src> either URL works.

  • Returns the image with Content-Type: image/*, Access-Control-Allow-Origin: *, and a long Cache-Control (icons are effectively immutable).
  • 404 TOKEN_NOT_FOUND when the mint has no resolvable logo.
  • No auth required (anonymous-cacheable), so it drops straight into <img>.
html
<img src="https://api.venum.dev/v1/tokens/EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm/logo" />

Results are cached server-side (~1h) and edge-cacheable, so repeated lookups are fast. The logo image is resolved through an SSRF-guarded fetch.