How close everyday life is, in real walking and driving time, not metres: a walk, transit and drive rating for every hexagon, the time to the nearest supermarket, school, station or brand, and how much is within 5, 10 and 15 minutes' walk.
Questions this page answers
- How walkable is this spot, and does it need a car?
- Which areas are within 5 minutes' walk of a supermarket?
- How many cafés are within a 10-minute walk?
Walk and drive times are TravelTime's, precomputed from every hexagon people live in, up to 15 minutes (traveltime in source_ids on /v1/catalog/gb, with updated_at, the date they were last loaded); in a country with no times built, every request returns no rows. The Data API never calls TravelTime live: for a longer journey, send a TravelTime catchment's hexagons as cells (Use with the TravelTime API).
Required authentication header. The same application id as the TravelTime API.
Required authentication header.
GET /v1/proximity/cellsOne row per hexagon, or totals over what you send: one row per boundary with group_by=borough, one row for everything with group_by=all. Resolution 9 only; a group_by=all total also takes coarser ids. In the order sent with cells, otherwise by cell id. POST /v1/proximity/cells takes the same fields as JSON, for long cell lists (Long requests).
How good each hexagon is on foot, by public transport and by car, 0 to 100 each, with the walking and driving time in seconds to the 8 essentials behind the walk rating. King's Cross 96 / 100 / 90; Croydon centre 95 / 100 / 90; Bourton-on-the-Water 77 / 32 / 67; a Milton Keynes estate 52 / 21 / 100. Nobody lives on the Cotswolds farmland, so it has no rating.
Request
curl -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" \
"https://data.traveltimeapp.com/v1/proximity/cells?cells=89195da4d8fffff,89194ac2677ffff,89195d48563ffff,89195d88a97ffff,89195d49b53ffff"Shade = ratings.walk52965 hexagons; a hexagon opens its row.
| Hexagoncell | Walk ratingratings.walk | Transit ratingratings.transit | Drive ratingratings.drive | Map |
|---|---|---|---|---|
| 89195da4d8fffff | 96 | 100 | 90 | |
| 89194ac2677ffff | 95 | 100 | 90 | |
| 89195d48563ffff | 77 | 32 | 67 | |
| 89195d88a97ffff | 52 | 21 | 100 | |
| 89195d49b53ffff | — | — | — |
All 5 shown
Response
{
"resolution": 9,
"results": [
{
"cell": "89195da4d8fffff",
"ratings": {
"walk": 96,
"transit": 100,
"drive": 90
},
"walk_s": {
"supermarket": 201,
"school": 367,
"doctor": 201,
"pharmacy": 201,
"post_office": 363,
"park": 344,
"cafe": 201,
"restaurant": 201
},
"drive_s": {
"supermarket": 370,
"school": 370,
"doctor": 370,
"pharmacy": 370,
"post_office": 370,
"park": 370,
"cafe": 370,
"restaurant": 370
}
},
"… 4 more rows"
],
"next_cursor": null
}The 22 hexagons around King's Cross with a supermarket within a 5-minute walk.
Request
curl -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" \
"https://data.traveltimeapp.com/v1/proximity/cells?bbox=51.522,-0.140,51.538,-0.110&within=walk.supermarket:300"Shade = ratings.walk949922 hexagons; a hexagon opens its row.
| Hexagoncell | Walk ratingratings.walk | Transit ratingratings.transit | Drive ratingratings.drive | Map |
|---|---|---|---|---|
| 89194ad3643ffff | 99 | 94 | 100 | |
| 89195da4d03ffff | 99 | 100 | 90 | |
| 89195da4d07ffff | 95 | 100 | 90 | |
| 89195da4d0bffff | 94 | 100 | 90 | |
| 89195da4d17ffff | 98 | 100 | 90 |
5 of 22 shown · the other 17 are in the response, all 22 in the playground
Response
{
"within": "walk.supermarket:300",
"resolution": 9,
"results": [
{
"cell": "89194ad3643ffff",
"ratings": {
"walk": 99,
"transit": 94,
"drive": 100
},
"walk_s": {
"supermarket": 220,
"school": 220,
"doctor": 220,
"pharmacy": 220,
"post_office": 220,
"park": 357,
"cafe": 220,
"restaurant": 220
},
"drive_s": {
"supermarket": 241,
"school": 241,
"doctor": 241,
"pharmacy": 241,
"post_office": 241,
"park": 241,
"cafe": 241,
"restaurant": 241
}
},
"… 21 more rows"
],
"next_cursor": null
}Every condition must hold: a supermarket within 10 minutes' walk, a train station within 5 and a Lidl within 15 minutes' drive. country=gb searches the whole country: 1,257 hexagons, where 572,651 people live (group_by=all gives that total).
Request
curl -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" \
"https://data.traveltimeapp.com/v1/proximity/cells?country=gb&within=walk.supermarket:600,walk.train_station:300,drive.brand:lidl:900"Shade = ratings.walk2498100 hexagons; a hexagon opens its row.
| Hexagoncell | Walk ratingratings.walk | Transit ratingratings.transit | Drive ratingratings.drive | Map |
|---|---|---|---|---|
| 891870d334fffff | 85 | 57 | 84 | |
| 89187460acfffff | 86 | 67 | 87 | |
| 89187468d67ffff | 91 | 61 | 87 | |
| 8918746ea6fffff | 66 | 47 | 84 | |
| 8918746eb53ffff | 86 | 47 | 83 |
5 of the first 100 shown · next_cursor fetches the next page
Response
{
"within": "walk.supermarket:600,walk.train_station:300,drive.brand:lidl:900",
"resolution": 9,
"results": [
{
"cell": "891870d334fffff",
"ratings": {
"walk": 85,
"transit": 57,
"drive": 84
},
"walk_s": {
"supermarket": 235,
"school": 235,
"doctor": 377,
"pharmacy": 472,
"post_office": 472,
"park": 235,
"cafe": 235,
"restaurant": 235,
"train_station": 235
},
"drive_s": {
"supermarket": 207,
"school": 176,
"doctor": 176,
"pharmacy": 207,
"post_office": 207,
"park": 176,
"cafe": 176,
"restaurant": 176,
"brand:lidl": 413
}
},
"… 99 more rows"
],
"next_cursor": "eyJxIjoiNzBjN2JjMDU4ZGEyZTYyZjMzNjNkZTBjIiwiayI6WyI4OTE5MGQ3YjU4M2ZmZmYiXSwiZiI6ImVjMDZlNjE2MGVhNzA3YmQ5Njg5ZTBmZTUwYWNkMDA5In0.ea9bB8n7FIUN75jYraAang"
}From one hexagon at Euston: 5 supermarkets within 5 minutes' walk, 12 within 10 and 59 within 15; gyms 0, 12 and 46; cafés 10, 73 and 273.
Request
curl -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" \
"https://data.traveltimeapp.com/v1/proximity/cells?cells=89195da4d03ffff&include=bands"Shade = ratings.walk99991 hexagon; it opens its row.
| Hexagoncell | Walk ratingratings.walk | Transit ratingratings.transit | Drive ratingratings.drive | Map |
|---|---|---|---|---|
| 89195da4d03ffff | 99 | 100 | 90 |
All 1 shown
Response
{
"resolution": 9,
"results": [
{
"cell": "89195da4d03ffff",
"ratings": {
"walk": 99,
"transit": 100,
"drive": 90
},
"walk_s": {
"supermarket": 237,
"school": 237,
"doctor": 237,
"pharmacy": 237,
"post_office": 237,
"park": 375,
"cafe": 237,
"restaurant": 237
},
"drive_s": {
"supermarket": 424,
"school": 424,
"doctor": 424,
"pharmacy": 424,
"post_office": 424,
"park": 424,
"cafe": 424,
"restaurant": 424
},
"bands": {
"walk": {
"300": {
"category_counts": {
"supermarket": 5,
"cafe": 10,
"pharmacy": 3,
"doctor": 6,
"school": 1,
"gym": 0,
"pub": 6
},
"open_space_m2": 2286,
"largest_area_m2": 2286,
"over_1ha_count": 0,
"over_5ha_count": 0,
"over_20ha_count": 0,
"green_m2": 2598,
"green_share": 0.0276
},
"600": {
"category_counts": {
"supermarket": 12,
"cafe": 73,
"pharmacy": 4,
"doctor": 11,
"school": 5,
"gym": 12,
"pub": 23
},
"open_space_m2": 34702,
"largest_area_m2": 9670,
"over_1ha_count": 0,
"over_5ha_count": 0,
"over_20ha_count": 0,
"green_m2": 46315,
"green_share": 0.0547
},
"900": {
"category_counts": {
"supermarket": 59,
"cafe": 273,
"pharmacy": 24,
"doctor": 74,
"school": 13,
"gym": 46,
"pub": 97
},
"open_space_m2": 263474,
"largest_area_m2": 1175647,
"over_1ha_count": 4,
"over_5ha_count": 1,
"over_20ha_count": 1,
"green_m2": 374594,
"green_share": 0.1047
}
}
}
}
],
"next_cursor": null
}Not a hundred pocket gardens but the big ones: "two parks of 5 ha within 15 minutes" is one check, over_5ha_count of 2 or more. include=open_spaces names them. Euston reaches The Regent's Park (117.6 ha) in 15 minutes; the Milton Keynes estate two over 20 ha, Teardrop Lakes (25.6 ha) in 8; Woodgreen, Godshill Inclosure (140.6 ha) in 7.
Request
curl -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" \
"https://data.traveltimeapp.com/v1/proximity/cells?cells=89195da4d03ffff,89195d88a97ffff,89195956d1bffff&include=bands,open_spaces"Shade = ratings.walk16993 hexagons; a hexagon opens its row.
| Hexagoncell | Walk ratingratings.walk | Transit ratingratings.transit | Drive ratingratings.drive | Map |
|---|---|---|---|---|
| 89195da4d03ffff | 99 | 100 | 90 | |
| 89195d88a97ffff | 52 | 21 | 100 | |
| 89195956d1bffff | 16 | 0 | 56 |
All 3 shown
Response
{
"resolution": 9,
"results": [
{
"cell": "89195da4d03ffff",
"ratings": {
"walk": 99,
"transit": 100,
"drive": 90
},
"walk_s": {
"supermarket": 237,
"school": 237,
"doctor": 237,
"pharmacy": 237,
"post_office": 237,
"park": 375,
"cafe": 237,
"restaurant": 237
},
"drive_s": {
"supermarket": 424,
"school": 424,
"doctor": 424,
"pharmacy": 424,
"post_office": 424,
"park": 424,
"cafe": 424,
"restaurant": 424
},
"bands": {
"walk": {
"300": {
"category_counts": {
"supermarket": 5,
"cafe": 10,
"pharmacy": 3,
"doctor": 6,
"school": 1,
"gym": 0,
"pub": 6
},
"open_space_m2": 2286,
"largest_area_m2": 2286,
"over_1ha_count": 0,
"over_5ha_count": 0,
"over_20ha_count": 0,
"green_m2": 2598,
"green_share": 0.0276
},
"600": {
"category_counts": {
"supermarket": 12,
"cafe": 73,
"pharmacy": 4,
"doctor": 11,
"school": 5,
"gym": 12,
"pub": 23
},
"open_space_m2": 34702,
"largest_area_m2": 9670,
"over_1ha_count": 0,
"over_5ha_count": 0,
"over_20ha_count": 0,
"green_m2": 46315,
"green_share": 0.0547
},
"900": {
"category_counts": {
"supermarket": 59,
"cafe": 273,
"pharmacy": 24,
"doctor": 74,
"school": 13,
"gym": 46,
"pub": 97
},
"open_space_m2": 263474,
"largest_area_m2": 1175647,
"over_1ha_count": 4,
"over_5ha_count": 1,
"over_20ha_count": 1,
"green_m2": 374594,
"green_share": 0.1047
}
}
},
"open_spaces": [
{
"id": "os_gb_c70107ff-da5c-321d-8059-aa8574aadf80",
"name": "The Regent's Park",
"class": "park",
"access": "public",
"area_m2": 1175647,
"reachable_m2": 90434,
"walk_s_from_cell": 878
},
"… 9 more rows"
]
},
"… 2 more rows"
],
"next_cursor": null
}Send the hexagons of a TravelTime catchment and keep those with a supermarket within a 5-minute walk. Of the 8,526 hexagons within 45 minutes of King's Cross by public transport, 1,912 pass; seven of them here, and 4 pass.
Request
curl -X POST -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" -H "Content-Type: application/json" \
-d '{"cells": ["89195da4d03ffff", "89195da4d07ffff", "89195da4d0bffff", "89195da4d0fffff", "89195da4d13ffff", "89195da4d17ffff", "89195da4d1bffff"], "within": "walk.supermarket:300"}' \
"https://data.traveltimeapp.com/v1/proximity/cells"Shade = ratings.walk94997 hexagons; 4 with a row open theirs.
| Hexagoncell | Walk ratingratings.walk | Transit ratingratings.transit | Drive ratingratings.drive | Map |
|---|---|---|---|---|
| 89195da4d03ffff | 99 | 100 | 90 | |
| 89195da4d07ffff | 95 | 100 | 90 | |
| 89195da4d0bffff | 94 | 100 | 90 | |
| 89195da4d17ffff | 98 | 100 | 90 |
All 4 shown
Response
{
"within": "walk.supermarket:300",
"resolution": 9,
"results": [
{
"cell": "89195da4d03ffff",
"ratings": {
"walk": 99,
"transit": 100,
"drive": 90
},
"walk_s": {
"supermarket": 237,
"school": 237,
"doctor": 237,
"pharmacy": 237,
"post_office": 237,
"park": 375,
"cafe": 237,
"restaurant": 237
},
"drive_s": {
"supermarket": 424,
"school": 424,
"doctor": 424,
"pharmacy": 424,
"post_office": 424,
"park": 424,
"cafe": 424,
"restaurant": 424
}
},
"… 3 more rows"
],
"next_cursor": null
}Of the people in each borough of your hexagons, how many live within 15 minutes' walk of a train station. covered_by reports it on totals rows without dropping any hexagon; within would be a sieve. Over the whole 45-minute catchment: 4,413,538 of 6,075,764 people (73%). Here seven of its hexagons, in Barnet and Brent.
Request
curl -X POST -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" -H "Content-Type: application/json" \
-d '{"cells": ["89195da4667ffff", "89195da6247ffff", "89195da730fffff", "89195da42c7ffff", "89195da5c07ffff", "89195daed2bffff", "89195da5e6fffff"], "group_by": "borough", "covered_by": "walk.train_station:900"}' \
"https://data.traveltimeapp.com/v1/proximity/cells"| Boundary nameboundary.name | Boundary typeboundary.type | Cell countcell_count | Peoplepopulation |
|---|---|---|---|
| Barnet | borough | 4 | 3,305 |
| Brent | borough | 3 | 2,189 |
All 2 shown
Response
{
"covered_by": "walk.train_station:900",
"results": [
{
"boundary": {
"id": "gb-barnet",
"name": "Barnet",
"type": "borough"
},
"cell_count": 4,
"population": 3305,
"ratings": {
"walk": 83,
"transit": 69,
"drive": 97
},
"walk_s": {
"supermarket": 504,
"school": 369,
"doctor": 479,
"pharmacy": 536,
"post_office": 543,
"park": 670,
"cafe": 503,
"restaurant": 457
},
"drive_s": {
"supermarket": 279,
"school": 271,
"doctor": 269,
"pharmacy": 288,
"post_office": 293,
"park": 306,
"cafe": 275,
"restaurant": 269
},
"covered_population": 1349,
"covered_share": 0.4082
},
"… 1 more row"
],
"next_cursor": null,
"rollup": {
"cell_count": "sum",
"population": "sum",
"ratings": "population_weighted_mean",
"walk_s": "population_weighted_mean",
"drive_s": "population_weighted_mean",
"covered_population": "sum",
"covered_share": "ratio_of_sums"
}
}Hexagons within a 15-minute walk of any transit stop: rail, Underground, tram or bus. beyond=walk.transit_stop:900 gives the hexagons further away.
Request
curl -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" \
"https://data.traveltimeapp.com/v1/proximity/cells?bbox=51.29,-0.33,51.36,-0.20&within=walk.transit_stop:900"Shade = ratings.walk391100 hexagons; a hexagon opens its row.
| Hexagoncell | Walk ratingratings.walk | Transit ratingratings.transit | Drive ratingratings.drive | Map |
|---|---|---|---|---|
| 89194ac1003ffff | 30 | 16 | 91 | |
| 89194ac1007ffff | 47 | 27 | 98 | |
| 89194ac100fffff | 30 | 7 | 87 | |
| 89194ac1013ffff | 42 | 21 | 98 | |
| 89194ac1017ffff | 49 | 25 | 89 |
5 of the first 100 shown · next_cursor fetches the next page
Response
{
"within": "walk.transit_stop:900",
"resolution": 9,
"results": [
{
"cell": "89194ac1003ffff",
"ratings": {
"walk": 30,
"transit": 16,
"drive": 91
},
"walk_s": {
"supermarket": null,
"school": null,
"doctor": 481,
"pharmacy": null,
"post_office": null,
"park": 869,
"cafe": 869,
"restaurant": 869,
"transit_stop": 750
},
"drive_s": {
"supermarket": 318,
"school": 314,
"doctor": 264,
"pharmacy": 318,
"post_office": 318,
"park": 373,
"cafe": 318,
"restaurant": 373
},
"missing": [
{
"field": "walk_s.supermarket",
"reason": "over_900_s"
},
"… 3 more rows"
]
},
"… 99 more rows"
],
"next_cursor": "eyJxIjoiNDc4ZTE0MzAwMDg2YjA5YWZmZGY5MzEzIiwiayI6WyI4OTE5NGFjMTJjN2ZmZmYiXSwiZiI6ImVjMDZlNjE2MGVhNzA3YmQ5Njg5ZTBmZTUwYWNkMDA5In0.ioks7aLdA-krh8_JT8GjVA"
}| Parameter | Type | Default | What it does | Example |
|---|---|---|---|---|
within | travel.target:seconds, comma-separated | — | A sieve: only hexagons that meet every condition, up to 10. travel is walk or drive; target is a category or group id, train_station, metro_station (Underground and tram), bus_stop, transit_stop (any of those), beach or brand:<slug>, every one listed in the proximity entry's targets on /v1/catalog/{country}; seconds 1 to 900. With country=gb, the whole country. | within=walk.supermarket:600,drive.brand:lidl:900 |
beyond | as within | — | The opposite sieve: hexagons people live in where the nearest one is further than that, out of reach, or with no times. | beyond=walk.transit_stop:900 |
covered_by | as within | — | Needs group_by. Adds covered_population and covered_share to each totals row: the people within that time, without dropping any hexagon. | covered_by=walk.train_station:900 |
include | bands, open_spaces | — | bands: what is within 5, 10 and 15 minutes' walk. open_spaces: the biggest public spaces within 15 minutes' walk. Per-hexagon rows only, up to 100 a page. | include=bands,open_spaces |
Also takes Where: near, radius_m, bbox, cells, at, and country with within or beyond · Per-hexagon routes: group_by · Paging: limit, cursor · Output: format · Long requests: the POST body.
Each row: cell, ratings (walk, transit, drive, each 0–100), and walk_s and drive_s: seconds to the nearest of the 8 essentials (supermarket, school, doctor, pharmacy, post_office, park, cafe, restaurant) plus every within and beyond target. A time past 900 s is null and missing lists it, reason over_900_s; where nobody lives, ratings, walk_s and drive_s are null, reason no_residents (no_times where people live but the build has no times for them).
bands.walk.300,.600and.900, withinclude=bands:category_counts(supermarket,cafe,pharmacy,doctor,school,gym,pub),open_space_m2(public open space in reach, m²),largest_area_m2(whole size of the biggest public space in reach),over_1ha_count,over_5ha_countandover_20ha_count(by whole size),green_m2andgreen_share(green cover in reach).open_spaces, withinclude=open_spaces: each withid,name,class,access,area_m2(its whole size, m²),reachable_m2(the part inside the walk, m²) andwalk_s_from_cell.- A band field other than
category_counts, oropen_spaces, that the build lacks is null, reason not_in_build (a band field is outside_source_coverage where its source does not reach). Hexagons with no walk times get neitherbandsnoropen_spaces. - Totals rows:
boundary(with a boundary type),cell_count,population, the ratings and times, andcovered_populationandcovered_sharewith covered_by. Rollup: sum for counts and people, population_weighted_mean for ratings and times (over the hexagons that have them), ratio_of_sums forcovered_share.
Errors
| Code | HTTP | When |
|---|---|---|
invalid_within · invalid_beyond · invalid_covered_by | 400 | Not travel.target:seconds, seconds outside 1–900 (allowed_max 900), more than 10 conditions, or a target the country has no times for (the message lists them). |
covered_by_needs_group_by | 400 | covered_by with group_by=cell. |
too_many_cells | 400 | country without within or beyond; a search matching more than 100,000 hexagons, country included (use group_by); more than 100,000 cells sent, unless group_by=all; cells covering more than 200,000 res-9 hexagons, with group_by=all. |
invalid_include | 400 | Not bands or open_spaces, or with a group_by other than cell. |
invalid_format | 400 | Not json or geojson, or geojson with a group_by other than cell. |
invalid_limit | 400 | Below 1 or over 10,000, or over 100 with include. |
… and every Where, Per-hexagon routes and Paging code.
Request
curl -H "X-Application-Id: YOUR_APP_ID" -H "X-Api-Key: YOUR_APP_KEY" \
"https://data.traveltimeapp.com/v1/proximity/cells?cells=89195da4d8fffff,89194ac2677ffff,89195d48563ffff,89195d88a97ffff,89195d49b53ffff"Shade = ratings.walk52965 hexagons; a hexagon opens its row.
| Hexagoncell | Walk ratingratings.walk | Transit ratingratings.transit | Drive ratingratings.drive | Map |
|---|---|---|---|---|
| 89195da4d8fffff | 96 | 100 | 90 | |
| 89194ac2677ffff | 95 | 100 | 90 | |
| 89195d48563ffff | 77 | 32 | 67 | |
| 89195d88a97ffff | 52 | 21 | 100 | |
| 89195d49b53ffff | — | — | — |
All 5 shown
Response
{
"resolution": 9,
"results": [
{
"cell": "89195da4d8fffff",
"ratings": {
"walk": 96,
"transit": 100,
"drive": 90
},
"walk_s": {
"supermarket": 201,
"school": 367,
"doctor": 201,
"pharmacy": 201,
"post_office": 363,
"park": 344,
"cafe": 201,
"restaurant": 201
},
"drive_s": {
"supermarket": 370,
"school": 370,
"doctor": 370,
"pharmacy": 370,
"post_office": 370,
"park": 370,
"cafe": 370,
"restaurant": 370
}
},
"… 4 more rows"
],
"next_cursor": null
}