events

Get event by ID

Returns full detail for a single event. Active events are always returned. Archived events are gated by plan: on plans without analytics access (allow_analytics: false) the request is rejected with 403 when the event's effective start_time (COALESCE(start_time, created_at)) is older than 7 days. Plans with analytics access have no such restriction.

get/events/{id}

Path parameters

idstring required

Response

Event detail

affected_roadsstring[]
archive_reason'observed' | 'stale_sweep' | 'null' nullable

How the event was archived. NULL while status='active'; set alongside archived_at at archival time.

  • observed — upstream returned a clean response and the event was not in it, so the per-poll archival path retired it. This is the normal case.
  • stale_sweep — the per-poll path could not retire the event because upstream responses were empty or errored (so we cannot prove the event is gone vs. a transient outage). After roughly poll_interval × sweep_factor with no fresh observation (default factor = 15), a safety-net sweep forces the event to archived. A persistently high stale_sweep ratio on a source signals that the upstream feed often fails to emit clearance records or is unreliable in general — treat the archived_at for such events as "presumed gone by", not a precise end timestamp.
archived_atstring date-time nullable

Set the moment our sweep first observed the event missing from the upstream feed.

created_atstring date-time
descriptionstring
directionstring nullable
effective_end_timestring date-time nullable

Best available end time for the event. Equals end_time when the upstream feed reported one; otherwise falls back to archived_at (the moment our sweep first observed the event had disappeared from the feed). NULL only for active events with no upstream-reported end — i.e., events that are still ongoing. Use this field for "incident duration" analytics.

end_timestring date-time nullable

Upstream-reported end time. NULL for events the upstream feed never assigned an explicit end (the common case — most 511 feeds simply drop resolved incidents rather than emitting a final timestamp).

estimated_end_timestring date-time nullable
estimated_start_timestring date-time nullable
idstring
jurisdictionstring
lanes_affectedstring nullable
last_updatedstring date-time
latitudenumber
locationobject

GeoJSON geometry (Point, LineString, or Polygon) describing where the event applies.

longitudenumber
metadataobject

Raw upstream attributes preserved as opaque JSON. Shape varies by source.

road_class'interstate' | 'us_highway' | 'state_highway' | 'local'
severity'minor' | 'moderate' | 'major' | 'critical'
sourcestring

Jurisdiction code

source_created_atstring date-time nullable

Upstream-reported creation timestamp, when available.

source_idstring
source_updated_atstring date-time nullable

Upstream-reported last-modified timestamp, when available.

start_timestring date-time
status'active' | 'archived'
sub_type'accident' | 'disabled_vehicle' | 'debris' | 'hazard' | 'congestion' | 'police_activity' | 'fire' | 'spill' | 'animal' | 'roadwork' | 'maintenance' | 'bridge_work' | 'utility_work' | 'full_closure' | 'ramp_closure' | 'lane_closure' | 'bridge_closure' | 'seasonal_closure' | 'ice' | 'snow' | 'flooding' | 'high_wind' | 'fog' | 'avalanche' | 'weight' | 'height' | 'width' | 'length' | 'hazmat' | 'chain_control' | 'icy' | 'snow_covered' | 'wet' | 'slush' | 'dry' | 'sporting' | 'parade' | 'concert'

Optional additive second-level classification under type (e.g. type=incident, sub_type=accident). Omitted when the event could not be classified. Never replaces type — existing type filters are unaffected.

titlestring
type'incident' | 'construction' | 'closure' | 'special_event' | 'weather' | 'road_condition' | 'planned' | 'hazard'

Changes