The Raw Labels API provides access to individual geo-located labels placed by Project Sidewalk users. Each label represents a sidewalk feature or barrier that has been identified and categorized in street view imagery.
This endpoint returns raw, unclustered data. For most applications, we recommend using the Label Clusters API as it groups potentially duplicate labels of the same feature using a custom clustering algorithm. Use this Raw Labels API when you need access to every individual label record, including metadata about the user (anonymized) and validation status.
Below is a live preview of raw labels from a sample region in 墨西哥墨西哥市 retrieved directly from the API. Compare this map to the Label Clusters equivalent to see the difference between clustered labels vs. raw labels. Depending on the number of labels in the region, it may take a bit to load.
Note: In this example, we are visualizing Project Sidewalk data only in a single region; however, the Raw Labels API can return data from all regions in the city or just a selected region—see the API query parameters below.
Retrieve a list of raw labels, optionally filtered by various criteria.
GET /v3/api/rawLabels
Download raw labels data directly in your preferred format:
Note: This downloads all raw labels. For filtered data, use the API query parameters described below.
Filter the raw labels returned by this endpoint using the following query parameters. All parameters are
optional. Combine multiple filter parameters to narrow down results (filters are applied using AND logic).
When multiple location filters are provided (bbox
, regionId
, and
regionName
), bbox
takes precedence over region filters, and regionId
takes precedence over regionName
.
Parameter | Type | Description |
---|---|---|
bbox |
string |
Filter labels by bounding box. Coordinates should be provided as a comma-separated string in the format: minLnggitude,minLatitude,maxLongitude,maxLatitude (e.g., -74.01,40.71,-74.00,40.72 ). Uses WGS84 (EPSG:4326) coordinates. If omitted, results are not spatially filtered (potentially very large response). |
regionId |
integer |
Filter labels by region ID. Returns only labels within the specified region. Note: If both bbox and regionId are provided, bbox takes precedence. |
regionName |
string |
Filter labels by region name. Returns only labels within the specified region. Note: If bbox or regionId are provided, they take precedence over regionName . |
labelType |
string |
Filter by one or more label types. Provide comma-separated values (e.g., labelType=CurbRamp,Obstacle ). See Label Types Reference for available types. |
tag |
string |
Filter by one or more tags associated with labels. Provide comma-separated values (e.g., tag=missing_tactile_warning,uneven_surface ). Matches labels containing *any* of the specified tags. See Tags Reference for available tags. |
minSeverity |
integer |
Filter labels with a severity rating greater than or equal to this value (1-5). |
maxSeverity |
integer |
Filter labels with a severity rating less than or equal to this value (1-5). |
validationStatus |
string |
Filter by validation status. Possible values: validated_correct , validated_incorrect , unvalidated . |
startDate |
string |
Filter labels created on or after this date/time. Format: ISO 8601 (e.g., 2024-01-01T00:00:00Z ). Filters based on the time_created field. |
endDate |
string |
Filter labels created before this date/time. Format: ISO 8601 (e.g., 2024-12-31T23:59:59Z ). Filters based on the time_created field. |
filetype |
string |
Specify the output format. Options: geojson (default), csv , shapefile . |
On success, the API returns an HTTP 200 OK
status code and the requested data in the specified
filetype
format.
Returns a GeoJSON FeatureCollection where each feature represents a single raw label. Coordinate Reference System (CRS) is WGS84 (EPSG:4326).
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-74.0243606567383, 40.8839912414551]
},
"properties": {
"label_id": 8,
"user_id": "18b26a38-24ab-402d-a64e-158fc0bb8a8a",
"gsv_panorama_id": "DsCvWstZYz9JL81V9NloOQ",
"label_type": "CurbRamp",
"severity": 1,
"tags": [],
"description": null,
"time_created": 1692227245041,
"street_edge_id": 951,
"osm_way_id": 11584845,
"neighborhood": "Teaneck Community Charter School",
"correct": true,
"agree_count": 2,
"disagree_count": 0,
"unsure_count": 0,
"validations": [
{
"user_id": "056df9f9-a7de-46f1-ae52-02c069f5829f",
"validation": "1"
},
{
"user_id": "de691775-ac79-45f9-b265-e867702adc1d",
"validation": "1"
}
],
"audit_task_id": 6,
"mission_id": 3,
"image_capture_date": "2012-08",
"heading": 94.3114318847656,
"pitch": -24.6774997711182,
"zoom": 2,
"canvas_x": 395,
"canvas_y": 151,
"canvas_width": 480,
"canvas_height": 720,
"pano_x": 1781,
"pano_y": 3980,
"pano_width": 13312,
"pano_height": 6656,
"camera_heading": 228.928619384766,
"camera_pitch": -0.998329997062683,
"gsv_url": "https://www.google.com/maps/@40.88399124145508,-74.02436065673828,3a,75y,94.31143188476562h,65.3222501t/data=!3m4!1e1!3m2!1sDsCvWstZYz9JL81V9NloOQ!2e0"
}
},
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-74.0243835449219, 40.8839416503906]
},
"properties": {
"label_id": 9,
"user_id": "18b26a38-24ab-402d-a64e-158fc0bb8a8a",
"gsv_panorama_id": "DsCvWstZYz9JL81V9NloOQ",
"label_type": "Crosswalk",
"severity": 1,
"tags": [],
"description": null,
"time_created": 1692227248747,
"street_edge_id": 95,
"osm_way_id": 11566031,
"neighborhood": "Teaneck Community Charter School",
"correct": true,
"agree_count": 2,
"disagree_count": 1,
"unsure_count": 0,
"validations": [
{
"user_id": "2e602097-9e49-4217-ba24-816b2093e491",
"validation": "1"
},
{
"user_id": "8af92eb8-fb84-4aa6-9539-abc95216dcd7",
"validation": "1"
},
{
"user_id": "be481045-4448-42ae-bbac-3455ce914202",
"validation": "2"
}
],
"audit_task_id": 6,
"mission_id": 3,
"image_capture_date": "2012-08",
"heading": 140.740005493164,
"pitch": -18.1596431732178,
"zoom": 2,
"canvas_x": 246,
"canvas_y": 225,
"canvas_width": 480,
"canvas_height": 720,
"pano_x": 3038,
"pano_y": 3948,
"pano_width": 13312,
"pano_height": 6656,
"camera_heading": 228.928619384766,
"camera_pitch": -0.998329997062683,
"gsv_url": "https://www.google.com/maps/@40.883941650390625,-74.02438354492188,3a,75y,140.74000549316406h,71.84035682679t/data=!3m4!1e1!3m2!1sDsCvWstZYz9JL81V9NloOQ!2e0"
}
},
...
]
}
Each feature in the GeoJSON response represents a single raw label with point geometry and detailed properties:
Field Path | Type | Description |
---|---|---|
geometry.coordinates |
array |
Geographic coordinates in [longitude, latitude] format using WGS84 (EPSG:4326) coordinate system. |
properties.label_id |
integer |
Unique identifier for the label in the Project Sidewalk database. |
properties.user_id |
string |
Anonymized unique identifier (UUID) for the user who placed the label. All labels from the same user will have the same user_id . |
properties.label_type |
string |
Type of sidewalk feature or barrier represented by this label. Possible values: CurbRamp , NoCurbRamp , Crosswalk , SurfaceProblem , Obstacle , NoSidewalk , or Other . |
properties.severity |
integer |
User-reported severity rating from 1 (minor issue) to 5 (major barrier). For accessibility features like curb ramps, a low severity indicates good condition, while for barriers, it indicates a less significant obstacle. |
properties.tags |
array |
Array of string tags providing additional context about the label. Common tags include grass , height difference , no alternate route , points into traffic , among others. |
properties.description |
string | null |
Optional free-text description provided by the user, or null if none was provided. |
properties.time_created |
long |
Unix timestamp (milliseconds since epoch) when the label was created. |
properties.street_edge_id |
integer |
Project Sidewalk internal identifier for the street segment the label is associated with. |
properties.osm_way_id |
integer |
OpenStreetMap Way ID for the street segment, if available. |
properties.neighborhood |
string |
Name of the neighborhood or area the label falls within, as defined in Project Sidewalk's regions. |
properties.correct |
boolean | null |
Computed validation status based on user validations. true if the label has been verified as correct by community validation, false if determined to be incorrect, or null if insufficient validation data exists. |
properties.agree_count |
integer |
Number of users who agreed with (confirmed) this label during validation tasks. |
properties.disagree_count |
integer |
Number of users who disagreed with (disputed) this label during validation tasks. |
properties.unsure_count |
integer |
Number of users who marked "unsure" for this label during validation tasks. |
properties.validations |
array |
Array of individual validation objects. Each object contains: user_id (anonymized identifier of the validating user) and validation (the validation value: "1" for agree, "2" for disagree, "3" for unsure). |
properties.audit_task_id |
integer |
Identifier for the auditing session during which this label was created. |
properties.mission_id |
integer |
Identifier for the mission the user was completing when this label was created. |
properties.gsv_panorama_id |
string |
Google Street View panorama identifier where the label was placed. |
properties.image_capture_date |
string |
Date when the Street View imagery was captured, typically in "YYYY-MM" format (e.g., "2012-08"). |
properties.gsv_url |
string |
URL to the Google Street View panorama where this label was placed, including parameters to position the view at the correct heading and pitch. |
properties.heading |
number |
Horizontal angle (in degrees) of the user's view when placing the label, measured clockwise from north. |
properties.pitch |
number |
Vertical angle (in degrees) of the user's view when placing the label, with negative values indicating a downward tilt. |
properties.zoom |
integer |
Zoom level of the Street View panorama when the label was placed. |
properties.camera_heading |
number |
Base heading of the Street View camera (in degrees), before user rotation. |
properties.camera_pitch |
number |
Base pitch of the Street View camera (in degrees), before user adjustment. |
properties.canvas_x |
integer |
X-coordinate of the label placement on the user's canvas/viewport. |
properties.canvas_y |
integer |
Y-coordinate of the label placement on the user's canvas/viewport. |
properties.canvas_width |
integer |
Width of the user's canvas/viewport when the label was placed (in pixels). |
properties.canvas_height |
integer |
Height of the user's canvas/viewport when the label was placed (in pixels). |
properties.pano_x |
integer |
X-coordinate of the label position on the full panorama image. |
properties.pano_y |
integer |
Y-coordinate of the label position on the full panorama image. |
properties.pano_width |
integer |
Width of the full panorama image (in pixels). |
properties.pano_height |
integer |
Height of the full panorama image (in pixels). |
If filetype=csv
is specified, the response body will be CSV data. The first row contains the
headers, corresponding to the fields in the GeoJSON properties object, plus latitude
and
longitude
columns derived from the geometry. CRS is WGS84 (EPSG:4326).
label_id,user_id,gsv_panorama_id,label_type,severity,tags,description,...,disagree_count,unsure_count,latitude,longitude
115,18b26a38-...,YQScv...,CurbRamp,2,[missing tactile warning],,...,1,0,40.715,-74.005
116,...,...,Obstacle,4,[construction],"Temporary fence",...,3,0,40.7151,-74.0051
...
If filetype=shapefile
is specified, the response body will be a ZIP archive containing the Shapefile components (.shp, .shx, .dbf, .prj). The attribute table (.dbf) contains fields corresponding to the GeoJSON properties object (field names may be truncated due to Shapefile limitations). The included .prj
file defines the Coordinate Reference System (CRS), typically WGS84 (EPSG:4326).
If filetype=geopackage
is specified, the response body will be a GeoPackage file (.gpkg
). This is an open standard format based on SQLite that contains both geometry and attributes in a single file, generally without the field name limitations of Shapefiles. CRS is typically WGS84 (EPSG:4326).
If an error occurs, the API will return an appropriate HTTP status code and a JSON response body containing details about the error.
400 Bad Request
: Invalid parameter values (e.g., malformed bounding box, invalid date format).404 Not Found
: The requested resource does not exist (e.g., incorrect base URL path).500 Internal Server Error
: An unexpected error occurred on the server.503 Service Unavailable
: The server is temporarily unable to handle the request (e.g., during maintenance).Error responses include a JSON body with the following structure:
{
"status": 400, // HTTP Status Code repeated
"code": "INVALID_PARAMETER", // Machine-readable error code
"message": "Invalid value for bbox parameter. Expected format: minLng,minLat,maxLng,maxLat.", // Human-readable description
"parameter": "bbox" // Optional: The specific parameter causing the error
}
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
If you are interested in bringing Project Sidewalk to your city, please read our Wiki page.