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.jsonNo 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.
Dates & trading days
Read this first. It is the contract, and it is what most free feeds get wrong.
Quickstart
curl, JavaScript, Python, and pointing an agent at it.
Coverage & backfill
Where each series actually starts, and why it is uneven.
Sources & licences
Every field traces to a row with its licence and attribution.
The five datasets
| Dataset | Domestic (in) | World |
|---|---|---|
gold | 24K / 22K / 18K, INR per gram | XAU/USD per troy ounce |
silver | INR per kilogram | XAG/USD per troy ounce |
equity-indices | Nifty 50, Nifty Bank, Sensex | S&P 500, FTSE 100 (v2) |
fx | , | USD/INR, EUR, GBP, JPY, AED, SGD |
crude | Crude 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
| Not | Why |
|---|---|
| Real-time or intraday | Daily cadence is the design. Realtime forces a fragile architecture. |
| The full NSE/BSE universe | Redistribution risk and validation cost scale with symbol count. |
| Options, F&O, open interest | Niche, huge payload, well served elsewhere. |
| Authenticated | Free and open means free and open. The CDN absorbs the load. |
| Monetised | Out 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.