API v1Endpoints

Assets (collection)

Search, curated lists, mint resolution, snapshots, and aggregate risk.

All endpoints on this page are Platform API endpoints unless noted otherwise.

GET /v1/assets/search

Search assets by text query (canonical assets plus singleton Solana tokens when available).

  • Auth: x-api-key
  • Scope: assets:read

Query params

  • q (required): search string
  • limit (optional): integer (1–50), default 20
  • category (optional): must be one of the supported asset categories

Response

interface AssetsSearchResponse {
  query: string;
  category: string | null;
  results: Array<{
    assetId: string;
    name?: string;
    symbol?: string;
    category: string;
    imageUrl: string | null;
    stats: null | {
      price: number | null;
      liquidity: number | null;
      volume24hUSD: number | null;
      marketCap: number | null;
      priceChange24hPercent: number | null;
      priceChange1hPercent: number | null;
    };
    primaryVariant: null | {
      variantId: string;
      mint: string;
      kind: string;
      liquidityTier: string;
      trustTier: string;
      tags: string[];
      issuer?: string;
      issuerUrl?: string;
      label?: string;
      symbol?: string;
      name?: string;
      market: null | {
        price: number | null;
        liquidity: number | null;
        volume24hUSD: number | null;
        marketCap: number | null;
        priceChange24hPercent: number | null;
        priceChange1hPercent: number | null;
        decimals: number | null;
        logoURI: string | null;
        lastFetchedAt: number | null;
      };
    };
  }>;
}

Notes

  • stats.liquidity and stats.volume24hUSD are canonical aggregates across the asset’s spot-like variants (native, wrapped, bridged, stablecoin, lst, tokenized_equity, basket). If an asset has no spot-like variants, the API falls back to aggregating across all variants.
  • primaryVariant is chosen deterministically from the asset’s spot-like variants by highest liquidity, then trust tier, then 24h volume, then curated mint rank.
  • stats.price, stats.marketCap, and price change fields come from the asset’s primary variant.
  • Tokens that are not part of any canonical asset may appear as singleton assets with deterministic IDs of the form solana-<mint> (with a single Solana variant).

Example

curl -sS "$API_BASE_URL/v1/assets/search?q=bitcoin&limit=10" \
  -H "x-api-key: $API_KEY"

GET /v1/assets/resolve

Resolve a Solana mint (or an asset reference) to its canonical assetId + variant details.

  • If the mint is part of a canonical asset, the returned assetId is the canonical slug (for example: usdc, jitosol, apple). Otherwise the API returns a deterministic singleton ID of the form solana-<mint>.

  • Auth: x-api-key

  • Scope: assets:read

Query params

  • mint (optional): Solana mint address (base58)
  • ref (optional): asset reference string (an assetId, alias, mint, or solana-<mint>)

One of mint or ref is required. If both are provided, mint takes precedence.

Response

interface AssetsResolveResponse {
  assetId: string;
  asset: {
    assetId: string;
    name: string | null;
    symbol: string | null;
    category: string;
    aliases: string[];
  };
  variant: {
    mint: string;
    chain: string;
    kind: string;
    liquidityTier: string;
    trustTier: string;
    tags: string[];
    issuer?: string;
    issuerUrl?: string;
    label?: string;
  } | null;
}
{
  "assetId": "solana",
  "asset": {
    "assetId": "solana",
    "name": "Solana",
    "symbol": "SOL",
    "category": "crypto",
    "aliases": []
  },
  "variant": {
    "mint": "So11111111111111111111111111111111111111112",
    "chain": "solana",
    "kind": "native",
    "liquidityTier": "tier3",
    "trustTier": "tier3",
    "tags": []
  }
}

Example

curl -sS "$API_BASE_URL/v1/assets/resolve?ref=$MINT" \
  -H "x-api-key: $API_KEY"
curl -sS "$API_BASE_URL/v1/assets/resolve?ref=usdc" \
  -H "x-api-key: $API_KEY"

GET /v1/assets/curated

Get curated assets from a list.

  • Auth: x-api-key
  • Scope: assets:read

Query params

  • list (optional): curated list id, or all (default all)
  • groupBy (optional): asset (default) or mint

Notes

  • Results are sorted by stats.volume24hUSD descending when available.
  • groupBy=mint expands the response to one row per variant mint.
  • imageUrl is curated canonical imagery (including storage-backed URLs when configured). primaryVariant.market.logoURI is a best-effort per-token icon from indexed/cache sources and may be null (the server may fall back to imageUrl when missing).
  • stats.liquidity and stats.volume24hUSD are canonical aggregates across the asset’s spot-like variants (fallback to all variants if none exist). In groupBy=mint, primaryVariant.market is mint-specific but stats remains canonical for the asset.

