Developer Platform
Self-serve REST API for UK planning application data. All 312 councils. Daily refresh. Spatial search, webhooks, and bulk export.
All API requests require a Bearer token in the Authorization header. API keys are prefixed with pa_live_ for production.
Base URL: https://api.planningalerts.app
Starter
Professional
Enterprise
/v1/applicationsSearch planning applications by postcode, status, date range, or free text.
Parameters
postcodestringUK postcode (e.g. SW1A1AA)radiusintegerRadius in metres (50, 100, 500, 1000)statusstringPermitted | Refused | Undecided | WithdrawnlimitintegerResults per page (max 100, default 20)offsetintegerPagination offsetExample
GET /v1/applications?postcode=SW1A1AA&radius=500&status=Undecided
Authorization: Bearer pa_live_xxxxxxxxxxxx
{
"total": 12,
"items": [
{
"id": 1234567,
"reference": "25/00456/FUL",
"lpa_code": "WCC",
"address": "14 Oak Street, London SW1A 1AA",
"description": "Erection of single-storey rear extension",
"app_status": "Undecided",
"app_type": "Full",
"received_date": "2026-07-15",
"source_url": "https://planning.westminster.gov.uk/...",
"attribution": "Contains public sector information licensed under OGL3."
}
]
}/v1/applications/:idRetrieve a single planning application by its internal ID.
Example
GET /v1/applications/1234567 Authorization: Bearer pa_live_xxxxxxxxxxxx
/v1/councilsList all 312 councils with their portal status and last scrape timestamp.
Example
GET /v1/councils Authorization: Bearer pa_live_xxxxxxxxxxxx
/v1/webhooksRegister a webhook URL to receive real-time notifications when new applications are submitted.
Parameters
urlstringHTTPS endpoint to receive POST eventspostcodestringPostcode to monitorradiusintegerRadius in metreseventsarray['new_application', 'status_change']Example
POST /v1/webhooks
Authorization: Bearer pa_live_xxxxxxxxxxxx
{
"url": "https://your-app.com/webhooks/planning",
"postcode": "SW1A1AA",
"radius": 500,
"events": ["new_application", "status_change"]
}Webhooks are available on Professional and Enterprise plans. Events are delivered as HTTP POST requests to your endpoint with a JSON body.
new_applicationA new planning application has been submitted
status_changeAn application status has changed (e.g. Undecided → Permitted)