Data and API
The data behind these pages
Every figure on these pages is built from the files listed here, which are published exactly as the pages use them. They are plain JSON at stable addresses under /data/instruments/consent/, need no key and can be cached. The files drawn from the environmental clearance register are rebuilt every night, while the Census, boundary and legal files change only when they are revised. The endpoints below answer questions that no single file can, such as a search across India, the change log and CSV downloads.
Each source keeps its own terms. The register is published by the Ministry of Environment, Forest and Climate Change, the Census figures come through SHRUG from the Development Data Lab, and the boundaries come from datameet. The way each is read and checked is set out in the methodology. These files were last built 28 October 2026.
Licence: what this project adds to these files is published under CC BY 4.0, so it may be reused for any purpose, commercial use included, with credit to Whitespace India and a link to this page. The two exceptions are districts.json and subdistricts.json, which carry Census and SECC figures taken from SHRUG and keep its licence, CC BY-NC-SA 4.0. Under that licence they may be used for non-commercial purposes only, and anything built from them must be shared on the same terms. Records taken from the register remain under their publisher’s terms.
Endpoints
- GET /api/instruments/consent/search
- Search the whole register: q, state, district, sector, category, stage, located=1, displacement=1, offset, limit (up to 200).
- GET /api/instruments/consent/proposals.csv
- The register as CSV, for all of India, for one state with ?state=<slug> or for one district with ?district=<census code>. It is served in parts of 8,000 rows, requested with &part=2 and so on; the X-Parts header gives the number of parts and a Link header names the next one.
- GET /api/instruments/consent/changes
- Change log events as JSON, filtered by kind (repeatable), state, district, sector, category, scheduled=1 (districts wholly or partly scheduled), days (7, 30 or 60) or since=YYYY-MM-DD. after=<ISO time> returns only events that first appeared in a later build. Each answer includes stamp, the time the log was built, which a client can store and send back as after to receive only what is new.
- GET /api/instruments/consent/changes.csv
- The same selection as CSV, with every event, in parts of 8,000 rows (&part=N).
- GET /instruments/consent/feed
- The same selection as an Atom feed, which a feed reader can follow for any district, State, sector or Scheduled Area view.
- GET /api/instruments/consent/status
- Current stage of up to 100 proposals: ?ids=1,2,3.
- POST /api/instruments/consent/export
- One proposal's profile as a PDF, as requested from this site's pages.
Files
- meta.json
- Counts, resolution rates, coverage of each source, the register's submission span and the checks the build ran.
- freshness.json
- When the register was last read, and whether that read covered all of it.
- index.json
- The states, sectors, categories and status spellings the shards index into, and the location-method legend.
- lookup.json
- Proposal id to the state shard that holds it.
- projects/<state>.json
- The published proposals filed in one state, as a header named fields followed by one array per proposal. The columns are described below.
- districts.json
- Census 2011 values for all 640 districts, keyed by census code. Their definitions are in measures.json.
- subdistricts.json
- The same values for 5,899 sub-districts.
- measures.json
- The meaning of every value, with its definition, formula, denominator, source and year, and the India and State benchmarks together with the formula used for each.
- legal_reference.json
- The Scheduled Area determination for every district with the Presidential Order and citation it rests on, and the fifteen obligations drawn from statutes and international standards.
- stages.json
- The standard stages to which every spelling of a status is mapped, with their phases and decision outcomes.
- appraisal.json
- How long clearance takes, by sector, State, authority, category and outcome.
- register/districts.json
- Per-district counts from the register, and every shard that holds a district's proposals.
- register/facets.json
- Register-wide tallies.
- changes/recent.json
- Every dated event of the last sixty days (filed, details sought, other step, decided or closed), each as [kind, date, proposal id, stage, seen]. The seen value points into stamps, the list of builds, and gives the build in which the event first appeared; it is null for events already present when the log began.
- /geo/districts-2011.geojson
- Census 2011 district boundaries (datameet), keyed by census code.
Proposal files, column by column
Each proposal file, or shard, holds the proposals filed in one state, which may differ from the state where a project would be built. The proposals are stored as arrays under a header named fields. A column’s position in that header is not guaranteed, so each column is best located by its name.
| Column | What it holds |
|---|---|
id | Proposal id (the register's proposal_id). |
rid | Record id, which is the key the portal's form and history endpoints take. |
no | Proposal number as the register writes it, e.g. IA/OR/IND1/591624/2026. |
name | Project name as filed, contact details removed. |
agency | Proponent, contact details removed. |
sector | Position in the shard's sectors list. |
cat | Category: A, B1 or B2. |
status | Position in the shard's statuses list, which holds each status exactly as the register writes it. |
date | The register's submission date (moves forward on re-submission). |
auth | Position in the authorities list: SEIAA (the State Environment Impact Assessment Authority) or MoEFCC (the Ministry of Environment, Forest and Climate Change). |
cert | Path of the clearance letter, to be appended to certPrefix. It is empty when no letter is published. |
dc | Census 2011 district the profile is placed in. |
dall | Every district the filing names, when more than one. |
sd | Census 2011 sub-districts the filing names. |
nv | Number of villages or towns the filing names. |
dm | How the proposal was placed, as a code listed under resolutionCodes in index.json. The methods are by village, by sub-district, by declared district, by reconciling conflicting statements, by settling a town that spans districts and by project name, and a further code marks a proposal left unresolved. |
af | Families affected, as declared by the proponent. |
df | Families displaced, as declared. |
rnr | Rehabilitation and resettlement involved, as declared: YES or NO. |
lit | Litigation pending, as declared. |
vio | Violation involved, as declared. |
land | Land declared, as filed; the filing records no unit. |
forest | Forest land declared, as filed. |
sk | Standard stage key from stages.json. Counts and filters are reliable on this column, since the status column carries several spellings of one stage. |
lat | Latitude of the mapped block the site verdict rests on. |
lon | Its longitude. |
ext | [south, west, north, east] of every mapped block. |
gk | Where the coordinates fall relative to the districts the filing names: inside, boundary, elsewhere, offshore or unmapped. |
gd | The district the coordinates fall in. |
dtd | Days from first filing to decision, excluding days delisted. |
dpd | Days open, for undecided proposals. |
qr | Rounds of essential or additional details sought. |
cst | Canonical key of the current step. |
fon | First filing date, from the appraisal history. |
don | Decision date; fon + dtd + dsu = don. |
dsu | Days the portal had the proposal delisted. |
nblk | Mapped blocks the filing carries. |
sq | Qualifiers on the site location. alt means the filing had no block marked primary and its other blocks were used; 1c, a block with a single corner; rej, blocks discarded as unusable; unt, untyped blocks beside a primary block that were skipped; none, every block discarded; old, a record extracted before the current version, whose discards were not counted; wide, a site spanning more than one degree. |
dd | The district the form itself declares, as a Census 2011 code. |
upd | The register's own last-modified date (IST). |
lk | The other clearances and the land, as the form declares them. The value is null when the form has not yet been read for these questions, and 0 when the form answers every question and declares none of them. Otherwise it is an object holding only the parts declared. f is forest clearance [proposal no, status, ha applied, ha diverted, approved on]; w, the wildlife board [protected area, status, proposal no]; a, forest land additionally sought, as filed and without a unit; e, an eco-sensitive zone; p, a protected area; c, a coastal regulation zone [1, class]; and t, the land [[type, owner, acquisition status]]. u lists by letter (f, w, e, p, c) the questions the form left blank, which are counted as unknown. |
cf | Whether the application form was read. ok means it was read and placed the proposal; nogeo, it was read and names no place; none, the portal answered and serves no form; pend, the form has not yet been read. |