{
    "name": "San Antonio Bond Projects API",
    "description": "The City of San Antonio bond project ledger: voter-approved capital, what has been spent, and what the record does and does not settle. Published with the coverage rate of every money field.",
    "meta": {
        "built": "2026-08-30T05:59:11+00:00",
        "retrieved": "2026-08-30",
        "record": "City of San Antonio - Bond Project master list",
        "cadence": "The City states this list is updated monthly."
    },
    "money": {
        "approved": 2050000000,
        "spent": 1069468345,
        "spent_pct": 52.2,
        "field_used": "Bond Budget and Bond Expenditures",
        "field_coverage": {
            "bond_budget": 99.2,
            "bond_expenditures": 98.6,
            "total_budget": 25.9
        },
        "do_not_use_total_budget": "The field named \"Total Budget\" is a recorded ZERO on 274 of 370 projects, not a blank, and the record does not say whether that means no separate budget or none entered. Summing it against Total Expenditures reports spending at 602.5% of budget.",
        "a_rate_lives_inside_one_pair": "Four divisions are refused: Total Expenditures by Total Budget, Bond Expenditures by Total Budget, Total Expenditures by Bond Budget, and any of those summed citywide before dividing.",
        "do_not_blend_programmes": "The citywide spend rate is published only beside the two programme rates. They are at different stages, and a single blended figure describes neither.",
        "programme_rates": [
            {
                "programme": "2017",
                "spent_pct": 86
            },
            {
                "programme": "2022",
                "spent_pct": 28.5
            }
        ]
    },
    "totals": {
        "projects": 370,
        "approved": 2050000000,
        "spent": 1069468345,
        "spent_pct": 52.2,
        "programmes": 2,
        "complete": 243,
        "cancelled": 6,
        "off_schedule": 40,
        "on_schedule": 324,
        "complete_but_off_schedule": 8,
        "coords_present": 370
    },
    "the_finding": "San Antonio voters approved $2,050,000,000 across 2 bond programmes and the City publishes a project-by-project ledger, which is better maintained than most records on this site. But the field named \"Total Budget\" is recorded on only 25.9% of projects, so the obvious budget-versus-actual sum reports spending at 602.5% of budget. And no project carries a real date: every scheduled end is a season, so whether a project is on time is only ever the City own assessment.",
    "endpoints": {
        "projects": "https://brandshyp.org/api/v1/bond/projects",
        "programmes": "https://brandshyp.org/api/v1/bond/programmes",
        "propositions": "https://brandshyp.org/api/v1/bond/propositions",
        "districts": "https://brandshyp.org/api/v1/bond/districts",
        "quality": "https://brandshyp.org/api/v1/bond/quality",
        "csv": "https://brandshyp.org/api/v1/bond/projects.csv",
        "openapi": "https://brandshyp.org/api/v1/bond/openapi.json"
    },
    "documentation": "https://brandshyp.org/san-antonio-bond-projects/",
    "caveats": {
        "budget_field_is_a_recorded_zero": "The field named \"Total Budget\" is a recorded zero on most projects, not a blank. Nothing in the record says whether that zero means the project has no separate total budget or that nobody entered one, so this page says \"recorded as zero\" and never \"missing\". Every dollar figure published here uses the Bond Budget and Bond Expenditures pair, each printed beside its coverage rate.",
        "a_rate_lives_inside_one_pair": "Four divisions are refused, not one: Total Expenditures by Total Budget, Bond Expenditures by Total Budget, Total Expenditures by Bond Budget, and any of those summed citywide before dividing. A rate is computed only within a pair. The record does not document what separates the two pairs and this page does not guess.",
        "schedule_is_self_reported": "No project carries a real date; every recorded construction end is a season. Whether a project is on schedule is the City own assessment, published here as the City own assessment and not independently checked.",
        "no_project_is_past_its_stated_end": "Measured, and deliberately reported with its ambiguity. No project sits past its own stated end while still incomplete. That is consistent with the City keeping these dates current, and equally consistent with a date being rolled forward whenever a project slips. The record carries no history of previous end dates, so it cannot distinguish the two and neither can this page.",
        "three_district_columns": "The record carries three council district columns and they do not agree on every project. This page reads the one named Council District throughout, publishes the disagreement, and does not resolve it, because switching between them would move money between districts on no stated basis.",
        "district_money_not_split": "A project that spans several council districts, or is recorded as citywide, is never divided between them. The record does not say how the money divides and inventing a split would be our figure, not the City's.",
        "programmes_differ": "The two bond programmes are at different stages of delivery. A single citywide spend rate blends them and describes neither, so both are always shown.",
        "not_a_ranking": "A district with more bond money recorded against it is not better served. Propositions fund particular kinds of asset and those are not evenly spread across the city.",
        "a_project_is_not_a_place": "The coordinate on a project is a single recorded point, not the extent of the work. A street or drainage project covers a corridor that no single pin describes. Where the City publishes a real alignment for a project the map draws that instead of a pin, and citywide programmes are listed beside the map rather than plotted, because their recorded coordinates are a downtown cluster rather than a location of work.",
        "vendors_are_recorded_unevenly": "The City names a consultant or a contractor on some bond projects, in older files published alongside the current master list. That coverage runs backwards in time: it is nearly complete on the 2012 programme, partial on 2017, and absent from the current list. A project with no vendor named here is one the record does not name a vendor for, not one that had none.",
        "approved_is_not_spent": "Approved money is what voters authorised for a project. Expenditure is what the City records having spent so far. Neither is a promise about what the finished work will cost."
    },
    "field_notes": {
        "duplicate_district_columns": {
            "columns": [
                "Council District",
                "CD",
                "CD2"
            ],
            "council_district_eq_cd": 329,
            "cd_eq_cd2": 347,
            "of": 370,
            "used": "Council District",
            "note": "The record carries three council district columns and they do not agree on every project. This tool reads the one named Council District throughout. There is no basis in the record for preferring another, and switching between them would move money between districts, so the disagreement is published rather than resolved."
        },
        "duplicate_budget_column": {
            "columns": [
                "Bond Budget",
                "Bond_Budget2"
            ],
            "agree": 370,
            "of": 370,
            "note": "Bond_Budget2 is identical to Bond Budget on every project. It is not used and adds nothing."
        },
        "contact_column_excluded": {
            "column": "CPO",
            "note": "The record names a capital projects officer and a direct phone number on every project. It is read by nothing here and appears in no cube, CSV or API response. Same rule as the permit record, which mixes company names with private individuals: this tool aggregates, and republishing 50 named City staff with their direct lines is not what it is for."
        },
        "no_data_dictionary": {
            "checked": "2026-08-30",
            "note": "Unlike the building permits package, this one publishes no data dictionary; its eleven resources are all format variants of the same layer. So nothing in the record documents what separates the Total and Bond money pairs, and this tool does not guess."
        }
    },
    "source": {
        "name": "City of San Antonio - Bond Project master list",
        "dataset": "https://data.sanantonio.gov/dataset/bond-project",
        "resource": "843caeb3-389d-416b-a78e-73e82975ec72",
        "api": "https://data.sanantonio.gov/api/3/action/datastore_search_sql",
        "cadence": "The City states this list is updated monthly."
    }
}