snapdata

Overview

Free, open, daily rates for gold, silver, FX, crude and equity indices. One unauthenticated GET, from a CDN edge, with explicit trading-day semantics.

curl -s https://snapdata.dev/api/v1/gold/in/latest.json

No key, no account, no rate limit. That is most of the API surface.

What this is

Frozen, versioned, permanently-cacheable daily snapshots at stable URLs, with explicit trading-day semantics.

Market data is abundant; an artefact you can pin is not. A URL that returns the same bytes in 2029 as today, where every number carries its provenance, and where a closed market produces an explicit row rather than a repeated value.

Why it exists

Ask an agent for a gold or index price and watch what happens: it searches for a source, guesses at the response shape, discovers a key is required, hits a rate limit, tries the next one. Hundreds of tokens re-deriving what someone already worked out last week, and a different answer each run, depending on where it landed.

That is a bad trade today and a worse one as agents do more of the asking. What they need is a single source of truth they can point at, with a shape that does not move and provenance they can check.

It is deliberately not live. An agent watching a long-term portfolio runs once or twice a day, not once a minute. For that, a frozen daily number at a permanent URL beats a real-time one outright: it caches, it is comparable across runs, and a backtest over it reproduces exactly. Real-time is a different product with a different, more fragile architecture.

The shape is borrowed from covid19india.org, which served a country from static JSON in the open. The durable part there was the files, not the service. Same bet here, plain JSON at stable paths, every source and licence published, and if this service disappears the dataset is intact and forkable.

The five datasets

DatasetDomestic (in)World
gold24K / 22K / 18K, INR per gramXAU/USD per troy ounce
silverINR per kilogramXAG/USD per troy ounce
equity-indicesNifty 50, Nifty Bank, SensexS&P 500, FTSE 100 (v2)
fx,USD/INR, EUR, GBP, JPY, AED, SGD
crudeCrude Basket (PPAC)Brent, WTI

Four guarantees

Provenance travels with the number. Which source, which date it describes, whether it is final, and whether it was carried forward from a closed market.

Non-trading days are explicit. is_trading_day: false, status: "missing", value: null, never a silently repeated number. Free feeds get this wrong routinely, and it stays invisible until someone backtests.

Dated URLs are permanent. Once a dated file is 48 hours past its market's close it is served immutable, max-age=31536000.

The gaps are published. /api/v1/coverage.json says where each series starts and why it stops where it does. Backfill depth is licence-bound, not effort-bound.

What this is not

NotWhy
Real-time or intradayDaily cadence is the design. Realtime forces a fragile architecture.
The full NSE/BSE universeRedistribution risk and validation cost scale with symbol count.
Options, F&O, open interestNiche, huge payload, well served elsewhere.
AuthenticatedFree and open means free and open. The CDN absorbs the load.
MonetisedOut of scope, permanently.

Licence

Code MIT. Data we originate CC BY 4.0. Upstream attribution preserved per source, including the IBJA rupee metals, which carry their own terms. See Sources & licences.

snapdata (2026). Open Daily Rates & Indices Dataset. CC BY 4.0.

On this page