{
    "name": "San Antonio Trail and Sidewalk Access API",
    "version": "v1",
    "description": "Every trail segment in the City of San Antonio open GIS, classified by surface firmness, plus the city sidewalk inventory summarised by council district, plus an explicit audit of that inventory's own missing-data sentinels.",
    "built": "2026-08-24T18:00:06+00:00",
    "source": {
        "name": "City of San Antonio open GIS: Park Trails, Sidewalks, Park Boundaries, Redistricted Council Districts 2022",
        "url": "https://data.sanantonio.gov/",
        "service": "https://services.arcgis.com/g1fRTDLeMgspWrYp/arcgis/rest/services/",
        "licence": "City of San Antonio open data",
        "note": "Republished as fetched. No field was corrected, filled or smoothed."
    },
    "method": {
        "surface": "Trail surface material (TrailSubtype) is classified firm / soft / undecidable / unrecorded against the ADA-ABA Accessibility Guidelines for Outdoor Developed Areas. Aggregate and Wood are UNDECIDABLE from this record: firmness depends on binder, compaction, maintenance, joint gaps and running slope, none of which the City publishes.",
        "refusal": "No trail is certified as ADA-compliant. The trails layer contains no width, no running grade, no cross-slope and no obstruction survey, so compliance cannot be established from it at all.",
        "width": "Width is a NOMINAL inventory width. ADA governs CLEAR width, which is what remains after poles, hydrants, signs and overgrowth, and this inventory does not contain it. Figures here are statements about the record: a segment \"carries a recorded width below 36 inches\", it is not asserted to fail the ADA minimum.",
        "blank": "Width = 0 means NOT RECORDED, not zero feet wide. It is never averaged, divided by, or counted as either compliant or failing.",
        "sentinel": "SidewalkScore uses -999 as a missing-data sentinel. It is excluded from the mean, and the excluded share is published per district.",
        "coverage": "Every width statistic is published beside its coverage rate, because \"few narrow sidewalks\" and \"few measured sidewalks\" are indistinguishable otherwise.",
        "aggregates": "Sidewalk figures are computed by the ArcGIS service via grouped aggregate queries over all 99,147 features; no sampling is performed."
    },
    "coverage": {
        "trail_segments": 4976,
        "trail_miles": 402.4,
        "named_trails": 571,
        "trail_miles_by_class": {
            "firm": {
                "n": 3832,
                "mi": 276.34
            },
            "soft": {
                "n": 788,
                "mi": 96.92
            },
            "undecidable": {
                "n": 310,
                "mi": 25.64
            },
            "unrecorded": {
                "n": 46,
                "mi": 3.5
            }
        },
        "certified_ada_compliant": 0,
        "sidewalk_segments": 99147,
        "sidewalk_existing_miles": 6348.6,
        "sidewalk_missing_miles": 1432.3,
        "council_districts": 11,
        "parks": 337
    },
    "integrity": {
        "method": "reconcile-or-refuse",
        "width_buckets_partition_existing": true,
        "districts_sum_to_citywide": true,
        "note": "The ETL aborts and leaves the previous dataset in place if the width buckets do not partition the Existing set exactly, or if the per-district totals do not equal the citywide total."
    },
    "endpoints": [
        {
            "href": "https://brandshyp.org/api/v1/trail-access",
            "returns": "this document"
        },
        {
            "href": "https://brandshyp.org/api/v1/trail-access/trails",
            "returns": "every named trail with its surface mix"
        },
        {
            "href": "https://brandshyp.org/api/v1/trail-access/trails.csv",
            "returns": "the same, tidy CSV"
        },
        {
            "href": "https://brandshyp.org/api/v1/trail-access/trail/{slug}",
            "returns": "one named trail; slug as published in /trails"
        },
        {
            "href": "https://brandshyp.org/api/v1/trail-access/surfaces",
            "returns": "surface rollup and the firmness classification"
        },
        {
            "href": "https://brandshyp.org/api/v1/trail-access/districts",
            "returns": "sidewalk network by council district, with coverage rates"
        },
        {
            "href": "https://brandshyp.org/api/v1/trail-access/quality",
            "returns": "the inventory audit: sentinels and what they break"
        },
        {
            "href": "https://brandshyp.org/api/v1/trail-access/geo",
            "returns": "pre-projected SVG paths for both maps"
        },
        {
            "href": "https://brandshyp.org/api/v1/trail-access/lines",
            "returns": "trail centrelines as WGS84 [lat,lng] polylines, for use in a real map"
        },
        {
            "href": "https://brandshyp.org/api/v1/trail-access/openapi.json",
            "returns": "OpenAPI 3.1 description"
        }
    ],
    "documentation": "https://brandshyp.org/san-antonio-trail-access/",
    "openapi": "https://brandshyp.org/api/v1/trail-access/openapi.json",
    "platform": "https://brandshyp.org/api/v1",
    "versioning": "Breaking changes ship under /api/v2/. v1 is additive-only.",
    "contact": "https://brandshyp.org/contact-us/",
    "caveats": {
        "not_a_compliance_determination": "Nothing in this dataset establishes ADA compliance. The City trail layer records a surface material and a length; it contains no tread width, no running grade, no cross slope and no obstruction survey. No trail here is certified, and none can be from this record.",
        "width_is_recorded_width": "Sidewalk Width is a nominal inventory width. ADA governs CLEAR width, which is what remains after poles, hydrants, signs and overgrowth, and this inventory does not contain it. A segment \"carries a recorded width below 36 inches\"; it is not asserted to fail the ADA minimum.",
        "missing_data_sentinels": "The source uses sentinel values: SidewalkScore = -999 and Width = 0 both mean NOT RECORDED. They are excluded from every statistic here and are reported separately under /quality.",
        "coverage_varies": "Inventory coverage is uneven between council districts. A district can show almost no sub-36-inch sidewalk because its sidewalks are wide, or because its widths were never measured. Always read a width figure beside width_blank_pct.",
        "surface_undecidable": "Aggregate and wood surfaces are classified \"undecidable\", not compliant or non-compliant: firmness depends on binder, compaction, joint gaps and maintenance, none of which the City publishes."
    }
}