Crash Record - /v1/crashes
| Field | Type | NHTSA Source | Coverage | Notes |
|---|---|---|---|---|
case_id | string | STATE + ST_CASE + YEAR | 100% | Formatted as "Texas-2023-480100". Unique per crash. |
st_case | int | ACCIDENT.ST_CASE | 100% | NHTSA's case number. Unique within a state+year. |
year | int | ACCIDENT.YEAR | 100% | 2017–2023 in current dataset. |
date | date | MONTH + DAY | 100% | ISO format. All dates fall within the expected year. |
time | string | HOUR + MINUTE | 99.2% | "HH:MM" format. 1,171 crashes have unknown time (coded 99:99 by NHTSA). |
day_of_week | string | DAY_WEEK | 100% | "Monday" through "Sunday". |
fatalities | int | ACCIDENT.FATALS | 100% | Always >= 1. Range: 1–13. Average: 1.09. |
drunk_drivers | int | Computed from VEHICLE.DR_DRINK | 100% | Count of vehicles with impaired driver. 27% of crashes have >= 1. |
number_of_vehicles | int | ACCIDENT.VE_TOTAL | 100% | Includes parked vehicles if struck. |
location.latitude | float | ACCIDENT.LATITUDE | 99.6% | WGS84. Range: 19.06–71.30. 635 nulls. |
location.longitude | float | ACCIDENT.LONGITUD | 99.6% | WGS84. Range: -165.41 to -67.10. |
location.state | string | STATENAME | 100% | 51 values: 50 states + District of Columbia. |
location.county | string | COUNTYNAME | 100% | NHTSA format: "HARRIS (201)". Includes county FIPS code. |
location.city | string | ACCIDENT.CITYNAME | ~52% | Decoded city name. 'NOT APPLICABLE' filtered to null. |
conditions.weather | string | WEATHER / WEATHER1 | 100% | Clear (73%), Cloudy (13%), Rain (7%), Not Reported (4%), Fog (1%), Snow (1%). |
conditions.light | string | LGT_COND | 100% | Daylight (45%), Dark-Not Lighted (27%), Dark-Lighted (22%), Dusk (2.5%), Dawn (1.8%). |
manner_of_collision | string | MAN_COLL | 100% | Top: Not a Collision w/ MV (60%), Angle (18%), Front-to-Front (11%), Front-to-Rear (7%). |
road.function_class | string | FUNC_SYS | ~95% | e.g., "Urban - Principal Arterial - Interstate". Rural/Urban + road hierarchy. |
flags.hit_and_run | bool | Computed from VEHICLE.HIT_RUN | 7.2% true | True if any involved vehicle fled. Null means no vehicle flagged (treat as false). |
flags.school_bus_related | bool | ACCIDENT.SCH_BUS | 100% | Rare - less than 0.3% of crashes. |
Fields NOT in the crash response (and why)
- road_surface - Removed by NHTSA from the ACCIDENT table in 2020+. No replacement at crash level.
- speed_limit - Moved to VEHICLE table (
VSPD_LIM). Available per-vehicle, not per-crash, because different vehicles in the same crash may be on roads with different speed limits.
Vehicle Record - nested in crash detail
| Field | Type | NHTSA Source | Coverage | Notes |
|---|---|---|---|---|
make | string | VEHICLE.MAKENAME | 100% | Top: Chevrolet, Ford, Toyota, Honda, Dodge. |
model | string | VEHICLE.VPICMODELNAME | 96.6% | "Silverado", "F-150", "Camry". 3.4% fall back to numeric code when VPIC decode fails. |
model_year | int | VEHICLE.MOD_YEAR | ~98% | Range: 1921–2024. Null for unknown. NHTSA codes 9998/9999 filtered to null. |
body_type | string | VEHICLE.BODY_TYPNAME | 100% | NHTSA's verbose labels. Top: "4-door sedan" (26%), "Light Pickup" (16%), "Compact Utility" (14%). |
speed_limit | int | VEHICLE.VSPD_LIM | 95% | Posted speed limit in mph. Filtered: values >= 90 treated as unknown (NHTSA codes). |
travel_speed | int | VEHICLE.TRAV_SP | Low | Estimated travel speed. Often null - this is hard for investigators to determine. |
rollover | bool | VEHICLE.ROLLOVER | 100% | 6.4% of vehicles. Higher for SUVs and pickups. |
fire | bool | VEHICLE.FIRE_EXP | 100% | Post-crash fire. Rare - about 3% of vehicles. |
driver_drinking | bool | VEHICLE.DR_DRINK | 100% | 17.5% of vehicles had a drinking driver. |
Person Record - nested in crash detail
| Field | Type | NHTSA Source | Coverage | Notes |
|---|---|---|---|---|
person_type | string | PERSON.PER_TYP | 99.8% | Driver (63%), Passenger (27%), Pedestrian (8%), Bicyclist (1%). |
age | int | PERSON.AGE | 96.9% | Range: 1–119. Average: 39.9. Values >= 998 filtered to null (unknown). |
sex | string | PERSON.SEX | 97.7% | Male (66%), Female (32%). "Unknown" and "Not Reported" are 2.3% combined. |
injury_severity | string | PERSON.INJ_SEV | 100% | Fatal (45%), No Apparent Injury (26%), Serious (10%), Minor (10%), Possible (7%). |
restraint_use | string | PERSON.REST_USE | ~85% | "Shoulder and Lap Belt", "None Used", "Child Safety Seat", etc. |
alcohol_test_result | float | PERSON.ALC_RES | 24% | BAC as decimal (0.148 = BAC 0.148). Null when test not performed. NHTSA codes 995-999 filtered. Range: 0.000–0.940. |
Understanding BAC coverage
Only 24% of persons have a BAC value. This is not a data quality issue - it reflects reality. BAC tests are typically only administered to drivers suspected of impairment, and to fatally injured persons during autopsy. Passengers with minor injuries are rarely tested. When alcohol_test_result is null, it means the test was not performed, refused, or the result is unknown - not that the BAC was zero.
Road Exposure - road_exposure on crash detail
Returned by GET /v1/crashes/{st_case}/{year} when the crash spatially matched a FHWA HPMS road segment within an 80-meter snap radius. About 80% of US fatal crashes match. Returns null when no segment was found nearby or the matched segment had AADT=0.
| Field | Type | HPMS Source | Coverage | Notes |
|---|---|---|---|---|
aadt | int | AADT | ~80% | Annual Average Daily Traffic on the matched segment, in vehicles per day. Range: 1 to 461,000. |
aadt_truck | int / null | AADT_Combi | ~80% | Combination-truck AADT for the same segment. Useful for fleet/freight analysis. |
f_system | int | F_System | ~80% | 1=Interstate, 2=PA-Other-Freeway, 3=PA-Other, 4=Minor Arterial, 5=Major Collector, 6=Minor Collector, 7=Local. |
f_system_label | string | F_System (decoded) | ~80% | Human-readable functional class label. |
lanes | int / null | Through_La | ~78% | Number of through lanes on the matched segment. |
segment_speed_limit | int / null | Speed_Limi | ~50% | Posted speed limit for the segment. Often null - HPMS coverage of this field varies by state. |
route_id | string | Route_ID | ~80% | HPMS internal route identifier (opaque per-state code, not a human-readable route name). |
snap_distance_m | float | computed | ~80% | Haversine distance from the crash GPS point to the projected nearest point on the segment centerline. Median ~2.5m, p95 ~22m. |
hpms_year | int | computed | ~80% | Source year of the HPMS shapefile. Currently always 2017 (most recent FHWA public release). |
State-level match rate ranges from 64% (Delaware) to 94% (DC). See data coverage for the per-state table and methodology, or the FARS data guide for the spatial join details.
How to cross-reference with NHTSA source data
Every FARS API record can be traced back to the original NHTSA CSV using st_case + year. If you need to verify a data point or access a field we don't expose, download the relevant year's CSV from NHTSA's download page and join on ST_CASE.