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",
  "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.
metadataUriRaw on-chain metadata URI (off-chain JSON), if any.
isToken2022true when the mint is owned by the Token-2022 program.
sourcemetaplex | registry | mint — where name/symbol came from.

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 (not a token mint / does not exist). 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.