# Atlanta Transit Alerts - full reference > An unofficial public archive of MARTA train, streetcar, and bus service alerts plus bot-detected disruptions. Not affiliated with MARTA. This file expands on [/llms.txt](https://atlantatransitalerts.app/llms.txt) with the core data schema an agent needs to consume the API. ## What this site is Official alerts and independent bot detections are combined into unified "incidents." An official alert and the bot observation(s) describing the same disruption on the same line or route within a couple of hours are paired server-side into one incident. The site is a static React app on GitHub Pages; the same JSON it renders is published for reuse. Every incident has a `kind` of `train` or `bus`. Train routes use MARTA line names such as `red`, `gold`, `blue`, `green`, and `streetcar`. Bus routes use MARTA route numbers/identifiers. JSON timestamps are epoch milliseconds; CSV timestamps are ISO 8601 UTC. ## Endpoints - Recent incidents JSON (bounded: active โˆช last 93 days): https://data.atlantatransitalerts.app/alerts-recent.json - Data index JSON (manifest of monthly + per-line archive files): https://data.atlantatransitalerts.app/alerts-index.json - Monthly archive shard JSON (by America/New_York month of first_seen): https://data.atlantatransitalerts.app/alerts/.json - Per-line all-time JSON: https://data.atlantatransitalerts.app/incidents/by-line/.json - Aggregates JSON (year-over-year: yoy.overall + by_mode.{train,bus}): https://data.atlantatransitalerts.app/aggregates.json - Incidents JSON (deprecated full-history file; migrate to the recent + index files above): https://data.atlantatransitalerts.app/alerts.json - Accessibility outages JSON: https://data.atlantatransitalerts.app/accessibility.json - Daily counts JSON: https://data.atlantatransitalerts.app/daily-counts.json - Incidents CSV: https://data.atlantatransitalerts.app/alerts.csv - Data changelog: https://atlantatransitalerts.app/data/CHANGELOG.md - Atom feed: https://atlantatransitalerts.app/feed.xml - Per-line/per-route Atom feeds: `/feed/line/.xml`, `/feed/route/.xml` - JSON feed: https://atlantatransitalerts.app/feed.json - API catalog: https://atlantatransitalerts.app/.well-known/api-catalog Regenerated whenever the underlying data changes. ## accessibility.json shape The top-level array is `outages` - one object per elevator/escalator/entrance outage captured from MARTA service alerts. ```jsonc { "schema_version": 1, "generated_at": 1715200000000, "data_start_ts": 1710000000000, "window_days": 180, "outages": [ { "id": "marta-Alert:MARTA:alert-123", "agency": "marta", "station": { "slug": "midtown-station", "name": "Midtown", "lines": ["gold", "red"] }, "unit_type": "elevator", "unit_label": "to the platform", "headline": "...", "description": "...", "lifecycle": { "first_seen_ts": 1715199000000, "restored_ts": null, "active": true, "duration_ms": null }, "source_url": "https://..." } ] } ``` ## Incident shape The top-level array is `incidents` - one object per real-world disruption. The same object shape is used by every incidents file: `alerts-recent.json`, the monthly `alerts/.json` shards, the per-line `incidents/by-line/.json` files, and the deprecated full-history `alerts.json`. Only the scope of the array differs. ```jsonc { "generated_at": 1715200000000, "data_start_ts": 1707350400000, "incidents": [ { "id": "3k2j...", "kind": "train", "routes": ["red"], "first_seen_ts": 1715199000000, "resolved_ts": null, "active": true, "sources": ["official", "bot"], "official": { "alert_id": "...", "headline": "...", "short_description": "...", "post_url": "https://bsky.app/profile/.../post/...", "resolved_reply_url": null, "first_seen_ts": 1715199000000, "resolved_ts": null, "active": true, "affected_from_station": null, "affected_to_station": null, "affected_direction": null, "mentioned_stations": [], "affected_stations": [], "agency_event_start_ts": null, "agency_event_end_ts": null }, "observations": [ { "id": 12345, "detection_source": "pulse-cold", "signals": ["gap", "bunching"], "from_station": "Five Points", "to_station": "Georgia State", "stations": ["Five Points", "Georgia State"], "direction_label": "eastbound", "ts": 1715199000000, "onset_ts": 1715197860000, "resolved_ts": 1715202600000, "duration_ms": 4740000, "active": false, "post_url": "https://bsky.app/profile/.../post/...", "resolved_post_url": null, "bot_description": "...", "onset_description": "...", "evidence": { "updates": [ { "ts": 1715202600000, "description": "๐ŸšŒ Route 110 ยท still no buses observed โ€” ~3h in, ~5 scheduled trips missed.", "post_url": null, "evidence": { "elapsedMin": 180, "headwayMin": 35, "missedTrips": 5 } } ] } } ] } ] } ``` The `official` and `agency_event_*` field names are legacy schema names for the official-alert slot. In Atlanta data they refer to MARTA alerts. ## alerts.csv columns One row per alert or observation, with an explicit `type` column: ```text type, id, kind, routes, headline, detection_source, signals, from_station, to_station, direction, direction_label, first_seen_ts, onset_ts, resolved_ts, duration_minutes, active, post_url, resolved_post_url ``` Timestamps are ISO 8601 UTC. `routes` and `signals` are semicolon-separated when multi-valued. `onset_ts` is the disruption start for absence-style observations and is blank when not back-dated. ## detection_source glossary - `gap` - a longer-than-expected gap between trains/buses on a route and direction. - `bunching` - vehicles arriving clustered together after a gap. - `ghost` - scheduled service that never materialized. - `pulse-held` - a vehicle held stationary mid-route. - `pulse-cold` - a platform or segment that went cold. - `thin-gap` - a smaller gap flagged with back-dated onset. - `roundup` - multiple simultaneous signals summarized into one observation (`signals[]` populated). ## Etiquette Public data, no auth. Please cache responses, don't poll faster than every few minutes, and credit the project if you build something public. Breaking changes to the shape are recorded in the data changelog. Source and field-by-field JSDoc: https://github.com/cailinpitt/atlanta-transit-alerts