Sources & licences
Every published field traces to a source with its licence and attribution. Generated from the schema, so it cannot fall behind the code.
SOURCES.md in the repository is generated from packages/schema, and CI
fails if it drifts. Add an instrument without a source and the build breaks,
you find out at build time rather than when someone asks where a number came
from.
Licence summary
| Our code | Data we originate | Upstream data |
|---|---|---|
| MIT | CC BY 4.0 | as listed below, attribution preserved |
One exception worth knowing before you build on it: the rupee gold and silver
values carry ibja-attribution, not CC BY 4.0. Everything under the world
scope is cleanly relicensable.
Which sources are live right now
Being able to see this without reading our source is part of the point. The
repository carries a probe script that hits every upstream and reports what
actually happens, and UPSTREAMS.md
records the current answer.
| Source | Status | Feeds |
|---|---|---|
| ECB | live | fx |
| NSE | live | Nifty 50, Nifty Bank |
| EIA | needs an API key | Brent, WTI |
| World Bank | not yet wired | gold and silver USD spot |
| BSE | not yet wired | Sensex |
| PPAC | not yet wired | Indian Crude Basket |
Datasets whose sources are not yet wired publish rows with status: "not_backfilled" or "missing" rather than nothing at all, the endpoints
exist and answer, they just have no values yet. /api/v1/meta.json reports each
source's staleness, and it will not claim to be healthy while this table looks
like this.
Sources we publish from
| Source | Provides | Licence | Raw retention | Runs on |
|---|---|---|---|---|
| EIA | Brent, WTI, daily to 1987 | US public domain | indefinite | Worker / Actions |
| ECB | USD/INR and majors, daily to 1999 | permissive, attribution | indefinite | Worker / Actions |
| World Bank Pink Sheet | gold, silver USD, monthly to 1960 | CC BY 4.0 | indefinite | Worker / Actions |
| PPAC | Indian Crude Basket | GODL India | indefinite | Worker / Actions |
| NSE | Nifty 50, Nifty Bank | exchange terms | 90 days | India-egress runner |
| BSE | Sensex | exchange terms | 90 days | India-egress runner |
| CBIC | import duty and GST | GODL India | n/a | transcribed by hand |
IBJA, and the licence we accept
Rupee gold and silver are the IBJA benchmark, republished with attribution
under ibja-attribution, not CC BY 4.0. IBJA publishes no open API and grants
no formal licence; we read a third-party consumer relay that names IBJA as its
source in every response, and the parser fails if that attribution disappears.
This reverses an earlier decision. These values used to be fetched privately and used only to assert that a derived price had not drifted more than 0.5% from the benchmark, clean on licensing, and about 3.5% wrong every day, because the only redistributable USD spot input is a monthly average.
We publish the benchmark instead, name it everywhere it appears, and label it
with terms that are not CC BY 4.0 rather than pretending it is. If you need a
dataset that is freely relicensable end to end, use the world scope: the
World Bank, ECB and EIA series carry clean licences.
Raw bodies stay in the private R2 bucket for 90 days and are never committed to git, the same rule as every other restricted source.
The relay repeats Saturday's value on Sunday with no flag, so a bot polling it
directly gets Saturday's number presented as Sunday's. Our IN-BULLION calendar
marks Sunday closed, which is why /api/v1/gold/in/latest.json reports
is_trading_day: false rather than passing the repeat along.
Raw archive retention
Storing raw upstream responses lets us re-parse history when we find a parser bug without re-fetching (often impossible), answers "why did this number change", and insures against sources deleting their own archives.
Retention is licence-keyed, and the licence lives in the source registry, so adding a source cannot accidentally opt it into indefinite retention of a fee-liable body:
| Class | Examples | Retention |
|---|---|---|
| Clean / redistributable | EIA, ECB, World Bank, PPAC | indefinite, backfill insurance |
| Restricted / fee-liable | IBJA relay, NSE, BSE, MCX, FBIL | 90 days, local archive only, never served |
Bodies never go in the operations database. They are blobs, HTML, CSV, PDF, sometimes hundreds of KB. The database stores a sha256, a byte size, a content type and a pointer.
How to cite
snapdata (2026). Open Daily Rates & Indices Dataset. CC BY 4.0. Derived values include their inputs; upstream attribution as listed above.