Query geolocated world event signals
3 tokens minimum per request; above 30 rows, 1 token per 10 rows returned (rounded up); meta.tokens.charged is what the page cost. Supports cursor pagination via meta.next_cursor: follow it until it is null to read every matching signal (meta.total_count is exact — there is no cap on how many you can page through; each page is charged by its rows). meta.coverage reports what the bbox holds relative to the corpus (and how many signals exist worldwide for the same window), so an empty or thin result can be told apart from a quiet world. Plan-dependent: on a plan without the full event detail (Free) the reported facts beyond the casualty counts are withheld, and each of the collection reasoning (with the GEOINT score), the market reasoning, the full source list and the relations opens on its own per plan; plan_lock names what was withheld and plan_lock.section_plans the plan that opens each part — a null there means not shown, not unknown (the same rule as the app and the public event pages). A signal that is one incident of a larger sequence names that sequence in sequence_parents (the Watchfloor list's "Part of …" line). The filters are the app's — the Watchfloor's and the Map's Signals panel, which are the same (date range or time window, search, sequences, category, stage, severity, impact, reach, threat vector, confirmation, observable from orbit, publishers, market, location, sort) — with the same choices and the same rules; nothing the app does not offer is accepted, and a retired parameter is refused with its replacement named. Filters beyond category and sequences_only on the Watchfloor — q, stages, min_severity_band, min_impact, reach, threat_vector, confirmation, observable_from_orbit, min_publishers, markets and placement — need a plan with event filters (not Free), and linked_to and sort=geoint each need a plan that includes them; without them they are not applied and meta.filter_clamp lists the ones dropped, with required_plans naming the plan that opens each.
Request
- Base URL: https://offnadir-delta.com
- URL: https://offnadir-delta.com/api/v1/signals
- Auth: one of:
- HTTP bearer
- API key in header X-API-Key
Query parameters
Bounding box "minLon,minLat,maxLon,maxLat" (WGS84). Omit for worldwide.
Date range start, YYYY-MM-DD (UTC) — the Watchfloor date range. Give with end_date, or neither for the recent window. The event record starts on 2026-09-23: a range before that date returns no events because none were recorded, not because none happened. The range is bounded by the key owner's plan — without real-time it ends yesterday, without the date range it ends on the latest readable day, and it never starts before the plan's history floor; meta.window_clamp says what was narrowed.
Date range end, YYYY-MM-DD (UTC), inclusive.
The Watchfloor time window: last reported in the last 15 min / hour / 24 hours. Default 24h when no date range is given. 15m and 1h need real-time; without it the 24 hours to the end of the latest readable day are used and meta.filter_clamp says so.
Comma-separated category filter — the Watchfloor Category. Omit for all. Six categories are events made from a measurement or an official record, not from reporting: thermal_anomaly (heat sources measured by satellite), transit_anomaly (ship transits or port calls off their own recent level), nightlight_anomaly (night lights over a city below half of its own usual level), so2_anomaly (sulfur dioxide above background around a volcano with an ash advisory), quake_exposure (an earthquake with registered facilities within a set distance — distances, not shaking or damage) and cyclone_exposure (registered places inside the forecast tropical-storm-force wind radii of an Atlantic or eastern Pacific cyclone — a forecast, not an observation). They carry measured=true and measured_kind, state what was recorded and never a cause.
The Watchfloor search: title, summary, place, country and category. Every word must match; "two words" keeps the order; -word excludes. At most 300 characters.
Comma-separated location stages (reported, localized, pinpointed): reported = country or province only, localized = town or city, pinpointed = street block or facility.
The Watchfloor Severity filter: severity_band at least this (4 / 6 / 9).
The Watchfloor Publishers reporting filter (2 / 3 / 5). Breadth of reporting, not independent confirmation.
Comma-separated market-impact filter (oil, natural_gas, grain, shipping, defense, metals, semiconductors, fx, equities): only signals AI-tagged as exposing these markets via a direct physical/supply channel. Informational only — not investment advice. Omit for all.
The Watchfloor Location filter: all (default), map (precise enough to draw as a point) or list (placed only to a country or province). With a bbox, signals holds only events with a point inside it; events without a point whose country overlaps the bbox come separately in country_level_signals (the first 10, counted in meta.country_level) — placement=list returns all of those, paged. Without a bbox, list and all cover the whole world.
The Watchfloor "Filter to these events" on a connector: only events that share it. One stored connector the events share: facility:<entity_id> (from search_entities or get_related_events), place:<place_key> (from get_related_events), actor:<name> (a name in a signal's actors, case-insensitive), measured:any (events with a measurement recorded at the same place) or measured:<event_id> (the reports at the place of one measured event). Needs a plan that includes it (meta.filter_clamp.required_plans names the plan when it is dropped).
The Watchfloor Impact filter: the Delta Impact Scale level at least this (1 / 2 / 3 / 4 / 5) — the highest public threshold the reported figures cross. Events with no reported figure (no level) are left out.
The Watchfloor Reach filter, comma-separated (local, regional, international).
The Watchfloor Threat vector filter, comma-separated (aerial, ground, maritime, cyber, economic, political).
The Watchfloor Confirmation filter, comma-separated (reported, claimed, disputed): reported, claimed only by the side said to have done it, or disputed.
The Watchfloor Observable from orbit filter: true = only events satellite imagery can show (collection.observable is true).
The Watchfloor Sequences filter: true = only the events that bring together several separate incidents (each incident is its own event in the default list; a sequence is not listed by default). On every plan.
The Watchfloor "Near my places" for one place: only events linked to this watch (id from GET /api/v1/watches) — the same up-to-100 most recent events the Watchlist shows for that place, area or event. Another account’s watch, or an unknown id, is 404. meta.watch_linked_events says how many events the watch links; the other filters and the window still apply.
The Watchfloor Sort: latest (default), oldest, or geoint (Imaging value: a satellite could see it first, then the GEOINT score, then how finely the place is known). geoint, like the GEOINT score itself, needs a plan that includes it; without it latest is used and meta.filter_clamp says so.
Differential fetch: only signals refolded at/after this ISO 8601 timestamp. Narrows the window rather than replacing it; signals carry last_updated_at.
Max rows per page (1-500, default 100).
Opaque cursor from meta.next_cursor. Bound to the query it came from.
Response
A page of signals.
Changes
No recorded changes to this operation across all 1 revision of this API.