Response

interface AssetsCuratedResponse {
  listId: string;
  assets: Array<{
    assetId: string;
    name?: string;
    symbol?: string;
    category: string;
    imageUrl: string | null;
    stats: null | {
      price: number | null;
      liquidity: number | null;
      volume24hUSD: number | null;
      marketCap: number | null;
      priceChange24hPercent: number | null;
      priceChange1hPercent: number | null;
    };
    primaryVariant: null | {
      variantId: string;
      mint: string;
      kind: string;
      liquidityTier: string;
      trustTier: string;
      tags: string[];
      issuer?: string;
      issuerUrl?: string;
      label?: string;
      symbol?: string;
      name?: string;
      market: null | {
        price: number | null;
        liquidity: number | null;
        volume24hUSD: number | null;
        marketCap: number | null;
        priceChange24hPercent: number | null;
        priceChange1hPercent: number | null;
        decimals: number | null;
        logoURI: string | null;
        lastFetchedAt: number | null;
      };
    };
  }>;
}

Notes:

  • If groupBy=mint, assets[] becomes “one row per mint” and primaryVariant is always present for returned rows.

Example

curl -sS "$API_BASE_URL/v1/assets/curated?list=all&groupBy=asset" \
  -H "x-api-key: $API_KEY"

POST /v1/assets/market-snapshots

Batch lookup cached market snapshots for up to 250 mints.

  • Auth: x-api-key
  • Scope: assets:read
  • Body: JSON

Body

Either mints or addresses (both treated the same).

{ "mints": ["So11111111111111111111111111111111111111112"] }

Notes

  • Input is de-duped and capped at 250 addresses.
  • Returns an array (Convex-backed) of token search rows for those addresses.

Response

This endpoint returns an array of token rows. The exact row shape can evolve, but it is safe to treat each entry as “token metadata + market snapshot data” keyed by the requested address.

type AssetsMarketSnapshotsResponse = Array<unknown>;

Example

curl -sS "$API_BASE_URL/v1/assets/market-snapshots" \
  -H "x-api-key: $API_KEY" \
  -H "content-type: application/json" \
  -d '{"mints":["So11111111111111111111111111111111111111112"]}'

GET /v1/assets/variant-markets

Batch lookup per-mint variant market snapshots (best-effort; may be null if not cached).

  • Auth: x-api-key
  • Scope: assets:read

Query params

  • mints or addresses: comma-separated list (max 50)

Response shape (high level)

  • variants[] where each entry contains:
    • mint
    • assetId (when variant is known)
    • chain (when variant is known)
    • market (market snapshot, or null if missing)

Response

interface AssetsVariantMarketsResponse {
  variants: Array<{
    mint: string;
    assetId: string | null;
    chain: string | null;
    market: Record<string, unknown> | null;
  }>;
}
{
  "variants": [
    {
      "mint": "So11111111111111111111111111111111111111112",
      "assetId": "solana",
      "chain": "solana",
      "market": {
        "symbol": "SOL",
        "name": "Solana",
        "decimals": 9,
        "price": 0,
        "liquidity": 0,
        "volume24hUSD": 0,
        "marketCap": 0,
        "priceChange24hPercent": 0,
        "lastFetchedAt": 0
      }
    }
  ]
}

Example

curl -sS "$API_BASE_URL/v1/assets/variant-markets?mints=$MINT1,$MINT2" \
  -H "x-api-key: $API_KEY"

GET /v1/assets/risk-summary

Compute a quick market-based “risk summary” for a mint.

  • Auth: x-api-key
  • Scope: requires either assets:read or assets:risk:read

Query params

  • mint (required) or address (alias): Solana mint

Notes

  • This endpoint requires a cached market snapshot; if missing you’ll get an “Insufficient Data” response.

Response

interface AssetsRiskSummaryResponse {
  score: number;
  grade: string;
  label: string;
  tone: "info" | "success" | "warning" | "danger";
  isTrustedLaunch: boolean;
  caps: Array<unknown>;
  hasInsufficientData: boolean;
  insufficientDataReason?: string;
}
{
  "score": 0,
  "grade": "C",
  "label": "Insufficient Data",
  "tone": "info",
  "isTrustedLaunch": false,
  "caps": [],
  "hasInsufficientData": true,
  "insufficientDataReason": "Market snapshot not available in cache"
}

Example

curl -sS "$API_BASE_URL/v1/assets/risk-summary?mint=$MINT" \
  -H "x-api-key: $API_KEY"

On this page