Planning data tells you what somebody has applied to do, but does not tell you what the land is. Joining the two means 81 published datasets and a spatial problem most teams would rather not own.
Every application record on the Pro plan and above now arrives with that done. constraints lists what the national open datasets put at the record's coordinates: the areas the site sits inside, and the listed buildings, scheduled monuments and rights of way near it, each with its distance and a link to the record it came from.
"constraints": [
{ "layer": "listed", "label": "Listed buildings", "relation": "near", "metres": 27,
"name": "SALISBURY HOUSE AND RAILINGS", "reference": "1157347", "grade": "II",
"url": "https://historicengland.org.uk/listing/the-list/list-entry/1157347" },
{ "layer": "park", "label": "National parks", "relation": "within", "name": "Yorkshire Dales" },
{ "layer": "conservation", "label": "Conservation areas", "relation": "within",
"name": "Askrigg", "reference": "307" },
{ "layer": "agri", "label": "Agricultural land", "relation": "within",
"grade": "3b", "dataset": "predicted" }
]
Checking any point
The sites you are appraising are not applications yet, so the same answer is available for any coordinate or postcode.
GET /v1/constraints?lat=51.00361&lng=-1.99444
GET /v1/constraints?postcode=SP5%205BW
One point costs one record, whatever comes back, and reading it again is free. A town centre site costs what an empty field costs.
The fields
relationiswithinfor an area the point sits inside, ornearwithmetresfor something close to it. Listed buildings count within 150 m, scheduled monuments within 250 m, rights of way within 30 m.gradecarries the listing grade, the flood zone, or the farmland grade including 3a and 3b.name,referenceandurlpoint back at the published record, so anything you put in front of a customer is traceable to Historic England, the Environment Agency, Natural England, Cadw, NatureScot or the council that published it.
Entries come back most significant first, so the first one is the headline.
When records are checked
Constraints are worked out overnight and stored against each record, so a search returning 100 applications returns 100 constraint sets in the same query. A record we have not reached yet comes back as null rather than an empty array, so you can tell nothing here from not read yet.
Parameters, the response schema and a worked example are in the developer docs and the OpenAPI schema.