Planning Applications
Return planning application records for one property, or for every property in an area (postcode, outcode, or polygon_str). A planning row links to a property by EITHER property_id OR title_number; results from both links are merged. Area queries (postcode / polygon_str) covering more than 8,000 properties are rejected with a 422 error; narrow the area, or search by postcode instead. polygon_str matches depend on property geometry coverage, which varies sharply by area and can be very incomplete, especially in dense flat/apartment areas; postcode has no such gap. Prefer postcode over polygon_str whenever a postcode is available — the same area can return very different, and much smaller, result sets via polygon_str. outcode queries (e.g. 'SA7') are matched directly against the planning application's own postcode, not via the property/address link the other identifiers use, and default to the most recent 12 months (months=0 for the full history); the 8,000-property cap and the property-link coverage caveats above do not apply to outcode queries. postcode and start_date are declared on the shared output model but are populated only for outcode responses; responses for the other five identifiers omit both keys.
[Usage & billing] Each call costs 6 credits. Every page is a separate billable call: page is a 0-based index and limit sets the page size (default 100, max 100). Fetch only the pages the user actually asked for; do not page through a whole result set speculatively.
query Parameters
property_idPropalt Property ID. Provide exactly one of property_id, uprn, udprn, postcode, outcode, or polygon_str.
uprnUnique Property Reference Number (OS). Matched against planning records by property_id and by title number; results from both links are merged. Provide exactly one of property_id, uprn, udprn, postcode, outcode, or polygon_str.
udprnUnique Delivery Point Reference Number (Royal Mail). Provide exactly one of property_id, uprn, udprn, postcode, outcode, or polygon_str.
postcodeFull UK postcode, e.g. 'NW1 9HZ' (outward codes such as 'NW1' are not accepted; use outcode for that). Returns applications for every property in the postcode. Provide exactly one of property_id, uprn, udprn, postcode, outcode, or polygon_str. Areas covering more than 8,000 properties are rejected with a 422 error; narrow the area, or search by postcode instead. polygon_str matches depend on property geometry coverage, which varies sharply by area and can be very incomplete, especially in dense flat/apartment areas. postcode has no such gap. Prefer postcode over polygon_str whenever a postcode is available — searching the same area with polygon_str vs. postcode can return very different, and much smaller, result sets.
polygon_strWKT POLYGON((lng lat, ...)) defining the search area; the first and last coordinate must be identical (closed ring), and at most 200 points are accepted. Only a single polygon is supported. The ring must not self-intersect: list its corners in order around the shape (clockwise or anti-clockwise). Provide exactly one of property_id, uprn, udprn, postcode, outcode, or polygon_str. Areas covering more than 8,000 properties are rejected with a 422 error; narrow the area, or search by postcode instead. polygon_str matches depend on property geometry coverage, which varies sharply by area and can be very incomplete, especially in dense flat/apartment areas. postcode has no such gap. Prefer postcode over polygon_str whenever a postcode is available — searching the same area with polygon_str vs. postcode can return very different, and much smaller, result sets.
outcodeUK outward code (postcode district), e.g. 'SA7' or 'NW1', covering many postcodes at once. Returns applications whose own postcode falls inside the outcode (matched directly against the planning application's own postcode, not via the property link used by the other identifiers). Defaults to the most recent 12 months; use months=0 for the full history. Provide exactly one of property_id, uprn, udprn, postcode, outcode, or polygon_str.
monthsNumber of months to look back, applied only when outcode is provided (ignored for property_id, uprn, udprn, postcode, and polygon_str queries). Defaults to 12; use 0 for no limit (the full history). months=0 also includes rows whose start_date is NULL, which the date filter otherwise excludes. Range 0-1200 (100 years), where 0 means no limit (the full history). Values above 1200 are rejected with 422 rather than accepted: a sufficiently large window makes the computed start date fall outside the range MySQL's DATE type supports, and the request would then return an empty result set with a 200 instead of an error.
limitMaximum number of results to return.
pagePage number for pagination (0-based). Maximum 1000; with limit=100 that caps a traversal at 100,000 rows.
Headers
AuthorizationThe Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.
Responses
Planning application records for a property or area
Propalt Property ID this row is linked to; null for rows only reachable via title_number.
Unique Property Reference Number (OS) this row is linked to; null for rows only reachable via title_number.
Land Registry title number the planning application is associated with.
Postcode of the planning application, taken directly from the planning application record. Only populated for outcode queries; omitted (null) for property_id, uprn, udprn, postcode, and polygon_str queries.
Description of the proposed planning scheme.
Raw planning application state. One of: Conditions, Permitted, Referred, Rejected, Undecided, Unresolved, Withdrawn.
Date the planning application was decided.
Planning application type. One of: Advertising, Amendment, Conditions, Full, Heritage, Other, Outline, Telecoms, Trees.
The date the application started, and the field the months window filters on. Only populated for outcode queries; omitted (null) for property_id, uprn, udprn, postcode, and polygon_str queries.
Planning Constraints
Return active planning-constraint records for one property, or for every property in an area (postcode or polygon_str). England coverage may return flood_zone, listed_building, conservation_area, article_4, and green_belt. Wales coverage includes flood, listed-building, and conservation-area sources; it has no direct formal green-belt equivalent and the current dataset has no Wales Article 4 source. A missing category means that the current dataset and coverage returned no active record, not that the constraint has been verified as legally absent. The endpoint never synthesizes placeholder records or derives legal conclusions. Area queries (postcode / polygon_str) covering more than 8,000 properties are rejected with a 422 error; narrow the area, or search by postcode instead. polygon_str matches depend on property geometry coverage, which varies sharply by area and can be very incomplete, especially in dense flat/apartment areas; postcode has no such gap. Prefer postcode over polygon_str whenever a postcode is available — the same area can return very different, and much smaller, result sets via polygon_str.
[Usage & billing] Each call costs 6 credits. Every page is a separate billable call: page is a 0-based index and limit sets the page size (default 100, max 100). Fetch only the pages the user actually asked for; do not page through a whole result set speculatively.
query Parameters
property_idPropalt Property ID. Provide exactly one of property_id, uprn, udprn, postcode, or polygon_str.
uprnUnique Property Reference Number (OS). Provide exactly one of property_id, uprn, udprn, postcode, or polygon_str.
udprnUnique Delivery Point Reference Number (Royal Mail). Provide exactly one of property_id, uprn, udprn, postcode, or polygon_str.
postcodeFull UK postcode, e.g. 'NW1 9HZ' (outward codes such as 'NW1' are not accepted). Returns constraints for every property in the postcode. Provide exactly one of property_id, uprn, udprn, postcode, or polygon_str. Areas covering more than 8,000 properties are rejected with a 422 error; narrow the area, or search by postcode instead. polygon_str matches depend on property geometry coverage, which varies sharply by area and can be very incomplete, especially in dense flat/apartment areas. postcode has no such gap. Prefer postcode over polygon_str whenever a postcode is available — searching the same area with polygon_str vs. postcode can return very different, and much smaller, result sets.
polygon_strWKT POLYGON((lng lat, ...)) defining the search area; the first and last coordinate must be identical (closed ring), and at most 200 points are accepted. Only a single polygon is supported. The ring must not self-intersect: list its corners in order around the shape (clockwise or anti-clockwise). Provide exactly one of property_id, uprn, udprn, postcode, or polygon_str. Areas covering more than 8,000 properties are rejected with a 422 error; narrow the area, or search by postcode instead. polygon_str matches depend on property geometry coverage, which varies sharply by area and can be very incomplete, especially in dense flat/apartment areas. postcode has no such gap. Prefer postcode over polygon_str whenever a postcode is available — searching the same area with polygon_str vs. postcode can return very different, and much smaller, result sets.
limitMaximum number of results to return.
pagePage number for pagination (0-based).
Headers
AuthorizationThe Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.
Responses
Active planning-constraint records for a property or area
counttotal