San Antonio Crime Data API
A versioned, read-only public API over the same reconciled SAPD offence data that powers our crime map. JSON and CSV, open CORS, an OpenAPI 3.1 spec, and no key required.
What this is
A read-only, versioned public API over the same reconciled dataset that powers our San Antonio crime map: roughly 42 months of SAPD reported offences (NIBRS Group A), cleaned and aggregated to 62 ZIP codes. It is rebuilt monthly and reconciled against an independent row count at build time, so a partial extract is never published. We built it the way we build data systems on contract: versioned, documented, provenance-carrying, and honest about its limits.
curl -s https://brandshyp.org/api/v1/crime
Endpoints
Every endpoint is a GET, needs no key, and sets Access-Control-Allow-Origin: *.
Press Run to call the live endpoint from your browser and see the real response below.
Discovery document: coverage, provenance, the integrity guarantee, and links to everything else.
The full offences cube: counts by ZIP, month, and offence type, plus the analysis series.
The same cube as a tidy CSV, one row per ZIP / month / offence.
ZIP boundary SVG paths, centroids, and area in square miles.
ZIP directory: code, general area name, ACS population, and area in square miles.
OpenAPI 3.1 description of this API, machine-readable. Import it into your own tooling.
The data model
The cube is compact on purpose. Arrays are index-aligned: zips[i] has population
pop[i]. Non-zero counts live in cells, each a 4-tuple
[zipIndex, codeIndex, monthIndex, offences]; codes, groups,
and months are the lookup axes. This keeps 42 months across
62 ZIP codes in a single small download. The full field list is in the
OpenAPI spec.
What the data can and cannot tell you
These are reported offences, not convictions, and not all crime. The source has no latitude, longitude, or street address, so the finest geography is the ZIP code, and a ZIP code is a mail-delivery boundary, not a neighbourhood. The full methodology, the denominator traps, and the analysis behind the numbers are documented on the crime map page. Data last built 2026-07-13.
Part of a small API platform
This sits alongside our compliance data API
(DISA STIG to NIST 800-53, and the NIST 800-171 controls) under one versioned namespace. See the
developer portal for everything, or the
machine index at https://brandshyp.org/api/v1.
Have a messy public dataset you need to trust?
Tell us what you are working with and we will show you how we would handle it. No spam.