AccessScore: Regions API

The AccessScore: Regions API returns an accessibility score in the range (0, 1) for each region (neighborhood) — higher is more accessible. A region's score is the street-length-weighted mean of the AccessScores of its audited streets, so long streets count proportionally more than short ones.

AccessScore extends the method introduced in Li et al., A Pilot Study of Sidewalk Equity in Seattle (Urban Access 2022). It is experimental and the weights are subject to change. See the AccessScore: Streets API for how individual street scores are computed.

AccessScore: Regions Preview

Below is a live preview of region AccessScores in Hackensack, New Jersey, retrieved directly from the API. Each region is colored from red (low accessibility) to green (high); use the Color by dropdown to switch between the AccessScore and audit coverage. Hover or click a region to see its score and coverage.

One method, not the method. There is no single correct way to measure street- and neighborhood-level accessibility—researchers and practitioners use many different approaches. AccessScore implements just one such algorithm, and it is experimental: the weighting is deliberately simple and subject to change. Treat these scores as one lens rather than a definitive measure, and compute your own index from the Label Clusters API if a different method suits your needs better.

Endpoint

Returns a region boundary and its AccessScore for each region in the queried area, optionally filtered by the Query Parameters below.

GET /v3/api/accessScoreRegions

Examples

/v3/api/accessScoreRegions?filetype=geojson Get AccessScores for all regions in GeoJSON (default)

/v3/api/accessScoreRegions?filetype=geojson&inline=true Same, but opened in the browser

/v3/api/accessScoreRegions?filetype=csv Get AccessScores for all regions in CSV

/v3/api/accessScoreRegions?regionId=8 Get the score for a single region

How the score is computed

Each of the region's audited streets is scored as described in the AccessScore: Streets API. The region's score is the mean of those street scores weighted by street length: Σ(score × length) / Σ(length). Unaudited streets are excluded. When a region has no audited streets, its score is null.

coverage reports the fraction of the region's streets that have been audited, so you can judge how complete a region's score is.

Quick Download

Download region AccessScore data directly in your preferred format:

Note: This downloads scores for all regions. For filtered data, use the API Query Parameters described below.

Query Parameters

All parameters are optional.

Note: When multiple location filters are provided (bbox, regionId, and regionName), bbox takes precedence over region filters, and regionId takes precedence over regionName.

ParameterTypeDescription
bbox string Filter by bounding box, as minLongitude,minLatitude,maxLongitude,maxLatitude (e.g., -74.04,40.88,-74.00,40.91), WGS84 (EPSG:4326). Returns regions within the box. If omitted, the city's default bounding box is used.
regionId integer Return only the region with this id. Takes precedence over regionName; bbox takes precedence over both.
regionName string Return only the region with this name. Used only when bbox and regionId are absent.
filetype string Output format. Options: geojson (default), csv, shapefile, geopackage.
inline boolean Whether to display the file inline rather than as an attachment. Default: false.

Responses

Success Response (200 OK)

On success, the API returns 200 OK and the requested data in the specified filetype format.

GeoJSON Format (Default)

Returns a GeoJSON FeatureCollection where each feature is a region (MultiPolygon, WGS84 / EPSG:4326).

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "geometry": { "type": "MultiPolygon", "coordinates": [...] },
            "properties": {
                "region_id": 8,
                "name": "Terhune Park",
                "score": 0.5623,
                "coverage": 1.0,
                "audited_street_count": 52,
                "total_street_count": 52,
                "avg_cluster_counts": {
                    "CurbRamp": 2.1, "NoCurbRamp": 0.3, "Obstacle": 0.4, "SurfaceProblem": 0.6,
                    "NoSidewalk": 0.5, "Crosswalk": 0.9, "Signal": 0.1
                }
            }
        },
        ...
    ]
}
GeoJSON Field Descriptions
Field PathTypeDescription
geometryMultiPolygonThe region's boundary polygon(s), in [longitude, latitude] (WGS84 / EPSG:4326).
properties.region_idintegerProject Sidewalk's unique identifier for this region.
properties.namestringThe region (neighborhood) name.
properties.scorenumberLength-weighted mean AccessScore of the region's audited streets, in (0, 1). null when no streets in the region have been audited.
properties.coveragenumberFraction of the region's streets that have been audited, in [0, 1].
properties.audited_street_countintegerNumber of audited streets in the region.
properties.total_street_countintegerTotal number of streets in the region.
properties.avg_cluster_countsobjectMean number of scored clusters of each label type across the region's audited streets, keyed by label-type name.

CSV Format

If filetype=csv, the first row is the header. The per-type avg_cluster_counts are flattened into one avg_n_* column per label type, and the geometry is simplified to the region centroid.

region_id,name,score,coverage,audited_street_count,total_street_count,avg_n_curb_ramp,avg_n_no_curb_ramp,avg_n_obstacle,avg_n_surface_problem,avg_n_no_sidewalk,avg_n_crosswalk,avg_n_signal,center_point
8,Terhune Park,0.5623,1.0,52,52,2.1,0.3,0.4,0.6,0.5,0.9,0.1,"-74.012,40.895"
...

Shapefile Format

If filetype=shapefile, the response is a ZIP archive of Shapefile components (.shp, .shx, .dbf, .prj). Because the DBF format truncates column names at 10 characters, the per-type columns use short codes (e.g. aCRamp); the GeoJSON, CSV, and GeoPackage formats keep the full names.

GeoPackage Format

If filetype=geopackage, the response is a GeoPackage (.gpkg) file with full geometry and attributes (full snake_case column names).

Error Responses

  • 400 Bad Request: Invalid parameter values (e.g., malformed bounding box, non-positive or unknown region id).
  • 500 Internal Server Error: An unexpected error occurred on the server.
{
    "status": 400,
    "code": "INVALID_PARAMETER",
    "message": "No region found with regionId 99999.",
    "parameter": "regionId"
}

Best Practices

  • Read coverage alongside score: a high score over low coverage reflects only the audited fraction of the region.
  • Treat the score as relative, not absolute: the weights are experimental. Use scores to compare regions, not as a calibrated index.
  • Drill down: use the AccessScore: Streets API to see which streets drive a region's score.

Contribute

Project Sidewalk is an open-source project created by the Makeability Lab and hosted on GitHub. We welcome your contributions! If you found a bug or have a feature request, please open an issue on GitHub.

You can also email us at sidewalk@cs.uw.edu

Project Sidewalk in Your City!

If you are interested in bringing Project Sidewalk to your city, please read our Wiki page.

On This Page