San Antonio, TX · Military City, USA UEI L58JZMKRCLM5  ·  CAGE 203C1  ·  NAICS 541511  ·  SAM.gov Active

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.

Quick start
curl -s https://brandshyp.org/api/v1/crime
Base URL
https://brandshyp.org/api/v1
Auth
NonePublic open data, open CORS
Formats
JSON + CSV
Versioning
/api/v1Breaking changes ship under /v2; v1 is additive-only
License
CC BY 4.0City of San Antonio; analysis by BrandShyp
Spec
OpenAPI 3.1Import into your own tooling

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.

GET /api/v1/crime JSON

Discovery document: coverage, provenance, the integrity guarantee, and links to everything else.

open
GET /api/v1/crime/offenses JSON

The full offences cube: counts by ZIP, month, and offence type, plus the analysis series.

open
GET /api/v1/crime/offenses.csv CSV

The same cube as a tidy CSV, one row per ZIP / month / offence.

open
GET /api/v1/crime/geo JSON

ZIP boundary SVG paths, centroids, and area in square miles.

open
GET /api/v1/crime/zips JSON

ZIP directory: code, general area name, ACS population, and area in square miles.

open
GET /api/v1/openapi.json JSON

OpenAPI 3.1 description of this API, machine-readable. Import it into your own tooling.

open
Response appears here. Nothing is sent until you press Run.

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.