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.
Retrieve label edits with optional filtering.
GET /v3/api/labelEdits
/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
Download label edit data directly in your preferred format:
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). |
On success, the API returns an HTTP 200 OK status code and the requested data in the specified format.
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
}
]
| Field | Type | Description |
|---|---|---|
label_edit_id | integer | Unique identifier for the edit. |
label_id | integer | ID of the edited label. |
label_type_id | integer | ID of the label's type (e.g., 1 for CurbRamp, 2 for NoCurbRamp). |
label_type | string | Name of the label's type (e.g., "CurbRamp", "Obstacle"). |
user_id | string | ID of the user who made the edit: the labeler, a validator, or an admin. |
old_severity | integer | null | Severity (1-3) before the edit, or null if the label had none. |
new_severity | integer | null | Severity (1-3) after the edit, or null if it was cleared or the label type has no severity. |
old_tags | array[string] | Tags before the edit. |
new_tags | array[string] | Tags after the edit. |
source | string | The interface the edit was made in: a validation tool (Validate, ExpertValidate, ValidateMobile, ...) or a surface hosting the label detail card (LabelMap, GalleryExpanded, UserMap, ...). |
edit_time | string | ISO 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_id | integer | null | The validation the edit was submitted with (see the Validations API), or null for an edit made directly from the label detail card. |
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,
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.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)
}
edit_time: each edit's old_* values equal the previous edit's new_* values, starting from the label as it was placed.withValidation to see whether the two paths change labels differently.old_tags/new_tags and old_severity/new_severity per label type.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.