| `central.space.alert.<product_id>` | `swpc_alerts` | `<product_id>` is the NOAA SWPC product code lowercased, e.g. `a20f` |
| `central.space.kindex` | `swpc_kindex` | Single fixed subject |
| `central.space.proton_flux` | `swpc_protons` | Single fixed subject |
| `central.disaster.<eventtype>.<country>` | `gdacs` | `<eventtype>` is GDACS 2-letter code lowercased (`wf`/`fl`/`tc`/`vo`/`dr`/`eq`); `<country>` is country name lowercased + hyphenated, or `unknown` |
| `central.disaster.<eventtype>.removed.<country>` | `gdacs` | Tombstone (subtype before `removed` per §8 canonical pattern) |
| `central.disaster.eonet.<category>.global` | `eonet` | `<category>` is the EONET upstream id lower_snake_case'd (e.g. `wildfires`, `sea_lake_ice`, `severe_storms`); `global` is the literal country-equivalent suffix (no per-country resolution in v1) |
| `central.disaster.eonet.<category>.removed.global` | `eonet` | Tombstone for missing-from-feed events |
| `central.hydro.<parameter_code>.<agency>.<bare_site_no>` | `nwis` | `<parameter_code>` is the 5-digit USGS pcode (`00060` discharge, `00065` gage height, `00010` water temp); `<agency>` is the lowercased agency prefix from `monitoring_location_id` (`usgs`, `mo005`); `<bare_site_no>` is the agency-prefix-stripped site number |
Subscriber wildcard patterns work as expected — e.g. `central.fire.>` for all fire
events, `central.fire.hotspot.>` for satellite hotspots only, `central.fire.>.>` for
two-token depth (NATS `*` matches one token; `>` matches one or more).
---
## 5. Wire format
Central publishes CNCF CloudEvents v1.0 envelopes onto JetStream subjects. A NATS
message body is the JSON-serialized envelope. The inner `data` field carries
| `id` | CE core | str | Same as `Event.id`; serves as the dedup id (`Nats-Msg-Id` header on publish) |
| `source` | CE core | str | Central's source URI (e.g. `"central.echo6.co"`); identifies the publishing Central instance |
| `type` | CE core | str | `"central.<category>.v1"` — derived from the inner `Event.category`. Useful for CE-aware routers; consumers should prefer the NATS `msg.subject` for routing |
| `time` | CE core | str | ISO 8601 timestamp of the underlying event (same as `Event.time`) |
| `time` | str (ISO 8601 UTC) | no | Event-time (upstream timestamp), not processing-time |
| `expires` | str (ISO 8601 UTC) | yes | Adapter-specific expiry (NWS alerts set this; most don't) |
| `severity` | int | yes | `0`–`4` or `None`. Adapter-specific mapping (Green=1/Orange=2/Red=3 for GDACS; FIRMS confidence-driven 1/2/3; etc.) |
| `geo` | object | no | See `Geo` model below |
| `data` | object | no | Adapter-specific upstream payload — see each adapter's section in [§6](#6-per-adapter-reference) |
The `geo` sub-object:
| Field | Type | Nullable | Description |
|---|---|---|---|
| `centroid` | `[float, float]` | yes | **`[lon, lat]` GeoJSON order**, NOT `[lat, lon]`. The single most common consumer bug; check your axis order. |
"title": "COSJF 2026 San Juan National Forest Prescribed Fire Program",
"creator": "stowen",
"pubDate": "Wed, 02 Nov 2022 03:33:16 EDT",
"description": "Last updated: 2026-04-25\n\n\n--- \n\nThe type of incident is Prescribed Fire and involves the following unit(s) San Juan National Forest. \n\n--- \n\nState: Colorado\n\n--- \n\nCoordinates:\n\nLatitude: 37° 16 24.2796 Longitude: 107° 53 34.8822 \n\n--- \n\nNOTE: All fire perimeters and points are approximations. \n\n--- \n\nIncident Overview: The Dolores Ranger District is planning a prescribed fire operation for Wednesday/Thursday 5/20-5/21 for the following area:Salter-Carlyle (1660 acres). This project is located 15 miles east of Cahone, near Salter Y along NFSR 510 in Montezuma and Dolores Counties. See map for more details. San Juan National Forest began broadcast prescribed fire projects in late March, 2026. Project operations take place in spring and fall. The forests in Southwest Colorado are part of a fire-adapted ecosystem, which historically experienced frequent, low intensity fires on a large scale. Prescribed fire replicates that fire regime and increases the area on our landscape that has been burned at low and moderate conditions. These efforts reduce hazardous ground fuels, lessen the risk of unplanned large-scale wildfire, help restore ponderosa pine ecosystems, and improve wildlife habitat. Prescribed fire also reduces the ladder fuels that can carry fire into the canopy, killing mature trees. Prescribed fire smoke may affect your health. For more information, visit Wood smoke and your health.Columbine Ranger District: Beginning in late March, the Columbine Ranger District will begin the following prescribed fire projects as conditions allow. Smoke will be visible from Arboles, Bayfield, Pagosa Springs, as well as the U.S. Highway 160 and 151 corridors near those towns.Sauls Creek: This project area includes multiple potential units totaling approximately 900 acres. This project is located in Sauls Creek near NFSR 608, east of Bayfield and south of Highway 160 in La Plata County. It is part of a larger fuels reduction strategy that has included commercial logging and other fuels reduction work. The Columbine Ranger District completed 255 acres on the Sauls Creek prescribed fire project March 28-29, 2026 and another 314 acres on April 24-25, 2026. Southern HDs Prescribed Fire: This project is approximately 2,000 acres in the Fosset Gulch area (NFSR 613), west of Chimney Rock National Monument in Archuleta County. Units will be burned using ground ignitions and possibly unmanned aircraft systems (drones) as well. In past years the Columbine District burned adjacent units to help reduce wildfire risk to local homes and infrastructure.Pagosa Ranger District:Beginning in early April, the Pagosa Ranger District plans to implement multiple prescribed fire projects in Archuleta County as weather and conditions allow.Brockover-Devil Prescribed Fire: This 2,100-acre project area consists of \"maintenance\" burning, further reducing ground and ladder fuels. This treatment will build on the 2025 fall prescribed fire operations in the area and complement numerous mastication, thinning, and timber harvest treatments. These units are located along NFSR 629 and 923, west of Pagosa Springs and north of Highway 160. The Pagosa Ranger District completed 1,365 acres of this prescribed fire project April 23, 2026.Echo Canyon Prescribed Fire: This 1,139-acre project is located along NFSR 029 southeast of Pagosa Springs and east of Highway 84. In 2018, this project area was the site of commercial thinning, followed by mastication work in 2021 and prescribed fire in 2023. This year, the District hopes to conduct a \"maintenance\" burn to maximize fuel reduction benefits. Eight Mile Mesa Prescribed Fire: This project is located on Eight Mile Mesa (NFSR 651), south of Pagosa Springs and west of Highway 84. 275 acres will be burned to clean up slash and forest litter following a 2022 oak mastication project as well as other hazardous fuels and timber harvest activities.Dolores Ranger District: The Dolores Ranger District plans to begin prescribed fi
"title": "COSJF 2026 San Juan National Forest Prescribed Fire Program",
"description": "Last updated: 2026-04-25 --- The type of incident is Prescribed Fire and involves the following unit(s) San Juan National Forest. --- State: Colorado --- Coordinates: Latitude: 37° 16 24.2796 Longitude: 107° 53 34.8822 --- NOTE: All fire perimeters and points are approximations. --- Incident Overview: The Dolores Ranger District is planning a prescribed fire operation for Wednesday/Thursday 5/20-5/21 for the following area:Salter-Carlyle (1660 acres). This project is located 15 miles east of Cahone, near Salter Y along NFSR 510 in Montezuma and Dolores Counties. See map for more details. San Juan National Forest began broadcast prescribed fire projects in late March, 2026. Project operations take place in spring and fall. The forests in Southwest Colorado are part of a fire-adapted ecosystem, which historically experienced frequent, low intensity fires on a large scale. Prescribed fire replicates that fire regime and increases the area on our landscape that has been burned at low and moderate conditions. These efforts reduce hazardous ground fuels, lessen the risk of unplanned large-scale wildfire, help restore ponderosa pine ecosystems, and improve wildlife habitat. Prescribed fire also reduces the ladder fuels that can carry fire into the canopy, killing mature trees. Prescribed fire smoke may affect your health. For more information, visit Wood smoke and your health.Columbine Ranger District: Beginning in late March, the Columbine Ranger District will begin the following prescribed fire projects as conditions allow. Smoke will be visible from Arboles, Bayfield, Pagosa Springs, as well as the U.S. Highway 160 and 151 corridors near those towns.Sauls Creek: This project area includes multiple potential units totaling approximately 900 acres. This project is located in Sauls Creek near NFSR 608, east of Bayfield and south of Highway 160 in La Plata County. It is part of a larger fuels reduction strategy that has included commercial logging and other fuels reduction work. The Columbine Ranger District completed 255 acres on the Sauls Creek prescribed fire project March 28-29, 2026 and another 314 acres on April 24-25, 2026. Southern HDs Prescribed Fire: This project is approximately 2,000 acres in the Fosset Gulch area (NFSR 613), west of Chimney Rock National Monument in Archuleta County. Units will be burned using ground ignitions and possibly unmanned aircraft systems (drones) as well. In past years the Columbine District burned adjacent units to help reduce wildfire risk to local homes and infrastructure.Pagosa Ranger District:Beginning in early April, the Pagosa Ranger District plans to implement multiple prescribed fire projects in Archuleta County as weather and conditions allow.Brockover-Devil Prescribed Fire: This 2,100-acre project area consists of \"maintenance\" burning, further reducing ground and ladder fuels. This treatment will build on the 2025 fall prescribed fire operations in the area and complement numerous mastication, thinning, and timber harvest treatments. These units are located along NFSR 629 and 923, west of Pagosa Springs and north of Highway 160. The Pagosa Ranger District completed 1,365 acres of this prescribed fire project April 23, 2026.Echo Canyon Prescribed Fire: This 1,139-acre project is located along NFSR 029 southeast of Pagosa Springs and east of Highway 84. In 2018, this project area was the site of commercial thinning, followed by mastication work in 2021 and prescribed fire in 2023. This year, the District hopes to conduct a \"maintenance\" burn to maximize fuel reduction benefits. Eight Mile Mesa Prescribed Fire: This project is located on Eight Mile Mesa (NFSR 651), south of Pagosa Springs and west of Highway 84. 275 acres will be burned to clean up slash and forest litter following a 2022 oak mastication project as well as other hazardous fuels and timber harvest activities.Dolores Ranger District: The Dolores Ranger District plans to begin prescribed fire implementation in early April. During burning operations, smoke may be visible around Manc
"description_html": "Last updated: 2026-04-25\n\n\n--- \n\nThe type of incident is Prescribed Fire and involves the following unit(s) San Juan National Forest. \n\n--- \n\nState: Colorado\n\n--- \n\nCoordinates:\n\nLatitude: 37° 16 24.2796 Longitude: 107° 53 34.8822 \n\n--- \n\nNOTE: All fire perimeters and points are approximations. \n\n--- \n\nIncident Overview: The Dolores Ranger District is planning a prescribed fire operation for Wednesday/Thursday 5/20-5/21 for the following area:Salter-Carlyle (1660 acres). This project is located 15 miles east of Cahone, near Salter Y along NFSR 510 in Montezuma and Dolores Counties. See map for more details. San Juan National Forest began broadcast prescribed fire projects in late March, 2026. Project operations take place in spring and fall. The forests in Southwest Colorado are part of a fire-adapted ecosystem, which historically experienced frequent, low intensity fires on a large scale. Prescribed fire replicates that fire regime and increases the area on our landscape that has been burned at low and moderate conditions. These efforts reduce hazardous ground fuels, lessen the risk of unplanned large-scale wildfire, help restore ponderosa pine ecosystems, and improve wildlife habitat. Prescribed fire also reduces the ladder fuels that can carry fire into the canopy, killing mature trees. Prescribed fire smoke may affect your health. For more information, visit Wood smoke and your health.Columbine Ranger District: Beginning in late March, the Columbine Ranger District will begin the following prescribed fire projects as conditions allow. Smoke will be visible from Arboles, Bayfield, Pagosa Springs, as well as the U.S. Highway 160 and 151 corridors near those towns.Sauls Creek: This project area includes multiple potential units totaling approximately 900 acres. This project is located in Sauls Creek near NFSR 608, east of Bayfield and south of Highway 160 in La Plata County. It is part of a larger fuels reduction strategy that has included commercial logging and other fuels reduction work. The Columbine Ranger District completed 255 acres on the Sauls Creek prescribed fire project March 28-29, 2026 and another 314 acres on April 24-25, 2026. Southern HDs Prescribed Fire: This project is approximately 2,000 acres in the Fosset Gulch area (NFSR 613), west of Chimney Rock National Monument in Archuleta County. Units will be burned using ground ignitions and possibly unmanned aircraft systems (drones) as well. In past years the Columbine District burned adjacent units to help reduce wildfire risk to local homes and infrastructure.Pagosa Ranger District:Beginning in early April, the Pagosa Ranger District plans to implement multiple prescribed fire projects in Archuleta County as weather and conditions allow.Brockover-Devil Prescribed Fire: This 2,100-acre project area consists of \"maintenance\" burning, further reducing ground and ladder fuels. This treatment will build on the 2025 fall prescribed fire operations in the area and complement numerous mastication, thinning, and timber harvest treatments. These units are located along NFSR 629 and 923, west of Pagosa Springs and north of Highway 160. The Pagosa Ranger District completed 1,365 acres of this prescribed fire project April 23, 2026.Echo Canyon Prescribed Fire: This 1,139-acre project is located along NFSR 029 southeast of Pagosa Springs and east of Highway 84. In 2018, this project area was the site of commercial thinning, followed by mastication work in 2021 and prescribed fire in 2023. This year, the District hopes to conduct a \"maintenance\" burn to maximize fuel reduction benefits. Eight Mile Mesa Prescribed Fire: This project is located on Eight Mile Mesa (NFSR 651), south of Pagosa Springs and west of Highway 84. 275 acres will be burned to clean up slash and forest litter following a 2022 oak mastication project as well as other hazardous fuels and timber harvest activities.Dolores Ranger District: The Dolores Ranger District plans to begin prescribed f
},
"time": "2022-11-02T07:33:16Z",
"adapter": "inciweb",
"expires": null,
"category": "fire.narrative.inciweb",
"severity": 0
},
"time": "2022-11-02T07:33:16+00:00",
"type": "central.fire.narrative.inciweb.v1",
"source": "central.echo6.co",
"specversion": "1.0",
"centralcategory": "fire.narrative.inciweb",
"centralseverity": 0,
"datacontenttype": "application/json",
"centralschemaversion": "1.0"
}
```
### nws — National Weather Service alerts
Active alerts from `api.weather.gov` (NWS CAP/Atom alerts): severe weather warnings,
hazard advisories, civil emergencies, public-safety messages. Each event is one
alert with its full CAP-style metadata — onset, expiry, urgency, severity, certainty,
geocoded SAME/UGC region codes, descriptive headline + body.
- **Stream:** `CENTRAL_WX`
- **Subject pattern:** `central.wx.alert.us.<state>.<county|zone>.<code>` or `central.wx.alert.us.unknown`
-`<state>` is 2-letter US state lowercased, parsed from `primary_region`
-`<county|zone>` literal token: `county` if the primary region is a county FIPS code, `zone` if it's a UGC public/fire zone
-`<code>` is the FIPS/UGC code (possibly hyphenated for multi-part codes)
- **Cadence default:** 60s (NWS publishes new alerts at the minute mark)
| `category` | str | no | NWS category (`Safety`, `Met`, `Geo`, etc.) — note: this collides with the Central `category` namespace; this lives inside `data.data.category`, distinct from `Event.category` |
| `effective` | str (ISO 8601) | no | When the alert takes effect |
| `expires` | str (ISO 8601) | no | When the alert expires |
| `onset` | str (ISO 8601) | yes | When the event starts |
| `ends` | str (ISO 8601) | yes | When the event ends |
| `sent` | str (ISO 8601) | no | When the alert was sent |
| `areaDesc` | str | no | Human-readable area description |
| `senderName` | str | no | Issuing office |
| `sender` | str | no | Email of the issuing operator |
"Saratoga PD N. Platte Valley ONLY: Phone outages if 911 does not work call (307)326-8316"
],
"timezone": [
"MDT"
],
"WEAHandling": [
"Public Safety"
],
"CMAMlongtext": [
"There is currently an intermittent phone outage. Direct calls to the Saratoga Police Department are currently being routed to Town Hall staff. Not all 911 calls are going through to emergency dispatchers. If 911 does not work call (307)326-8316 John W Moore ChiefSaratoga Police Department"
]
},
"references": [
],
"senderName": "200645, WY Carbon County, WY Carbon County",
"description": "There is currently an intermittent phone outage. Direct calls to the Saratoga Police Department are currently being routed to Town Hall staff. Not all 911 calls are going through to emergency dispatchers. If 911 does not work call (307)326-8316 John W Moore Chief Saratoga Police Department",
"instruction": "There is currently an intermittent phone outage. Direct calls to the Saratoga Police Department are currently being routed to Town Hall staff. Not all 911 calls are going through to emergency dispatchers. If 911 does not work call (307)326-8316 John W Moore Chief Saratoga Police Department",
- **Event.data fields (active):** mirror of `wfigs_incidents` active fields PLUS:
| key | type | nullable | description |
|---|---|---|---|
| `GISAcres` | float | yes | Polygon's GIS-computed area (different from `IncidentSize` which is the ICS-reported size) |
| `geometry.type` | str | no | `"Polygon"` (or `"MultiPolygon"` for split fires) |
| `geometry.coordinates` | nested list | no | GeoJSON polygon coordinates: `[[[lon, lat], [lon, lat], …]]` for `Polygon`; one extra level of nesting for `MultiPolygon`. Coordinate order is **`[lon, lat]`** per GeoJSON. |
| `raw` | object | no | Full upstream attributes dict (same as `wfigs_incidents` but with extra `poly_*` fields) |
- **Event.data fields (removal):** same as `wfigs_incidents` removal (no polygon
in the tombstone — the incident is gone).
- **Decipherable as-is:** active records are `yes` for the metadata fields and the
centroid; polygon rendering requires a map library.
- **Upstream lookup endpoints:** none beyond the optional IRWIN catalog.
- **Removal semantics:** **yes** — same shape as `wfigs_incidents`.
- **Live example (verbatim from CT104; small active perimeter, ~30 coordinate pairs):**
| `message` | str | no | Full plain-text alert body — includes scale, impact summary, validity window, and operational guidance |
- **Decipherable as-is:** yes. The `message` field is the operational text the
SWPC publishes to its mailing list.
- **Upstream lookup endpoints:** product-id taxonomy is documented at
`https://www.swpc.noaa.gov/products/alerts-watches-and-warnings`. Most consumers
rely on `message` alone for display.
- **Removal semantics:** none. SWPC products supersede each other via the message
body ("THIS SUPERSEDES ANY/ALL PRIOR WATCHES IN EFFECT").
- **Live example (verbatim from CT104):**
```json
{
"id": "A20F|2026-04-24 23:50:43.280",
"data": {
"id": "A20F|2026-04-24 23:50:43.280",
"geo": {
"bbox": null,
"regions": [
],
"centroid": null,
"primary_region": null
},
"data": {
"message": "Space Weather Message Code: WATA20\r\nSerial Number: 1109\r\nIssue Time: 2026 Apr 24 2350 UTC\r\n\r\nWATCH: Geomagnetic Storm Category G1 Predicted\r\n\r\nHighest Storm Level Predicted by Day:\r\nApr 25: G1 (Minor) Apr 26: G1 (Minor) Apr 27: None (Below G1)\r\n\r\nTHIS SUPERSEDES ANY/ALL PRIOR WATCHES IN EFFECT\r\n\r\nNOAA Space Weather Scale descriptions can be found at\r\nwww.swpc.noaa.gov/noaa-scales-explanation\r\n\r\nPotential Impacts: Area of impact primarily poleward of 60 degrees Geomagnetic Latitude.\r\nInduced Currents - Weak power grid fluctuations can occur.\r\nSpacecraft - Minor impact on satellite operations possible.\r\nAurora - Aurora may be visible at high latitudes, i.e., northern tier of the U.S. such as northern Michigan and Maine.",
"product_id": "A20F",
"issue_datetime": "2026-04-24 23:50:43.280"
},
"time": "2026-04-24T23:50:43.280000Z",
"adapter": "swpc_alerts",
"expires": null,
"category": "space.alert",
"severity": 0
},
"time": "2026-04-24T23:50:43.280000+00:00",
"type": "central.space.alert.v1",
"source": "central.echo6.co",
"specversion": "1.0",
"centralcategory": "space.alert",
"centralseverity": 0,
"datacontenttype": "application/json",
"centralschemaversion": "1.0"
}
```
### swpc_kindex — NOAA SWPC planetary K-index
3-hour planetary K-index measurements from NOAA SWPC. The Kp index is the
canonical 0–9 scale for global geomagnetic activity; consumers use it for aurora
forecasting, satellite-ops triage, and HF-propagation predictions.
- The geometry date is the timestamp of the most recent point in EONET's
`geometry[]` timeline; a new geometry point (storm path advances, iceberg
drifts) bumps the dedup key and re-publishes the event with updated geo
- Inner `Event.id` is just `<event_id>` (e.g. `"EONET_10000"`) — stable across
timeline updates so consumers can correlate
- **Event.data fields:**
| key | type | nullable | description |
|---|---|---|---|
| `event_id` | str | no | EONET id (`"EONET_NNNNN"`) |
| `category_id` | str | no | EONET category id, camelCase (e.g. `"seaLakeIce"`) — NOTE: this is the upstream camelCase form, distinct from the snake-case form in the subject token |
| `title` | str | no | Event title |
| `description` | str | yes | Often empty — EONET tends not to populate this |
| `url` | str | no | EONET event page |
| `closed` | str (ISO 8601) | yes | When the event was closed by EONET, or `null` if still open. Default poll excludes closed events; this field will be null on the regular subjects |
| `sources` | list[{id, url}] | no (may be empty) | Upstream attributions — `id` is the source key (e.g. `"GDACS"`, `"IRWIN"`); `url` resolves to the source's own record |
| `magnitudeValue` | float | yes | Optional upstream magnitude (e.g. wildfire acres) — present on some categories, null on most |
| `magnitudeUnit` | str | yes | Units for `magnitudeValue` (e.g. `"acres"`) |
| `latest_geometry_date` | str (ISO 8601) | yes | Same value used in the composite dedup key — exposed so consumers can correlate without parsing the key |
-`<parameter_code>` is the 5-digit zero-padded USGS pcode
-`<agency>` is the lowercased agency prefix from `monitoring_location_id` (typically `usgs`; can be cooperator codes like `mo005` for Missouri Geological Survey wells)
-`<bare_site_no>` is the site number with the agency prefix stripped
| `gdacs` | `central.disaster.<eventtype>.removed.<country>` | `iscurrent_false`, `missing_from_feed` | Two flavors: upstream explicit retirement (`iscurrent: false`), or simply absent from the next poll. Subscriber filtering on `central.disaster.wf.>` catches `central.disaster.wf.removed.<country>` automatically (subtype before `removed`). |
| `eonet` | `central.disaster.eonet.<category>.removed.global` | `missing_from_feed` | Emitted when an event present in a prior poll is absent in the current poll. EONET treats closure as removal. |
| `wfigs_incidents` | `central.fire.incident.removed.<state>` | `fallen_off_current_service` | Emitted when an incident leaves WFIGS Current FeatureServer. |
| `wfigs_perimeters` | `central.fire.perimeter.removed.<state>` | `fallen_off_current_service` | Same flow as incidents. |
| One adapter family | `central.fire.hotspot.>` (firms only) |
| Cross-adapter, same hazard | `central.disaster.>` (gdacs + eonet) |
| One specific subtype across countries | `central.disaster.wf.>` (gdacs WF active + removed) |
| One specific subtype on EONET only | `central.disaster.eonet.wildfires.>` |
| Active events only (suppress removals) | Subscribe to the broad filter and filter client-side on `Event.category` not ending in `.removed` — JetStream subject wildcards don't have negation |
---
## 9. Dedup implementation guide
Central guarantees an `Event.id` that is stable across re-publishes. Use that as
the primary dedup key. JetStream also sets a `Nats-Msg-Id` header on every
published message (same value as `Event.id`); the JetStream server has its own
dedup window for at-least-once delivery, but consumers SHOULD NOT rely on that
alone — implement application-level dedup keyed on `Event.id`.
### 9a. Single-token stable IDs (most adapters)
Adapters whose `Event.id` is itself a stable single token:
| Adapter | Event.id example | Source |
|---|---|---|
| `firms` | `VIIRS_NOAA20_NRT:2026-05-17:2008:33.593:-105.314` | Composite of (satellite, date, time, rounded lat/lon) |
| `swpc_kindex` | `2026-05-12T00:00:00` | Bin timestamp |
| `swpc_protons` | `2026-05-18T05:55:00Z|>=100 MeV` | Timestamp + energy |
**Implementation pattern:** hash `Event.id` into a TTL-bounded set. In-memory LRU
is fine for low-volume consumers; Redis `SETEX` for distributed; Postgres unique
constraint for ingest pipelines.
### 9b. Composite-key adapters (timeline-aware)
| Adapter | Event.id shape | Why composite |
|---|---|---|
| `eonet` | `EONET_NNNNN` (stable across timeline updates); composite dedup tracked in cursors.db as `eonet:<event_id>:<latest_geometry_date_iso>` | Consumers see a stable id; Central's own dedup advances when the upstream timeline (geometry-point dates) advances. Consumers usually want to treat re-published events as updates, not duplicates — index by `Event.id` and overwrite, OR key on `Event.id + Event.data.latest_geometry_date` if you want to preserve every timeline point |
| `nwis` | `<monitoring_location_id>:<parameter_code>:<time_iso>` | Each `(site, param, measurement-time)` triple is distinct — dedup on the full triple to avoid collapsing distinct measurements |
| `wfigs_incidents` / `wfigs_perimeters` removals | `<IrwinID>:removed:<iso_now>` | The same incident can have multiple removal events over time (re-enter / re-fall-off); dedup must include the removal-detection timestamp |
### 9c. Recommended implementation
```python
from collections import OrderedDict
class TTLDedup:
"""Bounded LRU dedup with TTL — appropriate for single-process consumers."""
def __init__(self, max_entries: int = 100_000, ttl_seconds: int = 86400):