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.

Shard columns and what they hold
ColumnWhat it holds
idProposal id (the register's proposal_id).
ridRecord id, which is the key the portal's form and history endpoints take.
noProposal number as the register writes it, e.g. IA/OR/IND1/591624/2026.
nameProject name as filed, contact details removed.
agencyProponent, contact details removed.
sectorPosition in the shard's sectors list.
catCategory: A, B1 or B2.
statusPosition in the shard's statuses list, which holds each status exactly as the register writes it.
dateThe register's submission date (moves forward on re-submission).
authPosition in the authorities list: SEIAA (the State Environment Impact Assessment Authority) or MoEFCC (the Ministry of Environment, Forest and Climate Change).
certPath of the clearance letter, to be appended to certPrefix. It is empty when no letter is published.
dcCensus 2011 district the profile is placed in.
dallEvery district the filing names, when more than one.
sdCensus 2011 sub-districts the filing names.
nvNumber of villages or towns the filing names.
dmHow 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.
afFamilies affected, as declared by the proponent.
dfFamilies displaced, as declared.
rnrRehabilitation and resettlement involved, as declared: YES or NO.
litLitigation pending, as declared.
vioViolation involved, as declared.
landLand declared, as filed; the filing records no unit.
forestForest land declared, as filed.
skStandard stage key from stages.json. Counts and filters are reliable on this column, since the status column carries several spellings of one stage.
latLatitude of the mapped block the site verdict rests on.
lonIts longitude.
ext[south, west, north, east] of every mapped block.
gkWhere the coordinates fall relative to the districts the filing names: inside, boundary, elsewhere, offshore or unmapped.
gdThe district the coordinates fall in.
dtdDays from first filing to decision, excluding days delisted.
dpdDays open, for undecided proposals.
qrRounds of essential or additional details sought.
cstCanonical key of the current step.
fonFirst filing date, from the appraisal history.
donDecision date; fon + dtd + dsu = don.
dsuDays the portal had the proposal delisted.
nblkMapped blocks the filing carries.
sqQualifiers 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.
ddThe district the form itself declares, as a Census 2011 code.
updThe register's own last-modified date (IST).
lkThe 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.
cfWhether 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.