Walk Score
Line under construction Not measuredSubstantial
Foot-first, car optional — Illustrative sample value. Search an address for its score.
Type a street address — or just a name: Times Square, the Alamo, Mount Rushmore. IWannaWalk measures every errand you'd make on foot, by bus or rail, and by bike — and hands back three scores you can read at a glance.
No address handy?
Want street suggestions near you?
Substantial
Foot-first, car optional — Illustrative sample value. Search an address for its score.
Substantial
Stops a short stroll away — Illustrative sample value. Search an address for its score.
Substantial
A broad calm-street network — Illustrative sample value. Search an address for its score.
A score you'd bet a lease on has to be boring underneath: the same measurements, in the same order, every time. Here is the whole route — the one we run in every region whose street network we have built.
There, Transit Score weights each nearby route by mode and true frequency, and Bike Score adds lane quality and hill grade.
For places where we haven't fully mapped yet, the scores come from a coarser national model instead. It reads the area around an address instead of routing from that address specifically: for transit it knows how far the nearest stop; for biking, how much calm street there is to ride, regardless of elevation change.
Same 0–100 scale, same band names, and a band sentence that claims only what that instrument measured. Every score on this page carries the difference on its line, and every API response carries it as a field.
Groceries, schools, parks, restaurants, pharmacies, transit stops and bike lanes, refreshed nightly.
Distance is walked, not flown: we route along the actual street network and penalize missing sidewalks, hostile crossings and steep grades.
An errand 5 minutes away counts fully; at 30 minutes it counts for almost nothing. Each amenity category carries its own weight.
Raw points become a percentile-anchored score, so 87 in Portland means what 87 means in Pittsburgh — then the band names it.
One GET request returns all three scores with band names and plain-language descriptions, ready to render. Real-estate portals, relocation tools and delivery planners ship it in an afternoon.
Every mode also says how it was produced. fidelity is regional where we routed the street network around the address, interim where the national model estimated it for the surrounding area, and none where neither could answer and the score is null. Branch on that field — never on the band wording, which narrows to match the instrument.
Every response also carries data_providers: the credits owed for that one result, and nothing owed for somebody else's. An entry gives the exact wording to print, the modes whose answer that source fed, and where we discharge it — result next to the score itself, site_footer for the standing OpenStreetMap credit our own footer carries. If you display these scores, both are yours to give. An empty list means the answer owes none.
GET https://iwannawalk.com/v1/score?address=1600+Pennsylvania+Ave+NW+Washington+DC
{
"address": "1600 Pennsylvania Ave NW, Washington, DC",
"walk": {
"score": 89, "band": "Substantial",
"band_description": "Foot-first, car optional",
"fidelity": "interim"
},
"transit": {
"score": 89, "band": "Substantial",
"band_description": "Stops a short stroll away",
"status": "proximity_only", "nearest_stop_m": 176,
"fidelity": "interim"
},
"bike": {
"score": 78, "band": "Substantial",
"band_description": "A broad calm-street network",
"status": "low_stress_interim",
"excludes": ["terrain"],
"fidelity": "interim"
},
"data_providers": [
{ "attribution": "© OpenStreetMap contributors",
"modes": ["bike"], "discharged_by": "site_footer" }
],
"scored_at": "2026-08-13T02:41:17+00:00" // lookup time
}
Ask for a key with your email address; it comes back in the response. It is shown once — store it, then send it as an X-API-Key header on every call.
The same key answers for itself: check what you have spent today, swap it for a fresh one if it leaks, or delete it. All of it takes effect on your next request.
Ask for a key. The response is the only copy.
$ curl -X POST https://iwannawalk.com/v1/keys \ -H 'Content-Type: application/json' \ -d '{"email": "you@example.com"}'
Response: → {"key": "iww_…", "tier": "free", "calls_per_day": 5000}
The address is how we reach you about the key — we do not verify it and nothing is authorised by it. Signups are limited per caller per day.
Use it.
$ curl -H 'X-API-Key: iww_…' \ 'https://iwannawalk.com/v1/score?address=1600+Pennsylvania+Ave+NW+Washington+DC'
See today's usage. This call is free.
$ curl -H 'X-API-Key: iww_…' https://iwannawalk.com/v1/keys/usage
Response: → {"used": 128, "calls_per_day": 5000, "remaining": 4872}
Leaked it? Rotate. The new key is returned once, the old one stops working, today's usage carries over.
$ curl -X POST -H 'X-API-Key: iww_…' https://iwannawalk.com/v1/keys/rotate
Done with it? Revoke.
$ curl -X DELETE -H 'X-API-Key: iww_…' https://iwannawalk.com/v1/keys