{"openapi":"3.1.0","info":{"title":"Civic Data API","version":"0.1.0","summary":"Normalised, cited London civic data for people, applications and agents.","description":"Civic Data resolves a London postcode to its official ONS geography and returns factual, source-cited Census, fire, recorded-crime, road-collision and planning data from official UK publishers. Every response names its publisher, dataset version and freshness. There is no LLM in the response path and Civic Data never produces risk, safety or desirability scores.\n\n## Access tiers\n\nAtomic endpoints, including EPC, observed property price-per-area, deprivation, council-tax charge tables, connectivity and tribunal-link lookup, are free and anonymous under the `free-anonymous` quota policy. Borough endpoints (`/v1/boroughs`) are free derived reference data served outside that quota. Composed endpoints (`/v1/area`, `/v1/compare`) accept a subscribed Bearer API key with remaining allowance or an x402 payment in USDC on Base. An unpaid request receives HTTP 402 with a `PAYMENT-REQUIRED` header.\n\n## Rate limiting\n\nFree responses carry the IETF `RateLimit` and `RateLimit-Policy` fields (draft-ietf-httpapi-ratelimit-headers) together with the widely supported `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset` and legacy `X-RateLimit-*` names. A refused request returns HTTP 429 with `Retry-After`. Agents should read `RateLimit` (remaining `r`, seconds to reset `t`) and self-throttle.\n\n## Versioning and deprecation\n\nThe major version is carried in the URL path (`/v1/`). Additive changes (new fields, new endpoints, new optional parameters) ship within a major version without notice. Breaking changes are released under a new path prefix. When an endpoint or version is scheduled for removal, responses carry `Deprecation` (RFC 9745) and `Sunset` (RFC 8594) headers, plus a `Link` header with `rel=\"deprecation\"`, at least 90 days before removal. The policy is published at https://civicdata.co.uk/developers/versioning.","termsOfService":"https://civicdata.co.uk/privacy","contact":{"name":"Civic Data","url":"https://civicdata.co.uk/contact"},"license":{"name":"Open Government Licence v3.0 (source data); see /v1/sources for per-dataset licences","url":"https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/"}},"externalDocs":{"description":"Civic Data developer documentation, llms.txt and MCP guide","url":"https://civicdata.co.uk/developers"},"servers":[{"url":"https://api.civicdata.co.uk","description":"Civic Data public gateway"}],"tags":[{"name":"Location","description":"Postcode canonicalisation and official ONS geography."},{"name":"Atomic data","description":"Free, anonymous, rate-limited single-dataset facts with provenance."},{"name":"Composed data","description":"Paid (x402) multi-dataset profiles and comparisons built from the same domain operations."},{"name":"Borough data","description":"Free borough-level (local authority) profiles derived from the loaded datasets after each import. Served outside the anonymous quota."},{"name":"Ward data","description":"Free, quota-exempt factual profiles for current London wards."},{"name":"District data","description":"Free, quota-exempt profiles for London postcode districts, including explicit partial-coverage notices."},{"name":"Change alerts","description":"Subscription-key authenticated webhook registrations driven by shared import/source-check cadence."},{"name":"Developer account","description":"Passwordless dashboard operations authenticated with a Supabase session JWT. These routes are for the Civic Data web dashboard, not API-key consumers."},{"name":"Meta","description":"Health, sources and discovery."}],"paths":{"/health":{"get":{"security":[{"subscriptionKey":[]},{}],"operationId":"getHealth","tags":["Meta"],"summary":"Check gateway health","description":"Reports whether the gateway is running, which data mode it is in and whether its database credentials are configured. Use it as a liveness probe before a batch of calls.","responses":{"200":{"description":"Gateway is running","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/v1/resolve/{postcode}":{"get":{"operationId":"resolveLocation","tags":["Location"],"summary":"Resolve a London postcode to its official statistical geography","description":"Canonicalises the postcode and returns its WGS84 centroid, LSOA, MSOA, ward, local authority, Westminster parliamentary constituency, built-up area and 2021 rural/urban classification from the loaded ONS Postcode Directory release. Every geography includes its ONSPD source_version. Call this first when you need canonical geography identifiers for other tools.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"Resolved location with ONSPD provenance","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveLocationResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/fire/{postcode}":{"get":{"operationId":"getFireData","tags":["Atomic data"],"summary":"Return LFB incident and appliance-response history around a postcode","description":"Counts London Fire Brigade incidents whose published point falls within the radius of the postcode centroid during the rolling period, broken down by category and year, and reports median and 90th-percentile first-appliance response where mobilisation data exists. This is factual history, not a fire-risk assessment.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}},{"name":"radius_metres","in":"query","required":false,"description":"Search radius in metres measured from the ONS postcode centroid. Bounded to keep spatial queries deterministic.","schema":{"type":"integer","minimum":100,"maximum":5000,"default":1000}},{"name":"years","in":"query","required":false,"description":"Length of the rolling historical period in whole years ending at the latest loaded data.","schema":{"type":"integer","minimum":1,"maximum":15,"default":5}}],"responses":{"200":{"description":"Historical fire facts with provenance","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FireDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/crime/{postcode}":{"get":{"operationId":"getCrimeData","tags":["Atomic data"],"summary":"Return LSOA-level monthly recorded-crime facts for a postcode","description":"Resolves the postcode to its LSOA and returns the latest complete 12-month Metropolitan Police recorded-crime total, its rate per 1,000 residents using the explicitly returned Census 2021 denominator, the previous 12 months, the year-over-year percentage change, category totals and the monthly series. A missing denominator produces a null rate, never a raw-count fallback. Results describe the statistical area, not a single street, and no safety score is produced.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"Crime totals, categories, trend and provenance","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrimeDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/census/{postcode}":{"get":{"operationId":"getCensusData","tags":["Atomic data"],"summary":"Return Census 2021 LSOA demographic and household facts","description":"Resolves the postcode to its 2021 LSOA and returns official ONS Census 2021 population, age, households, tenure, cars, ethnicity, religion, health, disability, accommodation, economic activity and qualification counts. These are published Census Day facts, not current estimates or inferred scores.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"Census 2021 LSOA facts with provenance","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CensusDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/roads/{postcode}":{"get":{"operationId":"getRoadCollisionData","tags":["Atomic data"],"summary":"Return STATS19 road-collision history around a postcode","description":"Counts Department for Transport STATS19 police-reported personal-injury collisions within the radius of the postcode centroid during the rolling period, split into fatal, serious and slight severities. Damage-only incidents are not part of STATS19.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}},{"name":"radius_metres","in":"query","required":false,"description":"Search radius in metres measured from the ONS postcode centroid. Bounded to keep spatial queries deterministic.","schema":{"type":"integer","minimum":100,"maximum":5000,"default":1000}},{"name":"years","in":"query","required":false,"description":"Length of the rolling historical period in whole years ending at the latest loaded data.","schema":{"type":"integer","minimum":1,"maximum":10,"default":5}}],"responses":{"200":{"description":"Collision counts by severity with provenance","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoadCollisionDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/planning/{postcode}":{"get":{"operationId":"getPlanningConstraints","tags":["Atomic data"],"summary":"Return factual planning designations intersecting a postcode centroid","description":"Queries the official Planning Data platform for conservation areas, listed buildings, Article 4 directions, green belt, brownfield land, scheduled monuments and flood-planning entities that intersect the postcode centroid. An empty result does not prove the absence of a constraint; status \"temporarily_unavailable\" means the upstream platform could not be reached.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"Planning constraints and coverage notices with provenance","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanningConstraintsResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/flood/{postcode}":{"get":{"operationId":"getFloodData","tags":["Atomic data"],"summary":"Return official long-term flood bands and current warnings","description":"Intersects the ONS postcode centroid with the imported Environment Agency Risk of Flooding from Rivers and Sea layer, then returns current API warnings only where the same point is inside the published warning-area polygon. Values and warning severities are preserved as published; no Civic risk score is calculated.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"Flood context with separate imported and live provenance","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FloodDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/ptal/{postcode}":{"get":{"operationId":"getPtal","tags":["Atomic data"],"summary":"Return the official TfL PTAL grid value","description":"Returns the official WebCAT 2023 PTAL and Access Index for the 100 metre grid cell containing the ONS postcode centroid. TfL describes PTAL as a strategic-planning measure rather than address-level or journey-planning information.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"PTAL grid result with provenance","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PtalDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/noise/{postcode}":{"get":{"operationId":"getNoiseData","tags":["Atomic data"],"summary":"Return Defra strategic road and rail noise bands","description":"Intersects the ONS postcode centroid with Defra Round 4 road, rail and airport Lden and Lnight noise mapping. Values are modelled annual-average five-decibel bands. dataset_unavailable means that source has no completed import; not_mapped is used only after import and does not mean quiet. No property-level noise or risk score is calculated.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"Road and rail noise bands with provenance and coverage notices","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoiseDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/air-quality/{postcode}":{"get":{"operationId":"getAirQualityData","tags":["Atomic data"],"summary":"Return LAEI modelled annual-mean air concentrations","description":"Returns LAEI 2022 annual-mean NO2, PM2.5 and PM10 model concentrations for the 20 metre cell containing the ONS postcode centroid. dataset_unavailable means LAEI has no completed import; not_covered is used only after import. Separately cited UK legal and WHO 2021 annual reference values are returned as facts without a pass/fail label or score.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"Modelled concentrations and cited reference values with provenance","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AirQualityDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/planning-applications/{postcode}":{"get":{"operationId":"getPlanningApplications","tags":["Atomic data"],"summary":"Return Planning London Datahub applications near a postcode","description":"Returns geocoded planning applications whose published centroid is within the bounded radius and whose application valid date falls in the explicit date range. Published status, decision and decision date are returned as factual fields. This is separate from planning constraints and is not planning or legal advice.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}},{"name":"radius_metres","in":"query","required":false,"description":"Search radius in metres measured from the ONS postcode centroid. Bounded to keep spatial queries deterministic.","schema":{"type":"integer","minimum":100,"maximum":5000,"default":1000}},{"name":"date_from","in":"query","required":true,"description":"Inclusive application valid-date lower bound.","schema":{"type":"string","format":"date","minimum":"2004-01-01"}},{"name":"date_to","in":"query","required":true,"description":"Inclusive application valid-date upper bound. The total requested range cannot exceed 10 years.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Planning applications with source provenance and coverage notices","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanningApplicationsResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/property-sales/{postcode}":{"get":{"operationId":"getPropertySales","tags":["Atomic data"],"summary":"Return registered property-sale transactions and factual aggregates","description":"Returns HM Land Registry Price Paid transactions for the exact postcode by default, or within a bounded radius measured between ONS postcode centroids. Aggregates are count, lower quartile, median and upper quartile over every matching transaction; individual rows are capped at 500 and disclose truncation. A borough-level official UK HPI series is supplied as context. No estimate, valuation, ranking or trend commentary is produced.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}},{"name":"radius_metres","in":"query","required":false,"description":"Use 0 (the default) for the exact transaction postcode, or 100–5000 metres from the ONS postcode centroid.","schema":{"type":"integer","minimum":0,"maximum":5000,"default":0}},{"name":"date_from","in":"query","required":false,"description":"Inclusive transfer-date lower bound. Defaults to the Price Paid coverage start, 1995-01-01.","schema":{"type":"string","format":"date","default":"1995-01-01"}},{"name":"date_to","in":"query","required":false,"description":"Inclusive transfer-date upper bound. Defaults to the request date.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Price Paid transactions, factual aggregates and borough UK HPI context","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertySalesResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/epc/{postcode}":{"get":{"operationId":"getEpcData","tags":["Atomic data"],"summary":"Return published domestic EPC facts for an address","description":"Matches a postcode plus building number to the domestic EPC release and returns the latest published certificate by default, including total floor area. The response reports ambiguity and retains the publisher address-data notice. It is not a survey, bill forecast or valuation.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}},{"name":"building_number","in":"query","required":true,"schema":{"type":"string"}},{"name":"include_history","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"EPC facts with provenance and match status","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EpcDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/property-price-per-area/{postcode}":{"get":{"operationId":"getPropertyPricePerArea","tags":["Atomic data"],"summary":"Return observed sale price per unit of EPC floor area","description":"Joins Price Paid rows to the latest published EPC by exact normalised address and returns transactions and quartiles in square metres and square feet. EPC timing and coverage limitations are explicit; no valuation or forecast is produced.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}},{"name":"building_number","in":"query","required":false,"schema":{"type":"string"}},{"name":"radius_metres","in":"query","required":false,"description":"0 selects the exact postcode; 100–5000 metres uses the postcode centroid.","schema":{"type":"integer","minimum":0,"maximum":5000,"default":0}},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Joined observed price-per-area facts","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyPricePerAreaResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/deprivation/{postcode}":{"get":{"operationId":"getDeprivationData","tags":["Atomic data"],"summary":"Return published English deprivation ranks and deciles","description":"Returns the English Indices of Deprivation 2025 publisher ranks and deciles for the containing LSOA. These describe an area; Civic Data adds no score.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"Publisher ranks and deciles","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeprivationDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/council-tax/{postcode}":{"get":{"operationId":"getCouncilTaxRates","tags":["Atomic data"],"summary":"Return local-authority council-tax charges by band","description":"Returns official annual band A–H charges for the postcode local authority. It does not infer or scrape an individual property band.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"Annual authority charges by band","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouncilTaxRatesResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/connectivity/{postcode}":{"get":{"operationId":"getConnectivityData","tags":["Atomic data"],"summary":"Return published Ofcom postcode and authority coverage","description":"Returns Ofcom postcode-unit fixed coverage when loaded and local-authority mobile coverage. Neither is property-level availability or measured speed.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"Ofcom aggregate coverage","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectivityDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/income/{postcode}":{"get":{"operationId":"getIncomeData","tags":["Atomic data"],"summary":"Return ONS model-based household-income estimates","description":"Returns four mean annual household-income estimates and their 95% confidence intervals for the containing 2021 MSOA. No property estimate, affluence score or desirability score is inferred.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"ONS small-area income estimates","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncomeDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/radon/{postcode}":{"get":{"operationId":"getRadonData","tags":["Atomic data"],"summary":"Return the BGS indicative 1 km radon class","description":"Intersects the postcode centroid with the free BGS indicative atlas. The result is the highest potential in a 1 km grid square, not a property test or risk score.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}}],"responses":{"200":{"description":"Indicative BGS radon class","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RadonDataResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/uprn/{uprn}":{"get":{"operationId":"resolveUprn","tags":["Location"],"summary":"Resolve an OS Open UPRN to a coordinate","description":"Returns the OS Open UPRN coordinate only. The source contains no address, ownership or occupancy information.","parameters":[{"name":"uprn","in":"path","required":true,"schema":{"type":"string","pattern":"^\\d{1,12}$"}}],"responses":{"200":{"description":"OS Open UPRN point","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UprnLocationResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/property-tribunals/{postcode}":{"get":{"operationId":"getPropertyTribunalDecisions","tags":["Atomic data"],"summary":"Search published Residential Property Tribunal decisions","description":"Matches the postcode and optional building number against the published decision index and returns publisher links. Text matching does not establish the same legal title or liability.","parameters":[{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}},{"name":"building_number","in":"query","required":false,"schema":{"type":"string"}},{"name":"date_from","in":"query","required":false,"schema":{"type":"string","format":"date"}},{"name":"date_to","in":"query","required":false,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Published tribunal decision matches","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TribunalDecisionsResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/nearby/{category}/{postcode}":{"get":{"operationId":"findNearby","tags":["Atomic data"],"summary":"Find official point records near a postcode centroid","description":"Provides one category-based interface for official point datasets: food hygiene, schools, care locations, health services, public-transport stops, cycle-hire docks and open greenspace. Published facts are preserved verbatim. Results are ordered only by straight-line distance, and no quality score is calculated.","parameters":[{"name":"category","in":"path","required":true,"description":"Point dataset category.","schema":{"type":"string","enum":["food_hygiene","school","care_provider","gp_practice","pharmacy","station","bus_stop","dentist","cycle_hire","open_space"]}},{"name":"postcode","in":"path","required":true,"description":"A UK postcode in any spacing or letter case. Civic Data canonicalises it (for example \"e152ne\" becomes \"E15 2NE\") and echoes the canonical form in the response.","schema":{"type":"string","minLength":5,"maxLength":8,"examples":["E15 2NE"]}},{"name":"radius_metres","in":"query","required":false,"description":"Search radius in metres measured from the ONS postcode centroid. Bounded to keep spatial queries deterministic.","schema":{"type":"integer","minimum":100,"maximum":5000,"default":1000}}],"responses":{"200":{"description":"Nearby official records with distance, facts and provenance","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NearbyResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/history/{dataset}/{identifier}":{"get":{"operationId":"getHistory","tags":["Atomic data"],"summary":"Return an explicit source-backed monthly history","description":"Returns monthly Fire incident, recorded Crime or road-collision counts for a postcode, ward, local authority or MSOA. The response reports the actual loaded coverage bounds. A request outside those bounds returns status outside_coverage and no partial series. Crime classifications remain explicit and are never silently merged.","parameters":[{"name":"dataset","in":"path","required":true,"schema":{"type":"string","enum":["fire","crime","road_collisions"]}},{"name":"identifier","in":"path","required":true,"description":"A London postcode, current official ONS ward/local-authority/MSOA code, or a London postcode district.","schema":{"type":"string","examples":["E15 2NE","E05013924","E09000025","E02006997","E15"]}},{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Monthly series or explicit loaded coverage bounds","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/rents/{borough}":{"get":{"operationId":"getRentStatistics","tags":["Atomic data"],"summary":"Return official private-rent statistics for a London borough","description":"Returns the latest five ONS PIPR bedroom categories, the trailing 24-month all-bedroom PIPR series and the final VOA-based PRMS sample count, mean and quartiles. Figures are published at local-authority level and are never estimated below that geography. They are not asking rents, valuations, yields, rankings or recommendations.","parameters":[{"name":"borough","in":"path","required":true,"description":"A Greater London borough as an ONS local-authority code (E09000025), a name (Newham, \"London Borough of Newham\") or a slug (tower-hamlets). Matching ignores case and punctuation.","schema":{"type":"string","examples":["E09000025","Newham","tower-hamlets"]}}],"responses":{"200":{"description":"Published borough rent statistics with provenance and caveats","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentStatisticsResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/boroughs":{"get":{"operationId":"listBoroughProfiles","tags":["Borough data"],"summary":"List factual profiles for all 33 London boroughs","description":"Returns every Greater London borough (alphabetical) with the same derived profile: ONSPD geography counts, Census 2021 population and households, five-year London Fire Brigade incidents and first-appliance response, latest 12-month Metropolitan Police recorded crime with its rate per 1,000 residents, five-year STATS19 collisions by severity and the latest UK House Price Index. Rates use the Census 2021 resident population and the comparison_basis names them explicitly. Profiles are regenerated after each import and carry the contributing source versions. Nothing is ranked, scored or recommended. This endpoint is not counted against the anonymous quota.","responses":{"200":{"description":"All borough profiles with provenance and caveats","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoroughListResponse"}}}},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/boroughs/{borough}":{"get":{"operationId":"getBoroughProfile","tags":["Borough data"],"summary":"Return the factual profile of one London borough","description":"Resolves the borough from a code, name or slug and returns its derived profile with category breakdowns, annual and monthly series, the UK HPI trailing year and provenance. Sections report status \"missing\" or \"not_covered\" (for example the City of London, which the Metropolitan Police dataset does not cover) rather than substituting values. Not counted against the anonymous quota.","parameters":[{"name":"borough","in":"path","required":true,"description":"A Greater London borough as an ONS local-authority code (E09000025), a name (Newham, \"London Borough of Newham\") or a slug (tower-hamlets). Matching ignores case and punctuation.","schema":{"type":"string","examples":["E09000025","Newham","tower-hamlets"]}}],"responses":{"200":{"description":"Borough profile with provenance and caveats","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BoroughProfileResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/wards":{"get":{"operationId":"listWardProfiles","tags":["Ward data"],"summary":"List factual London ward profiles","description":"Lists current London wards alphabetically, optionally within one borough, with Census, Fire, recorded Crime, road-collision and Price Paid facts. Uses documented best-fit LSOA assignment where required and never ranks or scores. This reference-data route is outside the anonymous quota.","parameters":[{"name":"borough","in":"query","required":false,"description":"London borough code, name or slug.","schema":{"type":"string","examples":["hackney","E09000012"]}}],"responses":{"200":{"description":"Ward profiles","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeographyListResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/wards/{ward}":{"get":{"operationId":"getWardProfile","tags":["Ward data"],"summary":"Return one ward profile by ONS code","description":"Returns the precomputed factual profile for one current London ward identified by its ONS code, including provenance and best-fit geographic-basis caveats. This route is outside the anonymous quota.","parameters":[{"name":"ward","in":"path","required":true,"schema":{"type":"string","pattern":"^E05[0-9]{6}$"}}],"responses":{"200":{"description":"Ward profile","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeographyProfileResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/wards/{borough}/{ward}":{"get":{"operationId":"getWardProfileBySlug","tags":["Ward data"],"summary":"Return one ward profile by borough and ward slug","description":"Resolves a canonical borough/ward slug pair and returns the same factual profile as the ONS-code route. Ward slugs are scoped to their parent borough because names are not unique across London.","parameters":[{"name":"borough","in":"path","required":true,"description":"A Greater London borough as an ONS local-authority code (E09000025), a name (Newham, \"London Borough of Newham\") or a slug (tower-hamlets). Matching ignores case and punctuation.","schema":{"type":"string","examples":["E09000025","Newham","tower-hamlets"]}},{"name":"ward","in":"path","required":true,"schema":{"type":"string","examples":["hoxton-east-and-shoreditch"]}}],"responses":{"200":{"description":"Ward profile","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeographyProfileResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/districts":{"get":{"operationId":"listDistrictProfiles","tags":["District data"],"summary":"List London postcode-district profiles","description":"Lists postcode districts represented by live London postcodes. Districts are string-derived rather than official statistical polygons; districts extending outside Greater London carry a partial-coverage notice. This reference-data route is outside the anonymous quota.","responses":{"200":{"description":"District profiles","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeographyListResponse"}}}},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/districts/{district}":{"get":{"operationId":"getDistrictProfile","tags":["District data"],"summary":"Return one postcode-district profile","description":"Returns one string-derived London postcode-district profile with official source provenance and an explicit complete or partial Greater London coverage marker. No rank or score is produced.","parameters":[{"name":"district","in":"path","required":true,"schema":{"type":"string","examples":["E15","SW1A"]}}],"responses":{"200":{"description":"District profile","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeographyProfileResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/sources":{"get":{"operationId":"listSources","tags":["Meta"],"summary":"List official datasets, licences, coverage and freshness","description":"Returns every dataset behind Civic Data with its publisher, official URL, licence, geographic coverage and update frequency. Imported sources expose latest_version and last_successful_import; live-query sources retain those compatibility fields as null and expose upstream_checked_at and last_successful_upstream_response_at.","responses":{"200":{"description":"Available Civic Data sources","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceInfoResponse"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/alerts/subscriptions":{"post":{"operationId":"registerAlertSubscription","tags":["Change alerts"],"security":[{"subscriptionKey":[]}],"summary":"Register a postcode change-alert webhook","description":"Registers a postcode centroid, bounded radius and watched planning_applications and/or flood_warnings datasets. Civic checks each upstream source once on its normal cadence and fans out new matching events. The webhook contains a delivery ID; retrieve the cited event with the same subscription key.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertSubscriptionInput"}}}},"responses":{"200":{"description":"Alert subscription registered","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertSubscriptionResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/alerts/subscriptions/{id}":{"get":{"operationId":"getAlertSubscription","tags":["Change alerts"],"security":[{"subscriptionKey":[]}],"summary":"Read an alert subscription","description":"Returns one active or inactive alert registration owned by the authenticated subscription-key holder.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Alert subscription","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertSubscriptionResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}},"delete":{"operationId":"deactivateAlertSubscription","tags":["Change alerts"],"security":[{"subscriptionKey":[]}],"summary":"Deactivate an alert subscription","description":"Stops future event fan-out for one registration while retaining its auditable delivery history.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Deactivated alert subscription","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertSubscriptionResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/alerts/deliveries/{id}":{"get":{"operationId":"getAlertDelivery","tags":["Change alerts"],"security":[{"subscriptionKey":[]}],"summary":"Retrieve a cited alert event after a webhook","description":"Authenticates the webhook delivery ID and returns its factual planning or flood payload with publisher, licence and freshness provenance.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Factual alert event with source provenance","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertDeliveryResponse"}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/account":{"get":{"operationId":"getDeveloperAccount","tags":["Developer account"],"security":[{"dashboardSession":[]}],"summary":"Get the signed-in developer workspace and allowance","description":"Returns the authenticated developer identity, workspace, current Stripe subscription state and remaining composed-call allowance.","responses":{"200":{"description":"Developer account summary"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/v1/account/keys":{"get":{"operationId":"listDeveloperKeys","tags":["Developer account"],"security":[{"dashboardSession":[]}],"summary":"List API-key prefixes without exposing secrets","description":"Lists API-key labels, safe prefixes, creation times and revocation state for the authenticated workspace without returning stored secrets.","responses":{"200":{"description":"Workspace API keys and revocation state"},"401":{"$ref":"#/components/responses/Unauthorized"}}},"post":{"operationId":"createDeveloperKey","tags":["Developer account"],"security":[{"dashboardSession":[]}],"summary":"Create an API key and reveal its secret once","description":"Creates a cryptographically random API key for an actively subscribed workspace and returns its plaintext exactly once.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["label"],"properties":{"label":{"type":"string","minLength":1,"maxLength":120}},"additionalProperties":false}}}},"responses":{"200":{"description":"Created key. The api_key plaintext is never returned again."},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/v1/account/keys/{id}":{"delete":{"operationId":"revokeDeveloperKey","tags":["Developer account"],"security":[{"dashboardSession":[]}],"summary":"Revoke an API key owned by the signed-in workspace","description":"Immediately revokes one API key after verifying that it belongs to the authenticated developer workspace.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Revoked key metadata"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/v1/account/usage":{"get":{"operationId":"listDeveloperUsage","tags":["Developer account"],"security":[{"dashboardSession":[]}],"summary":"List the latest composed API and MCP calls","description":"Returns up to one hundred recent composed API and MCP usage events for allowance visibility and customer reconciliation.","responses":{"200":{"description":"Up to 100 recent composed calls"},"401":{"$ref":"#/components/responses/Unauthorized"}}}},"/v1/account/checkout":{"post":{"operationId":"createDeveloperCheckout","tags":["Developer account"],"security":[{"dashboardSession":[]}],"summary":"Create a Stripe-hosted Developer subscription checkout","description":"Creates a short-lived Stripe Checkout session for the centrally configured Developer subscription Price.","responses":{"200":{"description":"Short-lived Stripe Checkout URL"},"401":{"$ref":"#/components/responses/Unauthorized"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/account/portal":{"post":{"operationId":"createDeveloperBillingPortal","tags":["Developer account"],"security":[{"dashboardSession":[]}],"summary":"Create a Stripe-hosted Customer Portal session","description":"Creates a short-lived Stripe Customer Portal session so the authenticated developer can manage billing securely.","responses":{"200":{"description":"Short-lived Stripe Customer Portal URL"},"401":{"$ref":"#/components/responses/Unauthorized"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/area/{identifier}":{"get":{"operationId":"getAreaProfile","tags":["Composed data"],"summary":"Compose factual metrics for a postcode or official London area code","description":"Accepts a postcode, ward code, local-authority code or MSOA code. Wider-area profiles use precomputed source-backed aggregates and never substitute an arbitrary postcode. Point-only Planning constraints are returned only for postcode profiles. Accepts a subscribed Bearer API key with allowance or x402 payment (0.05 USDC on Base).","parameters":[{"name":"identifier","in":"path","required":true,"description":"A London postcode, current official ONS ward/local-authority/MSOA code, or a London postcode district.","schema":{"type":"string","examples":["E15 2NE","E05013924","E09000025","E02006997","E15"]}}],"responses":{"200":{"description":"Composed area profile","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AreaProfileResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"402":{"$ref":"#/components/responses/PaymentRequired"},"404":{"$ref":"#/components/responses/NotFound"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}},"/v1/compare":{"post":{"security":[{"subscriptionKey":[]},{}],"operationId":"compareAreas","tags":["Composed data"],"summary":"Compare consistent factual metrics for 2–5 same-type identifiers","description":"Returns profiles for postcodes, wards, local authorities or MSOAs. Every identifier in one request must have the same type. It never ranks, scores or recommends an area. The legacy postcodes field remains accepted. Accepts a subscribed Bearer API key with allowance or x402 payment (0.10 USDC on Base).","requestBody":{"required":true,"description":"Between two and five identifiers of one type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareAreasInput"},"examples":{"twoPostcodes":{"value":{"postcodes":["E15 2NE","SE1 7PB"]}},"twoWards":{"value":{"identifiers":["E05013924","E05013925"]}}}}}},"responses":{"200":{"description":"Comparable area profiles","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareAreasResponse"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"402":{"$ref":"#/components/responses/PaymentRequired"},"404":{"$ref":"#/components/responses/NotFound"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}}}}},"components":{"schemas":{"HealthResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"type":"string","const":"ok"},"service":{"type":"string","const":"civic-data-gateway"},"data_mode":{"type":"string","enum":["database","fixture"]},"database_configured":{"type":"boolean"}},"required":["status","service","data_mode","database_configured"],"additionalProperties":false},"ResolveLocationResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"lsoa":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"ward":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"local_authority":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"parliamentary_constituency":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"msoa":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"built_up_area":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"rural_urban_classification":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false}},"required":["postcode","latitude","longitude","lsoa","ward","local_authority","parliamentary_constituency","msoa","built_up_area","rural_urban_classification"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}}},"required":["data","sources"],"additionalProperties":false},"FireDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"radius_from_postcode_centroid"},"radius_metres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"period_start":{"type":"string"},"period_end":{"type":"string"},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"dwelling_fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"incident_categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"annual_series":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["year","incident_count"],"additionalProperties":false}},"first_appliance_response":{"type":"object","properties":{"observations":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]},"p90_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["observations","median_seconds","p90_seconds"],"additionalProperties":false}},"required":["postcode","geographic_basis","radius_metres","years","period_start","period_end","incident_count","fire_count","dwelling_fire_count","incident_categories","annual_series","first_appliance_response"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"CensusDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"lsoa"},"lsoa":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"vintage":{"type":"string"},"population":{"type":"integer","minimum":0,"maximum":9007199254740991},"household_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"age_structure":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["code","label","count"],"additionalProperties":false}},"tenure":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["code","label","count"],"additionalProperties":false}},"car_availability":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["code","label","count"],"additionalProperties":false}},"ethnicity":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["code","label","count"],"additionalProperties":false}},"religion":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["code","label","count"],"additionalProperties":false}},"general_health":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["code","label","count"],"additionalProperties":false}},"disability":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["code","label","count"],"additionalProperties":false}},"accommodation_type":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["code","label","count"],"additionalProperties":false}},"economic_activity":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["code","label","count"],"additionalProperties":false}},"highest_qualification":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["code","label","count"],"additionalProperties":false}}},"required":["postcode","geographic_basis","lsoa","vintage","population","household_count","age_structure","tenure","car_availability","ethnicity","religion","general_health","disability","accommodation_type","economic_activity","highest_qualification"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"CrimeDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"lsoa"},"lsoa":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"classification_system":{"type":"string"},"latest_complete_month":{"type":"string"},"latest_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"latest_12_month_rate_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"population_denominator":{"type":"object","properties":{"status":{"type":"string","enum":["available","missing"]},"value":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"geographic_basis":{"type":"string","const":"lsoa"},"lsoa_code":{"type":"string"},"vintage":{"type":"string"},"source_slug":{"type":"string","const":"ons-census-2021"}},"required":["status","value","geographic_basis","lsoa_code","vintage","source_slug"],"additionalProperties":false},"previous_12_month_total":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"year_over_year_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"monthly_series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["month","count"],"additionalProperties":false}}},"required":["postcode","geographic_basis","lsoa","classification_system","latest_complete_month","latest_12_month_total","latest_12_month_rate_per_1000_residents","population_denominator","previous_12_month_total","year_over_year_change_percent","categories","monthly_series"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"RoadCollisionDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"radius_from_postcode_centroid"},"radius_metres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"period_start":{"type":"string"},"period_end":{"type":"string"},"collision_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fatal":{"type":"integer","minimum":0,"maximum":9007199254740991},"serious":{"type":"integer","minimum":0,"maximum":9007199254740991},"slight":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["postcode","geographic_basis","radius_metres","years","period_start","period_end","collision_count","fatal","serious","slight"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"PlanningConstraintsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"point_intersection_at_postcode_centroid"},"status":{"type":"string","enum":["available","temporarily_unavailable"]},"constraints":{"type":"array","items":{"type":"object","properties":{"entity":{"type":"string"},"dataset":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"reference":{"anyOf":[{"type":"string"},{"type":"null"}]},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}]},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["entity","dataset","name","reference","start_date","end_date"],"additionalProperties":false}},"datasets_checked":{"type":"array","items":{"type":"string"}},"fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["postcode","geographic_basis","status","constraints","datasets_checked","fetched_at"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"PlanningApplicationsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"radius_from_postcode_centroid"},"date_basis":{"type":"string","const":"application_valid_date"},"radius_metres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"period_start":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"period_end":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"matched_application_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"returned_application_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"applications_truncated":{"type":"boolean"},"applications":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"local_planning_authority":{"type":"string"},"reference":{"type":"string"},"application_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"string"},{"type":"null"}]},"decision":{"anyOf":[{"type":"string"},{"type":"null"}]},"valid_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"decision_date":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"last_updated":{"anyOf":[{"type":"string"},{"type":"null"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"site":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"number":{"anyOf":[{"type":"string"},{"type":"null"}]},"street":{"anyOf":[{"type":"string"},{"type":"null"}]},"locality":{"anyOf":[{"type":"string"},{"type":"null"}]},"postcode":{"anyOf":[{"type":"string"},{"type":"null"}]},"uprn":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","number","street","locality","postcode","uprn"],"additionalProperties":false},"application_url":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]},"distance_metres":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","local_planning_authority","reference","application_type","status","decision","valid_date","decision_date","last_updated","description","site","application_url","distance_metres"],"additionalProperties":false}}},"required":["postcode","geographic_basis","date_basis","radius_metres","period_start","period_end","matched_application_count","returned_application_count","applications_truncated","applications"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"PropertySalesResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","enum":["exact_transaction_postcode","radius_from_postcode_centroid"]},"radius_metres":{"type":"integer","minimum":0,"maximum":9007199254740991},"period_start":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"period_end":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"matched_transaction_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"returned_transaction_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"transactions_truncated":{"type":"boolean"},"aggregates":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lower_quartile":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"median":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upper_quartile":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["count","lower_quartile","median","upper_quartile"],"additionalProperties":false},"transactions":{"maxItems":500,"type":"array","items":{"type":"object","properties":{"transaction_id":{"type":"string"},"price":{"type":"number","exclusiveMinimum":0},"transfer_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"postcode":{"type":"string"},"property_type":{"type":"string","enum":["detached","semi-detached","terraced","flat-maisonette","other"]},"new_build":{"type":"boolean"},"tenure":{"type":"string","enum":["freehold","leasehold","other"]},"address":{"type":"object","properties":{"paon":{"anyOf":[{"type":"string"},{"type":"null"}]},"saon":{"anyOf":[{"type":"string"},{"type":"null"}]},"street":{"anyOf":[{"type":"string"},{"type":"null"}]},"locality":{"anyOf":[{"type":"string"},{"type":"null"}]},"town_city":{"anyOf":[{"type":"string"},{"type":"null"}]},"district":{"anyOf":[{"type":"string"},{"type":"null"}]},"county":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["paon","saon","street","locality","town_city","district","county"],"additionalProperties":false},"category":{"type":"string","enum":["standard","additional"]},"distance_metres":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["transaction_id","price","transfer_date","postcode","property_type","new_build","tenure","address","category","distance_metres"],"additionalProperties":false}},"borough_hpi":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"area":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"average_price":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"index":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"monthly_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"sales_volume":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"breakdowns":{"type":"array","items":{"type":"object","properties":{"dimension":{"type":"string","enum":["property_type","buyer_status","funding_status","property_status"]},"category":{"type":"string"},"average_price":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"index":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"monthly_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["dimension","category","average_price","index","monthly_change_percent","annual_change_percent"],"additionalProperties":false}}},"required":["month","average_price","index","monthly_change_percent","annual_change_percent","sales_volume","breakdowns"],"additionalProperties":false}}},"required":["status","area","series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"temporarily_unavailable"}},"required":["status"],"additionalProperties":false}]}},"required":["postcode","geographic_basis","radius_metres","period_start","period_end","matched_transaction_count","returned_transaction_count","transactions_truncated","aggregates","transactions","borough_hpi"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"NearbyResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"category":{"type":"string","enum":["food_hygiene","school","care_provider","gp_practice","pharmacy","station","bus_stop","dentist","cycle_hire","open_space"]},"category_name":{"type":"string"},"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"radius_from_postcode_centroid"},"radius_metres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"matched_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"returned_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"results_truncated":{"type":"boolean"},"results":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"anyOf":[{"type":"string"},{"type":"null"}]},"address":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"string"}},"postcode":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["lines","postcode"],"additionalProperties":false},"distance_metres":{"type":"integer","minimum":0,"maximum":9007199254740991},"facts":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}},"required":["id","name","type","address","distance_metres","facts"],"additionalProperties":false}}},"required":["category","category_name","postcode","geographic_basis","radius_metres","matched_count","returned_count","results_truncated","results"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false,"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"type":"array","items":{"$ref":"#/$defs/__schema0"}},{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"$ref":"#/$defs/__schema0"}}]}}},"SourceInfoResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"attribution":{"anyOf":[{"type":"string"},{"type":"null"}]},"update_frequency":{"type":"string"},"geographic_coverage":{"type":"string"},"enabled":{"type":"boolean"},"source_kind":{"type":"string","enum":["imported","live_query"]},"latest_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_successful_import":{"anyOf":[{"type":"string"},{"type":"null"}]},"upstream_checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_successful_upstream_response_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"methodology_url":{"type":"string"}},"required":["slug","name","publisher","source_url","licence_name","licence_url","attribution","update_frequency","geographic_coverage","enabled","source_kind","latest_version","last_successful_import","upstream_checked_at","last_successful_upstream_response_at","methodology_url"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"BoroughListResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"boroughs":{"type":"array","items":{"type":"object","properties":{"borough":{"type":"object","properties":{"code":{"type":"string","pattern":"^E090000[0-9]{2}$"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["code","name","slug"],"additionalProperties":false},"geography":{"type":"object","properties":{"live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"ward_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["live_postcode_count","lsoa_count","ward_count"],"additionalProperties":false},"census":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"population":{"type":"integer","minimum":0,"maximum":9007199254740991},"household_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"vintage":{"type":"string"},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"geographic_basis":{"type":"string","enum":["sum_of_lsoa_counts","sum_of_best_fit_lsoa_counts"]}},"required":["status","population","household_count","vintage","lsoa_count","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"fire":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"dwelling_fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_incidents_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"incident_categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"annual_series":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["year","incident_count"],"additionalProperties":false}},"first_appliance_response":{"type":"object","properties":{"observations":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]},"p90_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["observations","median_seconds","p90_seconds"],"additionalProperties":false}},"required":["status","period_start","period_end","years","incident_count","fire_count","dwelling_fire_count","annual_incidents_per_1000_residents","incident_categories","annual_series","first_appliance_response"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"crime":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"classification_system":{"type":"string"},"latest_complete_month":{"type":"string"},"latest_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"previous_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"year_over_year_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"latest_12_month_rate_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"lsoa_count_with_data":{"type":"integer","minimum":0,"maximum":9007199254740991},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"monthly_series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["month","count"],"additionalProperties":false}}},"required":["status","classification_system","latest_complete_month","latest_12_month_total","previous_12_month_total","year_over_year_change_percent","latest_12_month_rate_per_1000_residents","lsoa_count_with_data","categories","monthly_series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"not_covered"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false}]},"roads":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"collision_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fatal":{"type":"integer","minimum":0,"maximum":9007199254740991},"serious":{"type":"integer","minimum":0,"maximum":9007199254740991},"slight":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_collisions_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"geographic_basis":{"type":"string","const":"collision_lsoa_with_nearest_postcode_fallback"}},"required":["status","period_start","period_end","years","collision_count","fatal","serious","slight","annual_collisions_per_1000_residents","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"property":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"latest_month":{"type":"string"},"average_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"index":{"anyOf":[{"type":"number"},{"type":"null"}]},"monthly_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"sales_volume":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"average_price":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"index":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"monthly_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"sales_volume":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"breakdowns":{"type":"array","items":{"type":"object","properties":{"dimension":{"type":"string","enum":["property_type","buyer_status","funding_status","property_status"]},"category":{"type":"string"},"average_price":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"index":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"monthly_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["dimension","category","average_price","index","monthly_change_percent","annual_change_percent"],"additionalProperties":false}}},"required":["month","average_price","index","monthly_change_percent","annual_change_percent","sales_volume","breakdowns"],"additionalProperties":false}}},"required":["status","latest_month","average_price","index","monthly_change_percent","annual_change_percent","sales_volume","series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"rents":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"latest_month":{"type":"string"},"average_rent":{"type":"number","exclusiveMinimum":0},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"prms":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"rent_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mean":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"lower_quartile":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"median":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"upper_quartile":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]}},"required":["status","period_start","period_end","rent_count","mean","lower_quartile","median","upper_quartile"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]}},"required":["status","latest_month","average_rent","annual_change_percent","prms"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"generated_at":{"type":"string"}},"required":["borough","geography","census","fire","crime","roads","property","rents","generated_at"],"additionalProperties":false}},"generated_at":{"type":"string"},"comparison_basis":{"type":"object","properties":{"crime":{"type":"string","const":"latest_12_month_rate_per_1000_residents"},"fire":{"type":"string","const":"annual_incidents_per_1000_residents"},"roads":{"type":"string","const":"annual_collisions_per_1000_residents"}},"required":["crime","fire","roads"],"additionalProperties":false}},"required":["boroughs","generated_at","comparison_basis"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"BoroughProfileResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"borough":{"type":"object","properties":{"code":{"type":"string","pattern":"^E090000[0-9]{2}$"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["code","name","slug"],"additionalProperties":false},"geography":{"type":"object","properties":{"live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"ward_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["live_postcode_count","lsoa_count","ward_count"],"additionalProperties":false},"census":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"population":{"type":"integer","minimum":0,"maximum":9007199254740991},"household_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"vintage":{"type":"string"},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"geographic_basis":{"type":"string","enum":["sum_of_lsoa_counts","sum_of_best_fit_lsoa_counts"]}},"required":["status","population","household_count","vintage","lsoa_count","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"fire":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"dwelling_fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_incidents_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"incident_categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"annual_series":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["year","incident_count"],"additionalProperties":false}},"first_appliance_response":{"type":"object","properties":{"observations":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]},"p90_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["observations","median_seconds","p90_seconds"],"additionalProperties":false}},"required":["status","period_start","period_end","years","incident_count","fire_count","dwelling_fire_count","annual_incidents_per_1000_residents","incident_categories","annual_series","first_appliance_response"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"crime":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"classification_system":{"type":"string"},"latest_complete_month":{"type":"string"},"latest_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"previous_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"year_over_year_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"latest_12_month_rate_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"lsoa_count_with_data":{"type":"integer","minimum":0,"maximum":9007199254740991},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"monthly_series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["month","count"],"additionalProperties":false}}},"required":["status","classification_system","latest_complete_month","latest_12_month_total","previous_12_month_total","year_over_year_change_percent","latest_12_month_rate_per_1000_residents","lsoa_count_with_data","categories","monthly_series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"not_covered"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false}]},"roads":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"collision_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fatal":{"type":"integer","minimum":0,"maximum":9007199254740991},"serious":{"type":"integer","minimum":0,"maximum":9007199254740991},"slight":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_collisions_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"geographic_basis":{"type":"string","const":"collision_lsoa_with_nearest_postcode_fallback"}},"required":["status","period_start","period_end","years","collision_count","fatal","serious","slight","annual_collisions_per_1000_residents","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"property":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"latest_month":{"type":"string"},"average_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"index":{"anyOf":[{"type":"number"},{"type":"null"}]},"monthly_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"sales_volume":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"average_price":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"index":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"monthly_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"sales_volume":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"breakdowns":{"type":"array","items":{"type":"object","properties":{"dimension":{"type":"string","enum":["property_type","buyer_status","funding_status","property_status"]},"category":{"type":"string"},"average_price":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"index":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"monthly_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["dimension","category","average_price","index","monthly_change_percent","annual_change_percent"],"additionalProperties":false}}},"required":["month","average_price","index","monthly_change_percent","annual_change_percent","sales_volume","breakdowns"],"additionalProperties":false}}},"required":["status","latest_month","average_price","index","monthly_change_percent","annual_change_percent","sales_volume","series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"rents":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"latest_month":{"type":"string"},"average_rent":{"type":"number","exclusiveMinimum":0},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"prms":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"rent_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mean":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"lower_quartile":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"median":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"upper_quartile":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]}},"required":["status","period_start","period_end","rent_count","mean","lower_quartile","median","upper_quartile"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]}},"required":["status","latest_month","average_rent","annual_change_percent","prms"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"generated_at":{"type":"string"}},"required":["borough","geography","census","fire","crime","roads","property","rents","generated_at"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"GeographyListResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"geographies":{"type":"array","items":{"type":"object","properties":{"identifier":{"type":"object","properties":{"type":{"type":"string","enum":["postcode","ward","local_authority","msoa","postcode_district"]},"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"},"slug":{"type":"string"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","code","name","source_version","slug","parent"],"additionalProperties":false},"representative_point":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"basis":{"type":"string","const":"mean_of_live_postcode_centroids"}},"required":["latitude","longitude","basis"],"additionalProperties":false},"geography":{"type":"object","properties":{"live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lsoa_assignment":{"type":"string","const":"modal_live_postcode_membership"},"ward_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"boroughs":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"live_postcode_share":{"type":"number","minimum":0,"maximum":1}},"required":["code","name","live_postcode_share"],"additionalProperties":false}},"coverage":{"type":"object","properties":{"status":{"type":"string","enum":["complete","partial"]},"london_live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"total_live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["status","london_live_postcode_count","total_live_postcode_count"],"additionalProperties":false}},"required":["live_postcode_count","lsoa_count","lsoa_assignment"],"additionalProperties":false},"census":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"population":{"type":"integer","minimum":0,"maximum":9007199254740991},"household_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"vintage":{"type":"string"},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"geographic_basis":{"type":"string","enum":["sum_of_lsoa_counts","sum_of_best_fit_lsoa_counts"]}},"required":["status","population","household_count","vintage","lsoa_count","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"fire":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"dwelling_fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_incidents_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"incident_categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"annual_series":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["year","incident_count"],"additionalProperties":false}},"first_appliance_response":{"type":"object","properties":{"observations":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]},"p90_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["observations","median_seconds","p90_seconds"],"additionalProperties":false}},"required":["status","period_start","period_end","years","incident_count","fire_count","dwelling_fire_count","annual_incidents_per_1000_residents","incident_categories","annual_series","first_appliance_response"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"crime":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"classification_system":{"type":"string"},"latest_complete_month":{"type":"string"},"latest_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"previous_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"year_over_year_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"latest_12_month_rate_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"lsoa_count_with_data":{"type":"integer","minimum":0,"maximum":9007199254740991},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"monthly_series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["month","count"],"additionalProperties":false}}},"required":["status","classification_system","latest_complete_month","latest_12_month_total","previous_12_month_total","year_over_year_change_percent","latest_12_month_rate_per_1000_residents","lsoa_count_with_data","categories","monthly_series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"not_covered"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false}]},"roads":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"collision_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fatal":{"type":"integer","minimum":0,"maximum":9007199254740991},"serious":{"type":"integer","minimum":0,"maximum":9007199254740991},"slight":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_collisions_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"geographic_basis":{"type":"string","const":"collision_lsoa_best_fit_assignment"}},"required":["status","period_start","period_end","years","collision_count","fatal","serious","slight","annual_collisions_per_1000_residents","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"property":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"sale_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"lower_quartile_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"upper_quartile_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"period_start":{"type":"string"},"period_end":{"type":"string"},"geographic_basis":{"type":"string","enum":["sale_postcode_current_ward","sale_postcode_current_geography","sale_postcode_district"]}},"required":["status","sale_count","median_price","lower_quartile_price","upper_quartile_price","period_start","period_end","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"planning":{"type":"object","properties":{"status":{"type":"string","const":"not_applicable"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false},"meta":{"type":"object","properties":{"generated_at":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}}},"required":["generated_at","sources"],"additionalProperties":false}},"required":["identifier","representative_point","geography","census","fire","crime","roads","property","planning","meta"],"additionalProperties":false}},"generated_at":{"type":"string"},"comparison_basis":{"type":"object","properties":{"crime":{"type":"string","const":"latest_12_month_rate_per_1000_residents"},"fire":{"type":"string","const":"annual_incidents_per_1000_residents"},"roads":{"type":"string","const":"annual_collisions_per_1000_residents"},"property":{"type":"string","const":"median_sale_price_latest_12_months"}},"required":["crime","fire","roads","property"],"additionalProperties":false}},"required":["geographies","generated_at","comparison_basis"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"GeographyProfileResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"identifier":{"type":"object","properties":{"type":{"type":"string","enum":["postcode","ward","local_authority","msoa","postcode_district"]},"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"},"slug":{"type":"string"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","code","name","source_version","slug","parent"],"additionalProperties":false},"representative_point":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"basis":{"type":"string","const":"mean_of_live_postcode_centroids"}},"required":["latitude","longitude","basis"],"additionalProperties":false},"geography":{"type":"object","properties":{"live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lsoa_assignment":{"type":"string","const":"modal_live_postcode_membership"},"ward_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"boroughs":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"live_postcode_share":{"type":"number","minimum":0,"maximum":1}},"required":["code","name","live_postcode_share"],"additionalProperties":false}},"coverage":{"type":"object","properties":{"status":{"type":"string","enum":["complete","partial"]},"london_live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"total_live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["status","london_live_postcode_count","total_live_postcode_count"],"additionalProperties":false}},"required":["live_postcode_count","lsoa_count","lsoa_assignment"],"additionalProperties":false},"census":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"population":{"type":"integer","minimum":0,"maximum":9007199254740991},"household_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"vintage":{"type":"string"},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"geographic_basis":{"type":"string","enum":["sum_of_lsoa_counts","sum_of_best_fit_lsoa_counts"]}},"required":["status","population","household_count","vintage","lsoa_count","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"fire":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"dwelling_fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_incidents_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"incident_categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"annual_series":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["year","incident_count"],"additionalProperties":false}},"first_appliance_response":{"type":"object","properties":{"observations":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]},"p90_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["observations","median_seconds","p90_seconds"],"additionalProperties":false}},"required":["status","period_start","period_end","years","incident_count","fire_count","dwelling_fire_count","annual_incidents_per_1000_residents","incident_categories","annual_series","first_appliance_response"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"crime":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"classification_system":{"type":"string"},"latest_complete_month":{"type":"string"},"latest_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"previous_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"year_over_year_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"latest_12_month_rate_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"lsoa_count_with_data":{"type":"integer","minimum":0,"maximum":9007199254740991},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"monthly_series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["month","count"],"additionalProperties":false}}},"required":["status","classification_system","latest_complete_month","latest_12_month_total","previous_12_month_total","year_over_year_change_percent","latest_12_month_rate_per_1000_residents","lsoa_count_with_data","categories","monthly_series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"not_covered"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false}]},"roads":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"collision_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fatal":{"type":"integer","minimum":0,"maximum":9007199254740991},"serious":{"type":"integer","minimum":0,"maximum":9007199254740991},"slight":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_collisions_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"geographic_basis":{"type":"string","const":"collision_lsoa_best_fit_assignment"}},"required":["status","period_start","period_end","years","collision_count","fatal","serious","slight","annual_collisions_per_1000_residents","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"property":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"sale_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"lower_quartile_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"upper_quartile_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"period_start":{"type":"string"},"period_end":{"type":"string"},"geographic_basis":{"type":"string","enum":["sale_postcode_current_ward","sale_postcode_current_geography","sale_postcode_district"]}},"required":["status","sale_count","median_price","lower_quartile_price","upper_quartile_price","period_start","period_end","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"planning":{"type":"object","properties":{"status":{"type":"string","const":"not_applicable"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false},"meta":{"type":"object","properties":{"generated_at":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}}},"required":["generated_at","sources"],"additionalProperties":false}},"required":["identifier","representative_point","geography","census","fire","crime","roads","property","planning","meta"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}},"generated_at":{"type":"string"}},"required":["data","sources","notices","generated_at"],"additionalProperties":false},"AreaProfileResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"anyOf":[{"type":"object","properties":{"location":{"type":"object","properties":{"postcode":{"type":"string"},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"lsoa":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"ward":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"local_authority":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"parliamentary_constituency":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"msoa":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"built_up_area":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"rural_urban_classification":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false}},"required":["postcode","latitude","longitude","lsoa","ward","local_authority","parliamentary_constituency","msoa","built_up_area","rural_urban_classification"],"additionalProperties":false},"fire":{"anyOf":[{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"radius_from_postcode_centroid"},"radius_metres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"period_start":{"type":"string"},"period_end":{"type":"string"},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"dwelling_fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"incident_categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"annual_series":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["year","incident_count"],"additionalProperties":false}},"first_appliance_response":{"type":"object","properties":{"observations":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]},"p90_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["observations","median_seconds","p90_seconds"],"additionalProperties":false}},"required":["postcode","geographic_basis","radius_metres","years","period_start","period_end","incident_count","fire_count","dwelling_fire_count","incident_categories","annual_series","first_appliance_response"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"temporarily_unavailable"}},"required":["status"],"additionalProperties":false}]},"crime":{"anyOf":[{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"lsoa"},"lsoa":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"classification_system":{"type":"string"},"latest_complete_month":{"type":"string"},"latest_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"latest_12_month_rate_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"population_denominator":{"type":"object","properties":{"status":{"type":"string","enum":["available","missing"]},"value":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"geographic_basis":{"type":"string","const":"lsoa"},"lsoa_code":{"type":"string"},"vintage":{"type":"string"},"source_slug":{"type":"string","const":"ons-census-2021"}},"required":["status","value","geographic_basis","lsoa_code","vintage","source_slug"],"additionalProperties":false},"previous_12_month_total":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"year_over_year_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"monthly_series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["month","count"],"additionalProperties":false}}},"required":["postcode","geographic_basis","lsoa","classification_system","latest_complete_month","latest_12_month_total","latest_12_month_rate_per_1000_residents","population_denominator","previous_12_month_total","year_over_year_change_percent","categories","monthly_series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"temporarily_unavailable"}},"required":["status"],"additionalProperties":false}]},"roads":{"anyOf":[{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"radius_from_postcode_centroid"},"radius_metres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"period_start":{"type":"string"},"period_end":{"type":"string"},"collision_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fatal":{"type":"integer","minimum":0,"maximum":9007199254740991},"serious":{"type":"integer","minimum":0,"maximum":9007199254740991},"slight":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["postcode","geographic_basis","radius_metres","years","period_start","period_end","collision_count","fatal","serious","slight"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"temporarily_unavailable"}},"required":["status"],"additionalProperties":false}]},"planning":{"anyOf":[{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"point_intersection_at_postcode_centroid"},"status":{"type":"string","enum":["available","temporarily_unavailable"]},"constraints":{"type":"array","items":{"type":"object","properties":{"entity":{"type":"string"},"dataset":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"reference":{"anyOf":[{"type":"string"},{"type":"null"}]},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}]},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["entity","dataset","name","reference","start_date","end_date"],"additionalProperties":false}},"datasets_checked":{"type":"array","items":{"type":"string"}},"fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["postcode","geographic_basis","status","constraints","datasets_checked","fetched_at"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"temporarily_unavailable"}},"required":["status"],"additionalProperties":false}]},"meta":{"type":"object","properties":{"generated_at":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}}},"required":["generated_at","sources"],"additionalProperties":false}},"required":["location","fire","crime","roads","planning","meta"],"additionalProperties":false},{"type":"object","properties":{"identifier":{"type":"object","properties":{"type":{"type":"string","enum":["postcode","ward","local_authority","msoa","postcode_district"]},"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"},"slug":{"type":"string"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","code","name","source_version"],"additionalProperties":false},"representative_point":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"basis":{"type":"string","const":"mean_of_live_postcode_centroids"}},"required":["latitude","longitude","basis"],"additionalProperties":false},"geography":{"type":"object","properties":{"live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lsoa_assignment":{"type":"string","const":"modal_live_postcode_membership"},"ward_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"boroughs":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"live_postcode_share":{"type":"number","minimum":0,"maximum":1}},"required":["code","name","live_postcode_share"],"additionalProperties":false}},"coverage":{"type":"object","properties":{"status":{"type":"string","enum":["complete","partial"]},"london_live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"total_live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["status","london_live_postcode_count","total_live_postcode_count"],"additionalProperties":false}},"required":["live_postcode_count","lsoa_count","lsoa_assignment"],"additionalProperties":false},"census":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"population":{"type":"integer","minimum":0,"maximum":9007199254740991},"household_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"vintage":{"type":"string"},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"geographic_basis":{"type":"string","enum":["sum_of_lsoa_counts","sum_of_best_fit_lsoa_counts"]}},"required":["status","population","household_count","vintage","lsoa_count","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"fire":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"dwelling_fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_incidents_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"incident_categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"annual_series":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["year","incident_count"],"additionalProperties":false}},"first_appliance_response":{"type":"object","properties":{"observations":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]},"p90_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["observations","median_seconds","p90_seconds"],"additionalProperties":false}},"required":["status","period_start","period_end","years","incident_count","fire_count","dwelling_fire_count","annual_incidents_per_1000_residents","incident_categories","annual_series","first_appliance_response"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"crime":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"classification_system":{"type":"string"},"latest_complete_month":{"type":"string"},"latest_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"previous_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"year_over_year_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"latest_12_month_rate_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"lsoa_count_with_data":{"type":"integer","minimum":0,"maximum":9007199254740991},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"monthly_series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["month","count"],"additionalProperties":false}}},"required":["status","classification_system","latest_complete_month","latest_12_month_total","previous_12_month_total","year_over_year_change_percent","latest_12_month_rate_per_1000_residents","lsoa_count_with_data","categories","monthly_series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"not_covered"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false}]},"roads":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"collision_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fatal":{"type":"integer","minimum":0,"maximum":9007199254740991},"serious":{"type":"integer","minimum":0,"maximum":9007199254740991},"slight":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_collisions_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"geographic_basis":{"type":"string","const":"collision_lsoa_best_fit_assignment"}},"required":["status","period_start","period_end","years","collision_count","fatal","serious","slight","annual_collisions_per_1000_residents","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"property":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"sale_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"lower_quartile_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"upper_quartile_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"period_start":{"type":"string"},"period_end":{"type":"string"},"geographic_basis":{"type":"string","enum":["sale_postcode_current_ward","sale_postcode_current_geography","sale_postcode_district"]}},"required":["status","sale_count","median_price","lower_quartile_price","upper_quartile_price","period_start","period_end","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"planning":{"type":"object","properties":{"status":{"type":"string","const":"not_applicable"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false},"meta":{"type":"object","properties":{"generated_at":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}}},"required":["generated_at","sources"],"additionalProperties":false}},"required":["identifier","representative_point","geography","census","fire","crime","roads","property","planning","meta"],"additionalProperties":false}]}},"required":["data"],"additionalProperties":false},"CompareAreasInput":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"identifiers":{"minItems":2,"maxItems":5,"type":"array","items":{"type":"string"}},"postcodes":{"minItems":2,"maxItems":5,"type":"array","items":{"type":"string"}}},"additionalProperties":false},"CompareAreasResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"identifier_type":{"type":"string","enum":["postcode","ward","local_authority","msoa","postcode_district"]},"areas":{"minItems":2,"maxItems":5,"type":"array","items":{"anyOf":[{"type":"object","properties":{"location":{"type":"object","properties":{"postcode":{"type":"string"},"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"lsoa":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"ward":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"local_authority":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"parliamentary_constituency":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"msoa":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"built_up_area":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false},"rural_urban_classification":{"type":"object","properties":{"code":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"}},"required":["code","name","source_version"],"additionalProperties":false}},"required":["postcode","latitude","longitude","lsoa","ward","local_authority","parliamentary_constituency","msoa","built_up_area","rural_urban_classification"],"additionalProperties":false},"fire":{"anyOf":[{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"radius_from_postcode_centroid"},"radius_metres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"period_start":{"type":"string"},"period_end":{"type":"string"},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"dwelling_fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"incident_categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"annual_series":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["year","incident_count"],"additionalProperties":false}},"first_appliance_response":{"type":"object","properties":{"observations":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]},"p90_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["observations","median_seconds","p90_seconds"],"additionalProperties":false}},"required":["postcode","geographic_basis","radius_metres","years","period_start","period_end","incident_count","fire_count","dwelling_fire_count","incident_categories","annual_series","first_appliance_response"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"temporarily_unavailable"}},"required":["status"],"additionalProperties":false}]},"crime":{"anyOf":[{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"lsoa"},"lsoa":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"classification_system":{"type":"string"},"latest_complete_month":{"type":"string"},"latest_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"latest_12_month_rate_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"population_denominator":{"type":"object","properties":{"status":{"type":"string","enum":["available","missing"]},"value":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"geographic_basis":{"type":"string","const":"lsoa"},"lsoa_code":{"type":"string"},"vintage":{"type":"string"},"source_slug":{"type":"string","const":"ons-census-2021"}},"required":["status","value","geographic_basis","lsoa_code","vintage","source_slug"],"additionalProperties":false},"previous_12_month_total":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"year_over_year_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"monthly_series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["month","count"],"additionalProperties":false}}},"required":["postcode","geographic_basis","lsoa","classification_system","latest_complete_month","latest_12_month_total","latest_12_month_rate_per_1000_residents","population_denominator","previous_12_month_total","year_over_year_change_percent","categories","monthly_series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"temporarily_unavailable"}},"required":["status"],"additionalProperties":false}]},"roads":{"anyOf":[{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"radius_from_postcode_centroid"},"radius_metres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"period_start":{"type":"string"},"period_end":{"type":"string"},"collision_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fatal":{"type":"integer","minimum":0,"maximum":9007199254740991},"serious":{"type":"integer","minimum":0,"maximum":9007199254740991},"slight":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["postcode","geographic_basis","radius_metres","years","period_start","period_end","collision_count","fatal","serious","slight"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"temporarily_unavailable"}},"required":["status"],"additionalProperties":false}]},"planning":{"anyOf":[{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"point_intersection_at_postcode_centroid"},"status":{"type":"string","enum":["available","temporarily_unavailable"]},"constraints":{"type":"array","items":{"type":"object","properties":{"entity":{"type":"string"},"dataset":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"reference":{"anyOf":[{"type":"string"},{"type":"null"}]},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}]},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["entity","dataset","name","reference","start_date","end_date"],"additionalProperties":false}},"datasets_checked":{"type":"array","items":{"type":"string"}},"fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["postcode","geographic_basis","status","constraints","datasets_checked","fetched_at"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"temporarily_unavailable"}},"required":["status"],"additionalProperties":false}]},"meta":{"type":"object","properties":{"generated_at":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}}},"required":["generated_at","sources"],"additionalProperties":false}},"required":["location","fire","crime","roads","planning","meta"],"additionalProperties":false},{"type":"object","properties":{"identifier":{"type":"object","properties":{"type":{"type":"string","enum":["postcode","ward","local_authority","msoa","postcode_district"]},"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"},"slug":{"type":"string"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","code","name","source_version"],"additionalProperties":false},"representative_point":{"type":"object","properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"basis":{"type":"string","const":"mean_of_live_postcode_centroids"}},"required":["latitude","longitude","basis"],"additionalProperties":false},"geography":{"type":"object","properties":{"live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lsoa_assignment":{"type":"string","const":"modal_live_postcode_membership"},"ward_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"boroughs":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"live_postcode_share":{"type":"number","minimum":0,"maximum":1}},"required":["code","name","live_postcode_share"],"additionalProperties":false}},"coverage":{"type":"object","properties":{"status":{"type":"string","enum":["complete","partial"]},"london_live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"total_live_postcode_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["status","london_live_postcode_count","total_live_postcode_count"],"additionalProperties":false}},"required":["live_postcode_count","lsoa_count","lsoa_assignment"],"additionalProperties":false},"census":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"population":{"type":"integer","minimum":0,"maximum":9007199254740991},"household_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"vintage":{"type":"string"},"lsoa_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"geographic_basis":{"type":"string","enum":["sum_of_lsoa_counts","sum_of_best_fit_lsoa_counts"]}},"required":["status","population","household_count","vintage","lsoa_count","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"fire":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"dwelling_fire_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_incidents_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"incident_categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"annual_series":{"type":"array","items":{"type":"object","properties":{"year":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"incident_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["year","incident_count"],"additionalProperties":false}},"first_appliance_response":{"type":"object","properties":{"observations":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]},"p90_seconds":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["observations","median_seconds","p90_seconds"],"additionalProperties":false}},"required":["status","period_start","period_end","years","incident_count","fire_count","dwelling_fire_count","annual_incidents_per_1000_residents","incident_categories","annual_series","first_appliance_response"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"crime":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"classification_system":{"type":"string"},"latest_complete_month":{"type":"string"},"latest_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"previous_12_month_total":{"type":"integer","minimum":0,"maximum":9007199254740991},"year_over_year_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]},"latest_12_month_rate_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"lsoa_count_with_data":{"type":"integer","minimum":0,"maximum":9007199254740991},"categories":{"type":"array","items":{"type":"object","properties":{"category":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["category","count"],"additionalProperties":false}},"monthly_series":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["month","count"],"additionalProperties":false}}},"required":["status","classification_system","latest_complete_month","latest_12_month_total","previous_12_month_total","year_over_year_change_percent","latest_12_month_rate_per_1000_residents","lsoa_count_with_data","categories","monthly_series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"not_covered"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false}]},"roads":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"years":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"collision_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"fatal":{"type":"integer","minimum":0,"maximum":9007199254740991},"serious":{"type":"integer","minimum":0,"maximum":9007199254740991},"slight":{"type":"integer","minimum":0,"maximum":9007199254740991},"annual_collisions_per_1000_residents":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"geographic_basis":{"type":"string","const":"collision_lsoa_best_fit_assignment"}},"required":["status","period_start","period_end","years","collision_count","fatal","serious","slight","annual_collisions_per_1000_residents","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"property":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"sale_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"lower_quartile_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"upper_quartile_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"period_start":{"type":"string"},"period_end":{"type":"string"},"geographic_basis":{"type":"string","enum":["sale_postcode_current_ward","sale_postcode_current_geography","sale_postcode_district"]}},"required":["status","sale_count","median_price","lower_quartile_price","upper_quartile_price","period_start","period_end","geographic_basis"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"planning":{"type":"object","properties":{"status":{"type":"string","const":"not_applicable"},"reason":{"type":"string"}},"required":["status","reason"],"additionalProperties":false},"meta":{"type":"object","properties":{"generated_at":{"type":"string"},"sources":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}}},"required":["generated_at","sources"],"additionalProperties":false}},"required":["identifier","representative_point","geography","census","fire","crime","roads","property","planning","meta"],"additionalProperties":false}]}},"generated_at":{"type":"string"},"comparison_basis":{"type":"object","properties":{"crime":{"type":"string","const":"latest_12_month_rate_per_1000_residents"}},"required":["crime"],"additionalProperties":false},"notices":{"type":"array","items":{"type":"string"}}},"required":["identifier_type","areas","generated_at","comparison_basis","notices"],"additionalProperties":false}},"required":["data"],"additionalProperties":false},"HistoryResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"dataset":{"type":"string","enum":["fire","crime","road_collisions"]},"identifier":{"type":"object","properties":{"type":{"type":"string","enum":["postcode","ward","local_authority","msoa","postcode_district"]},"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"source_version":{"type":"string"},"slug":{"type":"string"},"parent":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","code","name","source_version"],"additionalProperties":false},"status":{"type":"string","enum":["available","outside_coverage"]},"requested_period":{"type":"object","properties":{"from":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"to":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["from","to"],"additionalProperties":false},"coverage":{"type":"object","properties":{"from":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"to":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["from","to"],"additionalProperties":false},"granularity":{"type":"string","const":"month"},"series":{"type":"array","items":{"type":"object","properties":{"period":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"classification_system":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["period","count","classification_system"],"additionalProperties":false}}},"required":["dataset","identifier","status","requested_period","coverage","granularity","series"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"FloodDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"point_intersection_at_postcode_centroid"},"long_term_risk":{"type":"object","properties":{"status":{"type":"string","enum":["available","not_mapped","temporarily_unavailable"]},"risk_band":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","risk_band"],"additionalProperties":false},"surface_water":{"type":"object","properties":{"present_day":{"type":"object","properties":{"status":{"type":"string","enum":["available","not_mapped","temporarily_unavailable"]},"risk_band":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","risk_band"],"additionalProperties":false},"central_2050s":{"type":"object","properties":{"status":{"type":"string","enum":["available","not_mapped","temporarily_unavailable"]},"risk_band":{"anyOf":[{"type":"string"},{"type":"null"}]},"epoch":{"type":"string","const":"2040-2060"},"allowance":{"type":"string","const":"central"}},"required":["status","risk_band","epoch","allowance"],"additionalProperties":false}},"required":["present_day","central_2050s"],"additionalProperties":false},"current_warnings":{"type":"object","properties":{"status":{"type":"string","enum":["available","temporarily_unavailable"]},"checked_at":{"anyOf":[{"type":"string"},{"type":"null"}]},"warnings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"flood_area_id":{"type":"string"},"description":{"type":"string"},"severity":{"type":"string"},"severity_level":{"type":"integer","minimum":1,"maximum":4},"message":{"anyOf":[{"type":"string"},{"type":"null"}]},"river_or_sea":{"anyOf":[{"type":"string"},{"type":"null"}]},"time_raised":{"anyOf":[{"type":"string"},{"type":"null"}]},"time_message_changed":{"anyOf":[{"type":"string"},{"type":"null"}]},"time_severity_changed":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","flood_area_id","description","severity","severity_level","message","river_or_sea","time_raised","time_message_changed","time_severity_changed"],"additionalProperties":false}}},"required":["status","checked_at","warnings"],"additionalProperties":false}},"required":["postcode","geographic_basis","long_term_risk","surface_water","current_warnings"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"PtalDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"grid_cell_containing_postcode_centroid"},"status":{"type":"string","enum":["available","not_covered"]},"grid_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"ptal":{"anyOf":[{"type":"string"},{"type":"null"}]},"access_index":{"anyOf":[{"type":"number"},{"type":"null"}]},"scenario_year":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["postcode","geographic_basis","status","grid_id","ptal","access_index","scenario_year"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"NoiseDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"point_intersection_at_postcode_centroid"},"mapping_round":{"type":"number","const":4},"analysis_year":{"type":"number","const":2022},"reference_period":{"type":"object","properties":{"from":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"to":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},"required":["from","to"],"additionalProperties":false},"road":{"type":"object","properties":{"lden":{"type":"object","properties":{"status":{"type":"string","enum":["available","not_mapped","dataset_unavailable"]},"band_lower_db":{"anyOf":[{"type":"number"},{"type":"null"}]},"band_upper_db":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["status","band_lower_db","band_upper_db"],"additionalProperties":false},"lnight":{"type":"object","properties":{"status":{"type":"string","enum":["available","not_mapped","dataset_unavailable"]},"band_lower_db":{"anyOf":[{"type":"number"},{"type":"null"}]},"band_upper_db":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["status","band_lower_db","band_upper_db"],"additionalProperties":false}},"required":["lden","lnight"],"additionalProperties":false},"rail":{"type":"object","properties":{"lden":{"type":"object","properties":{"status":{"type":"string","enum":["available","not_mapped","dataset_unavailable"]},"band_lower_db":{"anyOf":[{"type":"number"},{"type":"null"}]},"band_upper_db":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["status","band_lower_db","band_upper_db"],"additionalProperties":false},"lnight":{"type":"object","properties":{"status":{"type":"string","enum":["available","not_mapped","dataset_unavailable"]},"band_lower_db":{"anyOf":[{"type":"number"},{"type":"null"}]},"band_upper_db":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["status","band_lower_db","band_upper_db"],"additionalProperties":false}},"required":["lden","lnight"],"additionalProperties":false},"airport":{"type":"object","properties":{"lden":{"type":"object","properties":{"status":{"type":"string","enum":["available","not_mapped","dataset_unavailable"]},"band_lower_db":{"anyOf":[{"type":"number"},{"type":"null"}]},"band_upper_db":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["status","band_lower_db","band_upper_db"],"additionalProperties":false},"lnight":{"type":"object","properties":{"status":{"type":"string","enum":["available","not_mapped","dataset_unavailable"]},"band_lower_db":{"anyOf":[{"type":"number"},{"type":"null"}]},"band_upper_db":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["status","band_lower_db","band_upper_db"],"additionalProperties":false}},"required":["lden","lnight"],"additionalProperties":false}},"required":["postcode","geographic_basis","mapping_round","analysis_year","reference_period","road","rail","airport"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"AirQualityDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"grid_cell_containing_postcode_centroid"},"status":{"type":"string","enum":["available","not_covered","dataset_unavailable"]},"grid_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"modelled_year":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"no2_ugm3":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"pm25_ugm3":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"pm10_ugm3":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"reference_values":{"type":"array","items":{"type":"object","properties":{"pollutant":{"type":"string","enum":["NO2","PM2.5","PM10"]},"averaging_period":{"type":"string","const":"annual_mean"},"value_ugm3":{"type":"number","exclusiveMinimum":0},"authority":{"type":"string"},"reference_name":{"type":"string"},"source_url":{"type":"string","format":"uri"}},"required":["pollutant","averaging_period","value_ugm3","authority","reference_name","source_url"],"additionalProperties":false}}},"required":["postcode","geographic_basis","status","grid_id","modelled_year","no2_ugm3","pm25_ugm3","pm10_ugm3","reference_values"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"RentStatisticsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"borough":{"type":"object","properties":{"code":{"type":"string","pattern":"^E090000[0-9]{2}$"},"name":{"type":"string"},"slug":{"type":"string"}},"required":["code","name","slug"],"additionalProperties":false},"pipr":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"latest_month":{"type":"string"},"latest":{"minItems":5,"maxItems":5,"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"bedroom_category":{"type":"string","enum":["all","one","two","three","four_plus"]},"average_rent":{"type":"number","exclusiveMinimum":0},"index":{"type":"number","exclusiveMinimum":0},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["month","bedroom_category","average_rent","index","annual_change_percent"],"additionalProperties":false}},"all_bedroom_series":{"maxItems":24,"type":"array","items":{"type":"object","properties":{"month":{"type":"string"},"bedroom_category":{"type":"string","enum":["all","one","two","three","four_plus"]},"average_rent":{"type":"number","exclusiveMinimum":0},"index":{"type":"number","exclusiveMinimum":0},"annual_change_percent":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["month","bedroom_category","average_rent","index","annual_change_percent"],"additionalProperties":false}}},"required":["status","latest_month","latest","all_bedroom_series"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]},"prms":{"anyOf":[{"type":"object","properties":{"status":{"type":"string","const":"available"},"period_start":{"type":"string"},"period_end":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"bedroom_category":{"type":"string","enum":["all","room","studio","one","two","three","four_plus"]},"rent_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"mean":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"lower_quartile":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"median":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"upper_quartile":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]}},"required":["bedroom_category","rent_count","mean","lower_quartile","median","upper_quartile"],"additionalProperties":false}}},"required":["status","period_start","period_end","rows"],"additionalProperties":false},{"type":"object","properties":{"status":{"type":"string","const":"missing"}},"required":["status"],"additionalProperties":false}]}},"required":["borough","pipr","prms"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"EpcDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"query":{"type":"object","properties":{"postcode":{"type":"string"},"building_number":{"anyOf":[{"type":"string"},{"type":"null"}]},"address":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["postcode","building_number","address"],"additionalProperties":false},"match_status":{"type":"string","enum":["exact","single_candidate","multiple_candidates","not_found"]},"certificates":{"type":"array","items":{"type":"object","properties":{"certificate_id":{"type":"string"},"uprn":{"anyOf":[{"type":"string"},{"type":"null"}]},"address":{"type":"object","properties":{"line_1":{"type":"string"},"line_2":{"anyOf":[{"type":"string"},{"type":"null"}]},"line_3":{"anyOf":[{"type":"string"},{"type":"null"}]},"postcode":{"type":"string"}},"required":["line_1","line_2","line_3","postcode"],"additionalProperties":false},"inspection_date":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"lodgement_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"current_energy_rating":{"anyOf":[{"type":"string","enum":["A","B","C","D","E","F","G"]},{"type":"null"}]},"potential_energy_rating":{"anyOf":[{"type":"string","enum":["A","B","C","D","E","F","G"]},{"type":"null"}]},"current_energy_efficiency":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}]},"potential_energy_efficiency":{"anyOf":[{"type":"integer","minimum":0,"maximum":100},{"type":"null"}]},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"built_form":{"anyOf":[{"type":"string"},{"type":"null"}]},"construction_age_band":{"anyOf":[{"type":"string"},{"type":"null"}]},"total_floor_area_sqm":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"total_floor_area_sqft":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}]},"transaction_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"modelled_costs_gbp":{"type":"object","properties":{"heating":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"hot_water":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"lighting":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["heating","hot_water","lighting"],"additionalProperties":false},"co2_emissions_tonnes":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"elements":{"type":"object","properties":{"walls":{"anyOf":[{"type":"string"},{"type":"null"}]},"roof":{"anyOf":[{"type":"string"},{"type":"null"}]},"windows":{"anyOf":[{"type":"string"},{"type":"null"}]},"main_heating":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["walls","roof","windows","main_heating"],"additionalProperties":false},"recommendations":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"description":{"type":"string"},"indicative_cost":{"anyOf":[{"type":"string"},{"type":"null"}]},"typical_saving_gbp":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["sequence","description","indicative_cost","typical_saving_gbp"],"additionalProperties":false}},"is_latest_match":{"type":"boolean"}},"required":["certificate_id","uprn","address","inspection_date","lodgement_date","current_energy_rating","potential_energy_rating","current_energy_efficiency","potential_energy_efficiency","property_type","built_form","construction_age_band","total_floor_area_sqm","total_floor_area_sqft","transaction_type","modelled_costs_gbp","co2_emissions_tonnes","elements","recommendations","is_latest_match"],"additionalProperties":false}}},"required":["query","match_status","certificates"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"PropertyPricePerAreaResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"building_number":{"anyOf":[{"type":"string"},{"type":"null"}]},"geographic_basis":{"type":"string","const":"hmlr_sale_address_joined_to_latest_published_epc"},"radius_metres":{"type":"integer","minimum":0,"maximum":9007199254740991},"period_start":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"period_end":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"matched_sale_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"sales_with_floor_area_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"returned_transaction_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"transactions_truncated":{"type":"boolean"},"price_per_sqm":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lower_quartile":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"median":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upper_quartile":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["count","lower_quartile","median","upper_quartile"],"additionalProperties":false},"price_per_sqft":{"type":"object","properties":{"count":{"type":"integer","minimum":0,"maximum":9007199254740991},"lower_quartile":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"median":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]},"upper_quartile":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["count","lower_quartile","median","upper_quartile"],"additionalProperties":false},"transactions":{"type":"array","items":{"type":"object","properties":{"transaction_id":{"type":"string"},"address":{"type":"string"},"postcode":{"type":"string"},"transfer_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"price":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"total_floor_area_sqm":{"type":"number","exclusiveMinimum":0},"total_floor_area_sqft":{"type":"number","exclusiveMinimum":0},"price_per_sqm":{"type":"number","exclusiveMinimum":0},"price_per_sqft":{"type":"number","exclusiveMinimum":0},"epc_certificate_id":{"type":"string"},"epc_lodgement_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"distance_metres":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}]}},"required":["transaction_id","address","postcode","transfer_date","price","total_floor_area_sqm","total_floor_area_sqft","price_per_sqm","price_per_sqft","epc_certificate_id","epc_lodgement_date","distance_metres"],"additionalProperties":false}}},"required":["postcode","building_number","geographic_basis","radius_metres","period_start","period_end","matched_sale_count","sales_with_floor_area_count","returned_transaction_count","transactions_truncated","price_per_sqm","price_per_sqft","transactions"],"additionalProperties":false},"sources":{"minItems":2,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"DeprivationDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"lsoa_2021"},"lsoa":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"release":{"type":"string","const":"2025"},"index_of_multiple_deprivation":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"decile":{"type":"integer","minimum":1,"maximum":10}},"required":["rank","decile"],"additionalProperties":false},"domains":{"type":"object","properties":{"income":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"decile":{"type":"integer","minimum":1,"maximum":10}},"required":["rank","decile"],"additionalProperties":false},"employment":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"decile":{"type":"integer","minimum":1,"maximum":10}},"required":["rank","decile"],"additionalProperties":false},"education_skills_training":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"decile":{"type":"integer","minimum":1,"maximum":10}},"required":["rank","decile"],"additionalProperties":false},"health_disability":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"decile":{"type":"integer","minimum":1,"maximum":10}},"required":["rank","decile"],"additionalProperties":false},"crime":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"decile":{"type":"integer","minimum":1,"maximum":10}},"required":["rank","decile"],"additionalProperties":false},"barriers_housing_services":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"decile":{"type":"integer","minimum":1,"maximum":10}},"required":["rank","decile"],"additionalProperties":false},"living_environment":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"decile":{"type":"integer","minimum":1,"maximum":10}},"required":["rank","decile"],"additionalProperties":false}},"required":["income","employment","education_skills_training","health_disability","crime","barriers_housing_services","living_environment"],"additionalProperties":false},"supplementary_indices":{"type":"object","properties":{"income_deprivation_children":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"decile":{"type":"integer","minimum":1,"maximum":10}},"required":["rank","decile"],"additionalProperties":false},"income_deprivation_older_people":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"decile":{"type":"integer","minimum":1,"maximum":10}},"required":["rank","decile"],"additionalProperties":false}},"required":["income_deprivation_children","income_deprivation_older_people"],"additionalProperties":false}},"required":["postcode","geographic_basis","lsoa","release","index_of_multiple_deprivation","domains","supplementary_indices"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"CouncilTaxRatesResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"local_authority":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"financial_year":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"basis":{"type":"string","const":"two_adults_main_residence_before_discounts"},"annual_charge_gbp":{"type":"object","properties":{"A":{"type":"number","minimum":0},"B":{"type":"number","minimum":0},"C":{"type":"number","minimum":0},"D":{"type":"number","minimum":0},"E":{"type":"number","minimum":0},"F":{"type":"number","minimum":0},"G":{"type":"number","minimum":0},"H":{"type":"number","minimum":0}},"required":["A","B","C","D","E","F","G","H"],"additionalProperties":false}},"required":["postcode","local_authority","financial_year","basis","annual_charge_gbp"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"ConnectivityDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","enum":["postcode_unit_fixed_and_local_authority_mobile_published_aggregates","local_authority_published_aggregate"]},"local_authority":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"publication":{"type":"string"},"mobile_publication":{"type":"string"},"fixed_coverage_percent":{"type":"object","properties":{"decent":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"superfast":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"gigabit_capable":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"full_fibre":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]}},"required":["decent","superfast","gigabit_capable","full_fibre"],"additionalProperties":false},"fixed_premises_count":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"fixed_postcode_metrics":{"anyOf":[{"type":"object","properties":{"ultrafast_100_mbit":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"ultrafast_300_mbit":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"below_10_mbit_download_or_1_mbit_upload":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"fixed_wireless_access":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]}},"required":["ultrafast_100_mbit","ultrafast_300_mbit","below_10_mbit_download_or_1_mbit_upload","fixed_wireless_access"],"additionalProperties":false},{"type":"null"}]},"mobile_coverage_percent":{"type":"object","properties":{"four_g_geographic_all_operators":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]},"five_g_high_confidence_geographic_at_least_one_operator":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}]}},"required":["four_g_geographic_all_operators","five_g_high_confidence_geographic_at_least_one_operator"],"additionalProperties":false}},"required":["postcode","geographic_basis","local_authority","publication","mobile_publication","fixed_coverage_percent","fixed_premises_count","fixed_postcode_metrics","mobile_coverage_percent"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"TribunalDecisionsResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"building_number":{"anyOf":[{"type":"string"},{"type":"null"}]},"geographic_basis":{"type":"string","const":"published_decision_title_address_match"},"period_start":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"period_end":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"matched_decision_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"decisions":{"type":"array","items":{"type":"object","properties":{"decision_id":{"type":"string"},"title":{"type":"string"},"decision_date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"string","format":"uri"}},"required":["decision_id","title","decision_date","category","subcategory","url"],"additionalProperties":false}}},"required":["postcode","building_number","geographic_basis","period_start","period_end","matched_decision_count","decisions"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"IncomeDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"msoa_2021"},"msoa":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"financial_year_ending":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"measures":{"type":"object","properties":{"total_household_income_unequivalised":{"type":"object","properties":{"estimate_gbp_per_year":{"type":"number","minimum":0},"confidence_interval_95_percent":{"type":"object","properties":{"lower_gbp_per_year":{"type":"number","minimum":0},"upper_gbp_per_year":{"type":"number","minimum":0}},"required":["lower_gbp_per_year","upper_gbp_per_year"],"additionalProperties":false}},"required":["estimate_gbp_per_year","confidence_interval_95_percent"],"additionalProperties":false},"net_household_income_unequivalised":{"type":"object","properties":{"estimate_gbp_per_year":{"type":"number","minimum":0},"confidence_interval_95_percent":{"type":"object","properties":{"lower_gbp_per_year":{"type":"number","minimum":0},"upper_gbp_per_year":{"type":"number","minimum":0}},"required":["lower_gbp_per_year","upper_gbp_per_year"],"additionalProperties":false}},"required":["estimate_gbp_per_year","confidence_interval_95_percent"],"additionalProperties":false},"disposable_income_equivalised_before_housing_costs":{"type":"object","properties":{"estimate_gbp_per_year":{"type":"number","minimum":0},"confidence_interval_95_percent":{"type":"object","properties":{"lower_gbp_per_year":{"type":"number","minimum":0},"upper_gbp_per_year":{"type":"number","minimum":0}},"required":["lower_gbp_per_year","upper_gbp_per_year"],"additionalProperties":false}},"required":["estimate_gbp_per_year","confidence_interval_95_percent"],"additionalProperties":false},"disposable_income_equivalised_after_housing_costs":{"type":"object","properties":{"estimate_gbp_per_year":{"type":"number","minimum":0},"confidence_interval_95_percent":{"type":"object","properties":{"lower_gbp_per_year":{"type":"number","minimum":0},"upper_gbp_per_year":{"type":"number","minimum":0}},"required":["lower_gbp_per_year","upper_gbp_per_year"],"additionalProperties":false}},"required":["estimate_gbp_per_year","confidence_interval_95_percent"],"additionalProperties":false}},"required":["total_household_income_unequivalised","net_household_income_unequivalised","disposable_income_equivalised_before_housing_costs","disposable_income_equivalised_after_housing_costs"],"additionalProperties":false}},"required":["postcode","geographic_basis","msoa","financial_year_ending","measures"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"RadonDataResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"postcode":{"type":"string"},"geographic_basis":{"type":"string","const":"point_intersection_with_indicative_1km_grid"},"radon_potential_class":{"type":"string","enum":["less_than_1_percent","1_to_3_percent","3_to_5_percent","5_to_10_percent","10_to_30_percent","greater_than_30_percent"]},"published_band":{"type":"string"}},"required":["postcode","geographic_basis","radon_potential_class","published_band"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"UprnLocationResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"uprn":{"type":"string","pattern":"^\\d{1,12}$"},"geographic_basis":{"type":"string","const":"os_open_uprn_point"},"location":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"}},"required":["latitude","longitude"],"additionalProperties":false}},"required":["uprn","geographic_basis","location"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}},"notices":{"type":"array","items":{"type":"string"}}},"required":["data","sources","notices"],"additionalProperties":false},"AlertSubscriptionInput":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"postcode":{"type":"string"},"radius_metres":{"default":1000,"type":"integer","minimum":100,"maximum":5000},"watched_datasets":{"minItems":1,"maxItems":2,"type":"array","items":{"type":"string","enum":["planning_applications","flood_warnings"]}},"webhook_url":{"type":"string","format":"uri"}},"required":["postcode","radius_metres","watched_datasets","webhook_url"],"additionalProperties":false},"AlertSubscriptionResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"postcode":{"type":"string"},"radius_metres":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"watched_datasets":{"type":"array","items":{"type":"string","enum":["planning_applications","flood_warnings"]}},"webhook_url":{"type":"string","format":"uri"},"active":{"type":"boolean"},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","postcode","radius_metres","watched_datasets","webhook_url","active","created_at"],"additionalProperties":false},"access":{"type":"object","properties":{"source":{"type":"string","const":"subscription"}},"required":["source"],"additionalProperties":false}},"required":["data","access"],"additionalProperties":false},"AlertDeliveryResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"delivery_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"subscription_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"dataset":{"type":"string","enum":["planning_applications","flood_warnings"]},"event_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"payload":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"delivered_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["delivery_id","subscription_id","dataset","event_at","observed_at","payload","delivered_at"],"additionalProperties":false},"sources":{"minItems":1,"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"publisher":{"type":"string"},"source_url":{"type":"string","format":"uri"},"licence_name":{"type":"string"},"licence_url":{"type":"string","format":"uri"},"as_of":{"type":"string"},"imported_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["slug","name","publisher","source_url","licence_name","licence_url","as_of","imported_at"],"additionalProperties":false}}},"required":["data","sources"],"additionalProperties":false},"ErrorResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"},"links":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","format":"uri"}},"issues":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}}},"required":["code","message","request_id"],"additionalProperties":false}},"required":["error"],"additionalProperties":false},"X402Challenge":{"type":"object","description":"x402 v2 payment requirements; the same document is base64-encoded in the PAYMENT-REQUIRED header.","additionalProperties":true}},"securitySchemes":{"subscriptionKey":{"type":"http","scheme":"bearer","description":"Civic Data subscription API key for composed REST and MCP operations. Only its SHA-256 digest is stored."},"dashboardSession":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Short-lived Supabase Auth session JWT used only by self-service dashboard routes."}},"headers":{"RateLimit":{"description":"IETF RateLimit field: remaining requests (r) and seconds until the window resets (t) for the \"free-anonymous\" policy.","schema":{"type":"string","examples":["\"free-anonymous\";r=49;t=3599"]}},"RateLimit-Policy":{"description":"IETF RateLimit-Policy field: quota (q) and window in seconds (w).","schema":{"type":"string","examples":["\"free-anonymous\";q=50;w=3600"]}},"RateLimit-Limit":{"description":"Requests allowed in the current window.","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying; only sent with HTTP 429.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Unique request identifier. Quote it when reporting a problem.","schema":{"type":"string"}},"X-Civic-Cache":{"description":"Whether the deterministic response was served from the edge cache (\"hit\" or \"miss\").","schema":{"type":"string","enum":["hit","miss"]}},"X-Civic-Error-Code":{"description":"Machine-readable error code mirrored from the body.","schema":{"type":"string"}},"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 payment requirements.","schema":{"type":"string"}}},"responses":{"Unauthorized":{"description":"A valid Civic Data subscription key is required.","headers":{"X-Civic-Error-Code":{"$ref":"#/components/headers/X-Civic-Error-Code"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"BadRequest":{"description":"The postcode syntax or a bounded parameter is invalid (error.code \"invalid_postcode\", \"invalid_input\" or \"invalid_json\").","headers":{"X-Civic-Error-Code":{"$ref":"#/components/headers/X-Civic-Error-Code"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"NotFound":{"description":"The postcode is not present in the loaded directory (error.code \"location_not_found\"), the borough is not a Greater London local authority (error.code \"borough_not_found\") or the path does not exist (error.code \"not_found\", with recovery links).","headers":{"X-Civic-Error-Code":{"$ref":"#/components/headers/X-Civic-Error-Code"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"TooManyRequests":{"description":"The anonymous free quota is exhausted (error.code \"rate_limit_exceeded\"). Wait for Retry-After seconds.","headers":{"RateLimit":{"$ref":"#/components/headers/RateLimit"},"RateLimit-Policy":{"$ref":"#/components/headers/RateLimit-Policy"},"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-Civic-Cache":{"$ref":"#/components/headers/X-Civic-Cache"},"Retry-After":{"$ref":"#/components/headers/Retry-After"},"X-Civic-Error-Code":{"$ref":"#/components/headers/X-Civic-Error-Code"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServiceUnavailable":{"description":"The gateway is not configured for this operation (error.code \"service_not_configured\"), a required imported source has no completed import (error.code \"dataset_unavailable\" or \"context_data_unavailable\"), or a derived profile has not been generated yet.","headers":{"X-Civic-Error-Code":{"$ref":"#/components/headers/X-Civic-Error-Code"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"PaymentRequired":{"description":"x402 payment is required when payments are enabled. Decode the PAYMENT-REQUIRED header, sign the payment and retry with a PAYMENT-SIGNATURE header.","headers":{"PAYMENT-REQUIRED":{"$ref":"#/components/headers/PAYMENT-REQUIRED"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402Challenge"}}}}}}}