{
  "api_version": "v1",
  "name": "SAPD ZIP-Year Public Safety Outcomes JSON service",
  "base_url": "https://sapd-zip-arrest.netlify.app/data/api/v1",
  "records": 298,
  "unique_zips": 78,
  "year_coverage": [
    2023,
    2024,
    2025,
    2026
  ],
  "endpoints": {
    "summary": "/data/api/v1/summary.json",
    "methodology": "/data/api/v1/methodology.json",
    "schema": "/data/api/v1/schema.json",
    "source_audit_2025": "/data/api/v1/source-audit/2025.json",
    "all_records": "/data/api/v1/records.json",
    "year": "/data/api/v1/years/{year}.json",
    "zip": "/data/api/v1/zips/{zip}.json",
    "zip_year": "/data/api/v1/records/{zip}-{year}.json"
  },
  "clean_aliases": {
    "summary": "/api/v1/summary",
    "methodology": "/api/v1/methodology",
    "source_audit_2025": "/api/v1/source-audit/2025",
    "year": "/api/v1/years/{year}",
    "zip": "/api/v1/zips/{zip}",
    "zip_year": "/api/v1/records/{zip}/{year}"
  },
  "ghost_pro": {
    "recommended_fetch_pattern": "https://sapd-zip-arrest.netlify.app/data/api/v1/zips/{zip}.json",
    "html_card_file": "/ghost/sapd-zip-query-ghostpro.html",
    "web_only_note": "JavaScript-backed HTML cards work on the Ghost website but not inside email clients; include a normal dashboard link in newsletters."
  },
  "interpretation_statement": "The 2025 ZIP analysis includes 59,155 arrest-source rows and 135,285 offense-source rows assigned to 76 ZIP areas. The original source files contain 59,505 arrest rows and 136,708 offense rows for 2025. Approximately 0.59% of arrest rows and 1.04% of offense rows were not represented in the ZIP-level outcome table. Source rows are not equivalent to unique reports: the arrest data contains 37,247 unique Report IDs, while the offense data contains 125,125 unique Report IDs. The arrests-per-100-offenses measure is an aggregate row-count ratio and must not be interpreted as a clearance rate."
}
