Validations API

The Validations API provides access to validation data from Project Sidewalk, where community members review and validate labels placed by other users. Each validation record includes the validator's judgment (Agree, Disagree, or Unsure), any changes made to tags or severity levels, and associated metadata.

This API is useful for researchers studying data quality, community validation patterns, and the reliability of crowdsourced accessibility data. The validation process helps ensure the accuracy and consistency of Project Sidewalk's accessibility information.

Validations API Preview

Below is a live preview showing validation result distributions by label type, retrieved directly from the API:

Loading validation data...

Endpoint

Retrieve validation data with optional filtering by various criteria.

GET /v3/api/validations

Examples

/v3/api/validations Get all validations in JSON (default)

/v3/api/validations?filetype=csv Get all validations in CSV format

/v3/api/validations?validationResult=1 Get only "Agree" validations

/v3/api/validations?labelTypeId=2&changedTags=true Get validations for label type 2 where tags were changed

Quick Download

Download validation data directly in your preferred format:

Query Parameters

This endpoint accepts the following optional query parameters to filter validation data.

Parameter Type Description
labelId integer Filter validations for a specific label by its unique ID.
userId string Filter validations performed by a specific user (validator).
validationResult integer Filter by validation result: 1 (Agree), 2 (Disagree), 3 (Unsure).
labelTypeId integer Filter validations for a specific label type (e.g., CurbRamp, Obstacle). See Label Types API
validationTimestamp string Filter validations performed after this ISO 8601 timestamp (e.g., "2023-01-01T00:00:00Z").
changedTags boolean Filter validations where tags were changed (true) or not changed (false).
changedSeverityLevels boolean Filter validations where severity levels were changed (true) or not changed (false).
filetype string Output format: json (default), csv. Note: shapefile is not supported for validation data.
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 containing validation objects:

[
    {
        "validation_id": 12345,
        "label_id": 67890,
        "user_id": "user_abc123",
        "validation_result": 1,
        "validation_timestamp": "2023-09-15T14:32:47Z",
        "label_type_id": 2,
        "label_type": "NoCurbRamp",
        "severity_before": 3,
        "severity_after": 4,
        "changed_severity": true,
        "tags_before": ["narrow"],
        "tags_after": ["narrow", "steep"],
        "changed_tags": true,
        "street_edge_id": 54321,
        "neighborhood_id": 15,
        "neighborhood_name": "Downtown",
        "lat": 47.6062,
        "lng": -122.3321
    },
    {
        "validation_id": 12346,
        "label_id": 67891,
        "user_id": "user_def456",
        "validation_result": 2,
        "validation_timestamp": "2023-09-15T15:45:12Z",
        "label_type_id": 1,
        "label_type": "CurbRamp",
        "severity_before": 2,
        "severity_after": 2,
        "changed_severity": false,
        "tags_before": ["wide"],
        "tags_after": ["wide"],
        "changed_tags": false,
        "street_edge_id": 54322,
        "neighborhood_id": 15,
        "neighborhood_name": "Downtown",
        "lat": 47.6065,
        "lng": -122.3318
    }
]
JSON Field Descriptions
Field Type Description
validation_idintegerUnique identifier for the validation record.
label_idintegerID of the label that was validated.
user_idstringID of the user who performed the validation.
validation_resultintegerValidation judgment: 1 (Agree), 2 (Disagree), 3 (Unsure).
validation_timestampstringISO 8601 formatted timestamp when the validation was performed.
label_type_idintegerID of the label type (e.g., 1 for CurbRamp, 2 for NoCurbRamp).
label_typestringName of the label type (e.g., "CurbRamp", "Obstacle").
severity_beforeinteger | nullSeverity rating before validation (1-5 scale), or null if not applicable.
severity_afterinteger | nullSeverity rating after validation, or null if not changed/applicable.
changed_severitybooleanWhether the validator changed the severity rating.
tags_beforearrayArray of tag names before validation.
tags_afterarrayArray of tag names after validation.
changed_tagsbooleanWhether the validator changed any tags.
street_edge_idintegerID of the street segment where the label is located.
neighborhood_idintegerID of the neighborhood containing the label.
neighborhood_namestringName of the neighborhood containing the label.
latnumberLatitude coordinate of the validated label.
lngnumberLongitude coordinate of the validated label.

CSV Format

If filetype=csv is specified, the response will be CSV data with the same field structure:

validation_id,label_id,user_id,validation_result,validation_timestamp,label_type_id,label_type,severity_before,severity_after,...
12345,67890,user_abc123,1,2023-09-15T14:32:47Z,2,NoCurbRamp,3,4,...
12346,67891,user_def456,2,2023-09-15T15:45:12Z,1,CurbRamp,2,2,...

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., invalid validationResult, unsupported filetype).
  • 404 Not Found: The requested resource does not exist.
  • 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

Error responses include a JSON body with the following structure:

{
    "status": 400,
    "code": "INVALID_PARAMETER",
    "message": "Invalid validationResult value. Must be 1 (Agree), 2 (Disagree), or 3 (Unsure).",
    "parameter": "validationResult"
}

Validation Result Types

Project Sidewalk uses three validation result types to categorize validator responses:

ID Name Description
1 Agree The validator agrees with the original label placement and classification.
2 Disagree The validator disagrees with the original label placement or classification.
3 Unsure The validator is uncertain about the label's accuracy (e.g., due to image quality).

You can also retrieve this information programmatically from the/v3/api/validationResultTypes endpoint, which includes current count statistics for each validation result type.

Data Analysis Tips

The Validations API provides rich data for understanding community consensus and data quality. Here are some suggestions for effectively using this data:

  • Analyze agreement patterns by label type to identify which accessibility features are easier or harder for the community to classify consistently
  • Track tag and severity changes to understand how validation improves label accuracy and completeness
  • Use temporal filtering to study validation patterns over time
  • Cross-reference with user data to analyze validation behavior across different user types and experience levels
  • Map validation results geographically to identify neighborhoods or street types where labels are more controversial
  • Calculate inter-rater reliability by analyzing multiple validations of the same labels

Related APIs

For comprehensive validation analysis, consider using the Validations API alongside:

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