---
title: "Get event by ID"
method: GET
path: "/events/{id}"
tags: ["events"]
---

# Get event by ID

`GET /events/{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.

## Path parameters

- `id` string, required

## Response `200`

Event detail

- TrafficEvent
  - `affected_roads` string[]
  - `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_at` string, date-time, nullable — Set the moment our sweep first observed the event missing from the upstream feed.
  - `created_at` string, date-time
  - `description` string
  - `direction` string, nullable
  - `effective_end_time` string, 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_time` string, 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_time` string, date-time, nullable
  - `estimated_start_time` string, date-time, nullable
  - `id` string
  - `jurisdiction` string
  - `lanes_affected` string, nullable
  - `last_updated` string, date-time
  - `latitude` number
  - `location` object — GeoJSON geometry (Point, LineString, or Polygon) describing where the event applies.
  - `longitude` number
  - `metadata` object — Raw upstream attributes preserved as opaque JSON. Shape varies by source.
  - `road_class` 'interstate' | 'us_highway' | 'state_highway' | 'local'
  - `severity` 'minor' | 'moderate' | 'major' | 'critical'
  - `source` string — Jurisdiction code
  - `source_created_at` string, date-time, nullable — Upstream-reported creation timestamp, when available.
  - `source_id` string
  - `source_updated_at` string, date-time, nullable — Upstream-reported last-modified timestamp, when available.
  - `start_time` string, 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.
  - `title` string
  - `type` 'incident' | 'construction' | 'closure' | 'special_event' | 'weather' | 'road_condition' | 'planned' | 'hazard'

## Other responses

- `403` — Archived event beyond the caller's plan window.
- `404` — Event not found

---

[API](https://skmtc.dev/road511/apis/road511-traffic-api.md) · [All operations](https://skmtc.dev/road511/apis/road511-traffic-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/road511/road511-traffic-api/revisions/be5f6cd4179b/schema)
