{"openapi":"3.1.0","info":{"title":"Civic Data API","version":"0.1.0","description":"Normalised, source-backed UK civic data. Release 1 covers London."},"paths":{"/health":{"get":{"summary":"Check gateway health","responses":{"200":{"description":"Gateway is running"}}}},"/v1/resolve/{postcode}":{"get":{"summary":"Resolve a UK postcode to its official statistical geography","parameters":[{"name":"postcode","in":"path","required":true,"schema":{"type":"string","examples":["E15 2NE"]}}],"responses":{"200":{"description":"Resolved location with ONSPD provenance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveLocationResponse"}}}},"400":{"description":"Invalid postcode syntax","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Postcode is not present in the loaded directory","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/fire/{postcode}":{"get":{"summary":"Return LFB incident and appliance-response history around a postcode","parameters":[{"name":"postcode","in":"path","required":true,"schema":{"type":"string","examples":["E15 2NE"]}},{"name":"radius_metres","in":"query","schema":{"type":"integer","minimum":100,"maximum":5000,"default":1000}},{"name":"years","in":"query","schema":{"type":"integer","minimum":1,"maximum":15,"default":5}}],"responses":{"200":{"description":"Historical fire facts with provenance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FireDataResponse"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/crime/{postcode}":{"get":{"summary":"Return LSOA-level monthly recorded-crime facts for a postcode","parameters":[{"name":"postcode","in":"path","required":true,"schema":{"type":"string","examples":["E15 2NE"]}}],"responses":{"200":{"description":"Crime totals, categories, trend and provenance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrimeDataResponse"}}}}}}},"/v1/roads/{postcode}":{"get":{"summary":"Return STATS19 road-collision history around a postcode","parameters":[{"name":"postcode","in":"path","required":true,"schema":{"type":"string","examples":["E15 2NE"]}},{"name":"radius_metres","in":"query","schema":{"type":"integer","minimum":100,"maximum":5000,"default":1000}},{"name":"years","in":"query","schema":{"type":"integer","minimum":1,"maximum":10,"default":5}}],"responses":{"200":{"description":"Collision counts by severity with provenance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoadCollisionDataResponse"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/planning/{postcode}":{"get":{"summary":"Return factual planning designations intersecting a postcode centroid","parameters":[{"name":"postcode","in":"path","required":true,"schema":{"type":"string","examples":["E15 2NE"]}}],"responses":{"200":{"description":"Planning constraints and coverage notices with provenance","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanningConstraintsResponse"}}}}}}},"/v1/sources":{"get":{"summary":"List official datasets, licences, coverage and freshness","responses":{"200":{"description":"Available Civic Data sources","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceInfoResponse"}}}}}}},"/v1/area/{postcode}":{"get":{"summary":"Compose location, fire, crime, roads and planning into one factual profile","parameters":[{"name":"postcode","in":"path","required":true,"schema":{"type":"string","examples":["E15 2NE"]}}],"responses":{"200":{"description":"Composed area profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AreaProfileResponse"}}}},"402":{"description":"x402 payment is required when payments are enabled","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}},"/v1/compare":{"post":{"summary":"Compare consistent factual metrics for 2–5 London postcodes","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareAreasInput"}}}},"responses":{"200":{"description":"Comparable area profiles","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareAreasResponse"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"x402 payment is required when payments are enabled","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 payment requirements","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}}},"components":{"schemas":{"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"}]}},"required":["code","name"],"additionalProperties":false},"ward":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"local_authority":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false}},"required":["postcode","latitude","longitude","lsoa","ward","local_authority"],"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},"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},"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","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},"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"},"update_frequency":{"type":"string"},"geographic_coverage":{"type":"string"},"enabled":{"type":"boolean"},"latest_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_successful_import":{"anyOf":[{"type":"string"},{"type":"null"}]},"methodology_url":{"type":"string"}},"required":["slug","name","publisher","source_url","licence_name","licence_url","update_frequency","geographic_coverage","enabled","latest_version","last_successful_import","methodology_url"],"additionalProperties":false}}},"required":["data"],"additionalProperties":false},"AreaProfileResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"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"}]}},"required":["code","name"],"additionalProperties":false},"ward":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"local_authority":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false}},"required":["postcode","latitude","longitude","lsoa","ward","local_authority"],"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},"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","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}},"required":["data"],"additionalProperties":false},"CompareAreasInput":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"postcodes":{"minItems":2,"maxItems":5,"type":"array","items":{"type":"string"}}},"required":["postcodes"],"additionalProperties":false},"CompareAreasResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"data":{"type":"object","properties":{"areas":{"minItems":2,"maxItems":5,"type":"array","items":{"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"}]}},"required":["code","name"],"additionalProperties":false},"ward":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false},"local_authority":{"type":"object","properties":{"code":{"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","name"],"additionalProperties":false}},"required":["postcode","latitude","longitude","lsoa","ward","local_authority"],"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},"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","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}},"generated_at":{"type":"string"}},"required":["areas","generated_at"],"additionalProperties":false}},"required":["data"],"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"}},"required":["code","message","request_id"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}