Your cartNo items yet

Loading your cart...

Browse marketplace
VaultStore
0% FEES · FOREVER
▥PortfolioCollection value
◈MarketBuy, watch, stores⌕ResearchCatalog, prices, art▤ActivityOrders, inbox, support
Research3 paths
⌕Search⌘Catalog✶Illustrators
Account
★Plans◎Trust Center
CURRENT PLANGuest
One path first. The full workspace unlocks after value.Focused start
GU
Guest
GUEST · Sign in to start free
Pricing API
DEVELOPERS · PRICING
Sign in
SearchCatalogIllustrators
Pricing-as-API

The number the world cites — every field reproducible.

A bearer token gets you fair value, 95% confidence interval, sample size, attributed sources, and per-week velocity for any catalog card. Every response carries a methodology URL pointing at the formulas that produced it. We honestly say “insufficient” when we don’t know — there’s no fabricated number masquerading as a real one.

Activate API accessAudit methodology
Contract snapshotAPI console
ActivateMethodPlans
v1EnvelopeAdditive fields within major
60dAPI windowVendor consensus response
95%CI bandLower and upper bounds
300sCacheDefault s-maxage
RequestSingle-card price
GET /api/v1/cards/{catalog_card_id}/price
Authorization: Bearer vsprice_<your-key>
ResponseReproducible envelope

Every response carries fair value, confidence interval, sample size, velocity, sources, license, and a methodology URL.

  • version pins contract semantics.
  • window_days states the actual comp window.
  • source_breakdown shows what drove the median.
TruthInsufficient means null

When comparable data is not deep enough, confidence returns insufficientand headline price fields return null. No fabricated number, no quietly-wide band.

EmbedNo-key widget

The one-line embed renders fair value, CI, sample size, velocity, and methodology attribution without requiring an API key.

<script src="https://vaultstore.live/embed/price.js" async></script>
LimitsCache and rate limits
  • Responses default to s-maxage=300.
  • Embed reads are IP-rate-limited and edge cached.
  • Authenticated calls return standard rate-limit headers.
PricingPreview tiers
  • Developer: 60/min, 5k/day, 100k/month during preview.
  • Growth: 5M calls/month plus history and dashboard.
  • Enterprise: SLA and dedicated comp ledger.
MoatWhat alternatives miss
  • Auditable provenance on every response.
  • Honest empty state when comps are missing.
  • Velocity alongside price.
  • Daily drift watchdog before stale numbers ship.

Use cases

Marketplaces
Anchor every listing to a third-party fair value. Show buyers the comparable spread without standing up your own pricing pipeline.
Insurance carriers
Issue policies against a 95% CI, not a single number. Auditable sample size + license URL on every quote.
Portfolio apps
Mark-to-market for collector portfolios with the same math VaultStore uses on its own portfolio ledger. One call per card.

Sample request

Fair value for a single catalog card
GET /api/v1/cards/{catalog_card_id}/price
Authorization: Bearer vsprice_<your-key>

Sample response

Envelope version 1 — additive within major
{
  "version": "1",
  "card_id": "9f4e…b3a1",
  "name": "Charizard",
  "set_code": "BASE",
  "fair_price_cents": 38912,
  "ci_lower_cents": 36420,
  "ci_upper_cents": 41440,
  "confidence": "high",
  "sample_size": 24,
  "window_days": 60,
  "observed_at": "2026-05-08T19:14:11.000Z",
  "last_sale_cents": 39500,
  "velocity_per_week": 5.8,
  "sources": ["VaultStore", "VaultStore TCG graph"],
  "source_breakdown": { "vaultstore_sale": 8, "tcg_graph": 16 },
  "currency": "USD",
  "license": "https://vaultstore.live/legal/pricing-license",
  "methodology_url": "https://vaultstore.live/pricing/methodology"
}

Field contract

