OwlViz · API docs

Asset & collection intelligence for Solana.

Base URL: https://api.owlviz.dev

Try example mint , agents, or quick start.

Quick start

**OwlViz** — agent-ready infrastructure for reliable Solana asset and collection intelligence (not trade execution). One API for normalized metadata, health, media reliability, multi-provider collection floors, reference floors, market change events, and change monitoring. Building an autonomous agent? Start with [Agents & automation](./agents.md) and [OpenAPI](https://api.owlviz.dev/openapi.json).

Base URLs

Production API:

text
https://api.owlviz.dev

Public scanner (read-only UI):

text
https://owlviz.dev

Set API_BASE or NEXT_PUBLIC_API_BASE_URL when self-hosting or using a staging host.

Example mint (The Bullpen):

text
C5gHBKXwA8jduXNk3HyAVLnLBN6PEM8fTqkNNh5uyyjJ

Resolve an asset in 2 minutes

Every asset lookup starts with a Solana mint address (base58 public key). Responses are JSON with a top-level data object. Many fields are nullable when metadata is missing or unresolved.

curl

bash
curl -sS \
  "https://api.owlviz.dev/v1/assets/C5gHBKXwA8jduXNk3HyAVLnLBN6PEM8fTqkNNh5uyyjJ" \
  -H "Accept: application/json"

TypeScript / JavaScript

ts
const API_BASE = 'https://api.owlviz.dev';
const mint = 'C5gHBKXwA8jduXNk3HyAVLnLBN6PEM8fTqkNNh5uyyjJ';

const response = await fetch(`${API_BASE}/v1/assets/${mint}`, {
  headers: { Accept: 'application/json' },
});

if (!response.ok) {
  const body = (await response.json()) as { error?: { code?: string; message?: string } };
  throw new Error(body.error?.message ?? `HTTP ${response.status}`);
}

const { data } = (await response.json()) as { data: unknown };
console.log(data);

What you get back

The normalized asset includes identity fields (name, symbol, description), media, attributes, collection, creators, health, on-chain inspection (tokenProgram, permissions, extensions, risk), and diagnostics. See [response-models.md](./response-models.md) for the full field reference.

Collection market (overview)

OwlViz exposes multi-provider floor snapshots and rolling reference floors for indexed collections:

SurfacePathAuth
Floor snapshotGET /v1/collections/:address/marketpublic
Reference floorGET /v1/collections/:address/market/referencepublic
Market change eventsGET /v1/collections/:address/market/eventspublic
Observation historyGET /v1/collections/:address/market/historypublic
Market watch statusGET /v1/collections/:address/market-watchpublic
Global event feedGET /v1/market-eventspublic
Continuous samplingPOST /v1/market-watchesAPI key (ov_live_…) within plan quota
Webhook deliveryPOST /v1/webhooksAPI key (ov_live_…, Builder+ quota) or portal UI

Details: [Collections — market](./collections.md#collection-market-sprint-2), [Sprint 6 events](./collections.md#sprint-6--market-change-events-internal-durable-events), [Monitoring — webhooks](./monitoring.md#webhooks).

Query parameters

ParameterRoutesMeaning
refresh=trueAsset routesBypass cache and re-resolve from upstream providers

Cache headers

Asset and collection responses may include:

HeaderValuesMeaning
X-CacheHIT, MISS, BYPASSWhether the response came from cache
X-Cache-TTLsecondsConfigured TTL for cached entries

Rate limits

Public asset and collection routes use fixed-window rate limits when Redis is configured.

**Anonymous** (no API key): per client IP — **120** global / **60** expensive RPM per **60** seconds.

**Keyed** (Authorization: Bearer ov_live_…): per API key ID — limits from your account plan_id (Free matches anonymous; Builder **600/300**; Pro **2000/1000**).

Responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. When limited, the API returns **429** with Retry-After. See [errors-and-rate-limits.md](./errors-and-rate-limits.md).

/health is exempt from rate limiting.

Checkout for plan upgrades is not available yet (Solana Pay / USDC parked; no Stripe) — operators set plan_id via /admin to test Builder or Pro. See [developer-plans.md](./developer-plans.md) and [owlviz.dev/pricing](https://owlviz.dev/pricing).

TypeScript SDK

For typed access to the same v1 routes, use **@owlviz/sdk** — see [Getting started](./getting-started.md) and [v1 API surface](./v1-api-surface.md).

Next steps

  • [Getting started](./getting-started.md) — API key, SDK, first request
  • [Assets](./assets.md) — resolution, health, inspection, snapshots
  • [Media](./media.md) — reliability, recovery, preserved URLs
  • [Collections](./collections.md) — indexing, health aggregates, market floors, events, watches
  • [Monitoring](./monitoring.md) — change detection, webhooks (self-serve vs admin-token monitors)
  • [Developer plans](./developer-plans.md) — Free / Builder / Pro entitlements (live)
  • [Webhooks](../webhooks.md) — HMAC delivery, market event payloads
  • [Errors & rate limits](./errors-and-rate-limits.md)
  • [Examples](./examples/)