Guide
Locate a batch of points
Send the points
Repeat
pointfor each coordinate. This example sends a point in Leeds and another outside UK coverage, asking for local authorities as they were published on 1 June 2025.curl "https://api.ukdataatlas.com/v1/areas:containsBatch?geography=localAuthority&date=2025-06-01"Response200 { "apiVersion": "v1", "atlasRelease": "sha256:da4898229392e8fa52cd5098cf24c52f11abf454b0adcab178c6c82e30032c15", "data": { "date": "2025-06-01", "boundaryRule": "included", "releases": [ { "geography": "localAuthority", "boundaryRelease": "2025-05-uk-bgc-v2", "selection": { "policy": "latest-release-dated-on-or-before", "date": "2025-06-01" }, "boundaryResolution": { "generalisation": "generalised-20m", "toleranceM": 20 }, "geometrySource": { "sourceCrs": "EPSG:4326" } } ], "summary": { "points": 2, "lookups": 2, "matched": 1, "noMatch": 0, "outsideCoverage": 1, "unresolved": 0, "nearBoundary": 0 }, "points": [ { "index": 0, "point": { "lng": -1.5491, "lat": 53.8008 }, "country": { "code": "GB-ENG", "determinedBy": "area-code", "area": "localAuthority/2025-05-uk-bgc-v2/E08000035" }, "results": [ { "geography": "localAuthority", "boundaryRelease": "2025-05-uk-bgc-v2", "status": "matched", "positionalToleranceM": 25.57, "matches": [ { "id": "localAuthority/2025-05-uk-bgc-v2/E08000035", "code": "E08000035", "name": "Leeds", "containment": "interior", "distanceToBoundaryM": 6460.39, "nearBoundary": false } ] } ] }, { "index": 1, "point": { "lng": 1, "lat": 54.5 }, "country": { "code": null, "determinedBy": "country-boundary", "boundaryRelease": "2024-12-uk-bgc" }, "results": [ { "geography": "localAuthority", "status": "outside-coverage", "reason": "outside-uk-boundaries", "matches": [] } ] } ] } }Read every result
Use
points[].indexto join the answer back to your input row. A matched point has an area id and code; anoutside-coveragepoint is still a successful response, with an explanation and no invented area.Keep
summary.outsideCoverage,summary.unresolvedandnearBoundaryin your import report. They tell you how much of your input needs review.Join your data
For matched rows, store the complete area
id, not only its code. The id preserves the geography and boundary release, so a later data request uses the same area vintage as the lookup.You can then request a measure for the matched codes, or keep the point-to-area table as a reusable spatial join. The batch endpoint is capped at 100 points; page your own input into bounded batches.
/areas:containsBatchFind areas for many pointsget/data/{measure-id}Get observations