{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/crimescore-io/json-schema/crimescore-io-score-response-schema.json",
  "title": "ScoreResponse",
  "x-generated": "2026-10-30",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/crimescore-io-openapi.yaml#/components/schemas/ScoreResponse",
  "oneOf": [
    {
      "$ref": "#/$defs/CoordinateScoreResponse"
    },
    {
      "$ref": "#/$defs/ZctaScoreResponse"
    }
  ],
  "$defs": {
    "CoordinateScoreResponse": {
      "type": "object",
      "required": [
        "geoid",
        "resolved",
        "safety_score",
        "safety_grade",
        "components",
        "data"
      ],
      "properties": {
        "geoid": {
          "type": "string",
          "description": "Census block group FIPS code (12 digits)"
        },
        "resolved": {
          "type": "object",
          "required": [
            "lat",
            "lng",
            "state",
            "county_fips"
          ],
          "description": "Resolved coordinate lookup metadata",
          "properties": {
            "lat": {
              "type": "number",
              "description": "Input latitude"
            },
            "lng": {
              "type": "number",
              "description": "Input longitude"
            },
            "state": {
              "type": "string",
              "description": "State abbreviation"
            },
            "county_fips": {
              "type": "string",
              "description": "3-digit county FIPS code"
            }
          }
        },
        "safety_score": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100,
          "description": "Safety score: 0 (lowest safety) to 100 (highest safety)"
        },
        "safety_grade": {
          "type": "string",
          "enum": [
            "A",
            "B",
            "C",
            "D",
            "F"
          ],
          "description": "Letter grade: A (safest) through F (most dangerous)"
        },
        "components": {
          "type": "object",
          "description": "Sub-score breakdown returned by `/score`",
          "additionalProperties": {
            "type": "number"
          }
        },
        "data": {
          "type": "object",
          "required": [
            "census_vintage",
            "model_version"
          ],
          "properties": {
            "census_vintage": {
              "type": "string",
              "description": "Identifier for the public context-data release used by this scoring release"
            },
            "model_version": {
              "type": "string",
              "description": "Scoring model version"
            }
          }
        }
      }
    },
    "ZctaScoreResponse": {
      "type": "object",
      "description": "ZIP code estimate computed as a population-weighted rollup of covered\nCensus block-group scores. ZCTAs are Census approximations of USPS ZIP\ndelivery areas, so this response is less precise than a coordinate\nlookup and is not a direct observed crime rate for a USPS ZIP route.\n",
      "required": [
        "zcta",
        "resolved",
        "safety_score",
        "safety_grade",
        "components",
        "data"
      ],
      "properties": {
        "zcta": {
          "type": "string",
          "description": "Census ZIP Code Tabulation Area code"
        },
        "resolved": {
          "type": "object",
          "required": [
            "zip"
          ],
          "description": "Resolved ZIP code lookup metadata",
          "properties": {
            "zip": {
              "type": "string",
              "description": "Input ZIP code resolved as a Census ZCTA"
            }
          }
        },
        "safety_score": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100,
          "description": "Estimated safety score: 0 (lowest safety) to 100 (highest safety)"
        },
        "safety_grade": {
          "type": "string",
          "enum": [
            "A",
            "B",
            "C",
            "D",
            "F"
          ],
          "description": "Estimated letter grade: A (safest) through F (most dangerous)"
        },
        "components": {
          "type": "object",
          "description": "Population-weighted component rollups returned by `/score`",
          "additionalProperties": {
            "type": "number"
          }
        },
        "data": {
          "type": "object",
          "required": [
            "census_vintage",
            "model_version",
            "block_group_count"
          ],
          "properties": {
            "census_vintage": {
              "type": "string",
              "description": "Identifier for the public context-data release used by this scoring release"
            },
            "model_version": {
              "type": "string",
              "description": "Scoring model version"
            },
            "block_group_count": {
              "type": "integer",
              "description": "Number of scored block groups used in the ZIP code estimate"
            }
          }
        }
      }
    }
  }
}