Project Sidewalk

Welcome back

Project Sidewalk

Join Project Sidewalk

Map sidewalks. Help make your city accessible to everyone.

3–30 characters — letters, numbers, hyphens, and underscores
  • At least 8 characters
  • One uppercase letter
  • One lowercase letter
  • One number
Passwords match

Label Edits API

The Label Edits API lists every change made to a label's severity or tags after the label was placed. An edit records who made it, the severity and tags before and after, the interface it was made in, and when. Edits come from two places: a validator who agrees a label is correct can fix its severity or tags as part of their vote (those edits carry the vote's label_validation_id), and the person who placed a label, or an admin, can edit it directly from the label's detail card on the Label Map or Gallery (those have no validation).

Use it to study how crowd editing refines label metadata, to audit changes to a specific label, or to reconstruct what a label looked like at a point in time. The Raw Labels API always reflects the current, post-edit state.

Endpoint

Retrieve label edits with optional filtering.

GET /v3/api/labelEdits

Examples

/v3/api/labelEdits Get all label edits in JSON (default)

/v3/api/labelEdits?filetype=csv Get all label edits in CSV format

/v3/api/labelEdits?labelId=12345 Get the edit history of one label

/v3/api/labelEdits?withValidation=false Get only edits made directly from the label detail card, not as part of a vote

/v3/api/labelEdits?source=ExpertValidate Get only edits made through the Expert Validate interface

Quick Download

Download label edit data directly in your preferred format:

Query Parameters

This endpoint accepts the following optional query parameters.

Parameter Type Description
labelId integer Only edits to a specific label.
userId string Only edits made by a specific user.
labelTypeId integer Only edits to labels of a specific type. See Label Types API.
editTimestamp string Only edits made at or after this ISO 8601 timestamp (e.g., "2023-01-01T00:00:00Z").
source string Only edits made in this interface (matches the source field in the response), e.g. Validate, ExpertValidate, LabelMap, GalleryExpanded, UserMap.
withValidation boolean true for only edits submitted with a validation (those with a label_validation_id), false for only standalone edits made from the label detail card.
filetype string Output format: json (default), csv. Spatial formats are not supported; an edit has no coordinates of its own.
inline boolean Whether to display the file inline (true) or as a download attachment (false, default).

Responses

Success Response (200 OK)

On success, the API returns an HTTP 200 OK status code and the requested data in the specified format.

JSON Format (Default)

Returns a JSON array of edit objects:

[
  {
    "label_edit_id": 501,
    "label_id": 67890,
    "label_type_id": 2,
    "label_type": "NoCurbRamp",
    "user_id": "user_abc123",
    "old_severity": 2,
    "new_severity": 3,
    "old_tags": ["narrow"],
    "new_tags": ["narrow", "steep"],
    "source": "ExpertValidate",
    "edit_time": "2025-08-04T21:52:05.158Z",
    "label_validation_id": 12345
  },
  {
    "label_edit_id": 502,
    "label_id": 67891,
    "label_type_id": 1,
    "label_type": "CurbRamp",
    "user_id": "user_def456",
    "old_severity": 1,
    "new_severity": 2,
    "old_tags": ["points into traffic"],
    "new_tags": ["points into traffic"],
    "source": "LabelMap",
    "edit_time": "2025-08-05T14:10:41.002Z",
    "label_validation_id": null
  }
]
JSON Field Descriptions
Field Type Description
label_edit_idintegerUnique identifier for the edit.
label_idintegerID of the edited label.
label_type_idintegerID of the label's type (e.g., 1 for CurbRamp, 2 for NoCurbRamp).
label_typestringName of the label's type (e.g., "CurbRamp", "Obstacle").
user_idstringID of the user who made the edit: the labeler, a validator, or an admin.
old_severityinteger | nullSeverity (1-3) before the edit, or null if the label had none.
new_severityinteger | nullSeverity (1-3) after the edit, or null if it was cleared or the label type has no severity.
old_tagsarray[string]Tags before the edit.
new_tagsarray[string]Tags after the edit.
sourcestringThe interface the edit was made in: a validation tool (Validate, ExpertValidate, ValidateMobile, ...) or a surface hosting the label detail card (LabelMap, GalleryExpanded, UserMap, ...).
edit_timestringISO 8601 timestamp of the edit. A user's consecutive changes to a label from the card within a few minutes are recorded as one edit; this is the time of the last of them.
label_validation_idinteger | nullThe validation the edit was submitted with (see the Validations API), or null for an edit made directly from the label detail card.

CSV Format

If filetype=csv is specified, the response is CSV data with the same fields:

label_edit_id,label_id,label_type_id,label_type,user_id,old_severity,new_severity,old_tags,new_tags,source,edit_time,label_validation_id
501,67890,2,NoCurbRamp,user_abc123,2,3,"[narrow]","[narrow,steep]",ExpertValidate,2025-08-04T21:52:05.158Z,12345
502,67891,1,CurbRamp,user_def456,1,2,"[points into traffic]","[points into traffic]",LabelMap,2025-08-05T14:10:41.002Z,

Error Responses

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., a malformed editTimestamp, an unknown source, a spatial filetype).
  • 500 Internal Server Error: An unexpected error occurred on the server.
  • 503 Service Unavailable: The server is temporarily unable to handle the request.

Error Response Body

All errors are returned as RFC 7807 “problem details” with the application/problem+json content type and the following structure:

{
  "type": "about:blank",          // RFC 7807 problem-type URI ("about:blank" means no type beyond the status)
  "title": "Invalid Parameter",   // Short, human-readable summary of the problem type (stable for a given code)
  "status": 400,                  // HTTP status code (also repeated in the body)
  "detail": "Invalid value for the bbox parameter. Expected format: minLng,minLat,maxLng,maxLat.", // This occurrence
  "code": "INVALID_PARAMETER",    // Stable, machine-readable error code you can branch on
  "parameter": "bbox"             // Extension member: the specific parameter at fault (omitted when not applicable)
}

Data Analysis Tips

  • Reconstruct a label's history by ordering its edits by edit_time: each edit's old_* values equal the previous edit's new_* values, starting from the label as it was placed.
  • Compare validator edits with direct edits using withValidation to see whether the two paths change labels differently.
  • Measure which tags and severities get corrected most by diffing old_tags/new_tags and old_severity/new_severity per label type.

Related APIs

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