What every field means and when it’s null
  • version — pin this on every consumer. New fields are additive within a major version; field semantics never change without a version bump.
  • fair_price_cents — trimmed median of weighted comparable sales over the last 30 days. Null when confidence === "insufficient".
  • ci_lower_cents / ci_upper_cents— central 95% of the trimmed distribution. Student-t when n < 30, normal-approx 1.96·σ/√n when n ≥ 30. Null with insufficient data.
  • confidence — one of high, medium, low, insufficient. Gate UI on confidence !== "insufficient"before rendering a headline number — that tier explicitly says “we don’t know”.
  • sample_size — comp count after trimming. Useful as a depth signal independent of the confidence tier.
  • window_days — width of the comparable-sales window the trimmed median was computed from. The endpoint reports the window it actually used so consumers can reproduce the math without guessing.
  • last_sale_cents — price of the most recent realized comp in the window. Null when none exists. Pair with observed_at for the freshness of that specific sale.
  • source_breakdown— per-source comp count over the window, keyed by source identifier. Useful for auditing which feeds drove the median. Don’t render these keys directly to end users — route through methodology labels when displaying.
  • velocity_per_week — realized sales per week, averaged over the last 28 days. Null when no sale-typed events exist. A high-velocity card with a tight CI is liquid; low velocity with a wide CI is illiquid even if the median looks confident.
  • sources — attributed source labels we hold an active license to cite. Filtered through external_price_licenses; you can render this array verbatim.
  • observed_at — most recent comp timestamp in the window. Pair with Cache-Control: s-maxage on the response to drive your own freshness display.
  • license — URL of the data-license terms covering this response. Show or link this when you republish the value.
  • methodology_url — link to the public formula stack. Surface this alongside the price so end-users can audit your number without leaving your app.

One-line embed widget

No API key required · IP rate-limited
For blogs, listing pages, and portfolio apps that just want to show a fair value inline without writing JavaScript: drop a script tag and a mount div. The widget calls a public, IP-rate-limited subset of the price endpoint and renders the same numbers — fair value, 95% CI, sample size, velocity, and a link back to the methodology page. No keys, no setup, no config.
<script src="https://vaultstore.live/embed/price.js" async></script>
<div data-vs-price-card-id="9f4e…b3a1" data-vs-price-theme="dark"></div>
  • The widget injects inline-styled HTML into each matching div. No shadow DOM, no global CSS, nothing to clash with the host page.
  • Themes: light, dark, and minimal. The script always includes “Powered by VaultStore” attribution and links to the public methodology page.
  • SPA hosts can re-scan after route changes by calling window.VaultStorePriceEmbed.refresh().
  • Rate limit: 60 requests / minute per origin IP. The script caches at the edge for 15 minutes, and price reads cache for 5 minutes so a popular blog with N embeds renders all of them on first paint without throttling.
  • Embed renders fire the standard price_engine_queried capture event with surface="embed" so we can see third-party adoption without collecting personal data from the host page.

Caching & rate limits

  • Responses ship with Cache-Control: public, s-maxage=N, stale-while-revalidate=M. N defaults to 300 seconds and is brain-tunable per methodology.
  • Per-key rate limits and per-day cost caps are enforced via the standard X-RateLimit-* response headers. Free tier is 60/min, 5k/day, and 100k/month; growth tiers raise the ceiling.
  • Errors use the standard envelope: { error: { code, message } } with HTTP status. Auth failures are always 401/403 with code scope_required or tier_required.

Pricing

Per-call, billed monthly
Developer
5k/day, 100k/month, free during preview
$0
Growth
5M calls / month, history endpoint, dashboard
$0.01 / 1k
Enterprise
Volume pricing, SLA, dedicated comp ledger
contact

What you can’t buy from the alternatives

  • Auditable provenance — every response carries sample_size, observed_at, sources, and a link to the formula stack. A consumer disputing your number reads methodology and reproduces it.
  • An honest empty state — when comparables are missing, the API says insufficient and returns null. No fabricated headline numbers, no quietly-wide CIs hiding the lack of signal.
  • Velocity — published alongside the price, not an afterthought. You learn liquidity at the same time you learn the median.
  • A drift watchdog — every 24 hours we compare our published number against external comparables on the same cards. When the gap exceeds 5% across 50+ cards an action-tier insight reaches the methodology team. The number gets investigated before the next refresh ships.

→ Read the full methodology

◈Market⌕Search▥Vault⬡Store▤Activity