{"externalDocs":{"description":"Agent briefing, including which endpoint answers which question","url":"https://rift.news/llms.txt"},"info":{"contact":{"email":"support@rift.news","name":"Rift","url":"https://rift.news/docs"},"description":"The public read API behind rift.news: live hazard events, official warnings, per-country threat readings, energy dependence and the source health behind all of it.\n\nNo key and no account. Calls are rate limited per client address at a burst of 30 with one request per second of refill; over that the answer is 429 with Retry-After. Responses under /api/v1 carry an ETag, so a conditional request gets a 304 instead of the body.\n\nREAD THIS BEFORE QUOTING A COUNT. A zero from this API can mean nothing happened or it can mean a source is down. The two are distinguishable and you are expected to distinguish them: GET /api/v1/freshness reports every source with its last success and whether it is inside its freshness budget. A count reported without checking it can turn a broken feed into an all-clear, which on a hazard map is the worst error available.\n\nEvery event carries the source that published it and that source's own URL. Quote the source, and link back to it rather than to this API. Data belongs to the issuing agencies; the attribution each requires is listed at /terms/ and returned by GET /api/v1/sources.\n\nThis is a monitoring and situational-awareness service. It is not an authority on any warning, and it is not a substitute for a national warning centre.\n\nResponse shapes are documented by description and example rather than by schema. The handlers compose responses directly, so a schema here would be a second hand-written artefact free to drift from the first; the route list, by contrast, cannot drift, because it is produced by walking the router of the process serving this document.","license":{"name":"Source data remains the property of the issuing agencies; see /terms/","url":"https://rift.news/terms/"},"summary":"Live global hazard, warning and threat data from official sources.","title":"Rift API","version":"v1","x-build-sha":"3bff54e7340e7db5098d74fdf22a61bbb369b64e"},"openapi":"3.1.0","paths":{"/api/v1/ai-report/latest":{"get":{"description":"Written from the event record, not from the open web. Always carries the timestamp of the data it was written from.\n\nReturns: An object with the report text and its provenance.","operationId":"get_ai_report_latest","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with the report text and its provenance."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Latest generated situation report","tags":["Assessment"]}},"/api/v1/ai-report/pipeline-status":{"get":{"description":"Whether generation is current, running or failing, so a stale report can be recognised as stale.\n\nReturns: An object describing the pipeline state.","operationId":"get_ai_report_pipeline_status","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object describing the pipeline state."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"State of the report generation pipeline","tags":["Assessment"]}},"/api/v1/aircraft/near":{"get":{"description":"Aircraft within 100 nautical miles of lat and lon, rounded to 0.1 degree, from adsb.lol: a count, how many are military, and the nearest 12 with callsign, registration, type, altitude and distance. Aircraft on the PIA or LADD privacy lists are left out. Cached a minute per point; upstream lookups are paced with the server's other adsb.lol requests, and a point whose turn is over 25 seconds away answers 503. A copy older than 5 minutes is never served: an empty sky that is really a failed lookup would read as closed airspace. Data: adsb.lol, ODbL 1.0.\n\nReturns: An object with lat, lon, radius_nm, total, military, aircraft, fetched_at and source.","operationId":"get_aircraft_near","parameters":[{"description":"Latitude in decimal degrees, -90 to 90.","example":"35.68","in":"query","name":"lat","required":false,"schema":{"type":"number"}},{"description":"Longitude in decimal degrees, -180 to 180.","example":"139.69","in":"query","name":"lon","required":false,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with lat, lon, radius_nm, total, military, aircraft, fetched_at and source."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Aircraft near a point","tags":["Geospatial"]}},"/api/v1/alerts":{"get":{"description":"Warnings currently in force, as issued by the warning centres, separate from the event stream. Covers NWS (United States), ECCC (Canada), MeteoAlarm (34 European countries) and Alert-Hub (18 countries in South America, Africa and Central Asia); a country outside those has no official warnings here at all. Each alert carries verification (does it contradict itself) and, from contract v6, corroboration (has an instrument seen it: FIRMS for NWS fire warnings, DART and M6.5+ quakes for tsunami, NHC for tropical storms; not_observed is not a contradiction and observer_down says nothing). Official warning coverage is national and uneven, and a source that is down simply contributes no rows: check /api/v1/freshness before reading an absence of events as calm.\n\nReturns: An object with an alerts array.","operationId":"get_alerts","parameters":[{"description":"Time window to look back over. One of 1h, 6h, 24h, 72h, 7d, 30d, all. Defaults to 24h. Anything else is a 400.","example":"24h","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"Filter to one source id, as listed by /api/v1/sources.","example":"meteoalarm","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"Filter to one hazard class as classified on ingest.","example":"flood","in":"query","name":"hazard_class","required":false,"schema":{"type":"string"}},{"description":"Maximum rows to return. A positive integer; the server applies its own ceiling.","example":"100","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Include alert footprint polygons. true or false; coordinates are rounded either way.","example":"false","in":"query","name":"geometry","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an alerts array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Active official warnings","tags":["Events"]}},"/api/v1/alerts/at":{"get":{"description":"Whether an official warning is in force on a coordinate. status is in_force (a warning's outline, or the outline of a zone it names, holds the point: match outline), check_area (no outline holds the point, and a warning issued without one names an area whose circle reaches it: match area, read the area names), none_in_force (a live feed that draws outlines and carries the whole country answers for it and nothing reaches the point), could_not_check (reason feed_down, no_outlines, partial_feed or lookup_failed) or not_covered (reason no_feed). Only none_in_force means calm. The United States and its territories and Canada can answer none_in_force; MeteoAlarm's European warnings carry no outlines and Alert-Hub relays only some of a country's warnings (partial_feed), so both answer could_not_check when nothing of theirs is on the point. Nothing about the request is stored.\n\nReturns: An object with point, country_iso, status, an optional reason, feed and feeds (every feed that must be live for calm: Canada needs eccc and naad, Alert Ready), and an alerts array in the /alerts shape plus match and, when the issuer gives one, ends_at: when the hazard ends, where expires_at is when the message does.","operationId":"get_alerts_at","parameters":[{"description":"Latitude in decimal degrees, -90 to 90.","example":"35.68","in":"query","name":"lat","required":false,"schema":{"type":"number"}},{"description":"Longitude in decimal degrees, -180 to 180.","example":"139.69","in":"query","name":"lon","required":false,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with point, country_iso, status, an optional reason, feed and feeds (every feed that must be live for calm: Canada needs eccc and naad, Alert Ready), and an alerts array in the /alerts shape plus match and, when the issuer gives one, ends_at: when the hazard ends, where expires_at is when the message does."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Official warnings on one spot","tags":["Events"]}},"/api/v1/alerts/manual":{"get":{"description":"Notices published by this site's operators rather than by an upstream source. Always distinguishable from agency warnings.\n\nReturns: An object with an alerts array, usually empty.","operationId":"get_alerts_manual","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an alerts array, usually empty."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Operator-published notices","tags":["Events"]}},"/api/v1/climate":{"get":{"description":"Daily world sea surface temperature (60S-60N) and near-surface air temperature from Copernicus ERA5 (Climate Pulse), as the latest value, its anomaly against 1991-2020, whether it is the warmest on record for its date, and a year of daily anomalies. El Nino from NOAA CPC: the weekly Nino 3.4 anomaly, the last twelve ONI seasons with phase and strength, and the current ENSO alert status. Any source that is down is null or served from a cache up to 3 days old.\n\nReturns: An object with sea, air, weekly, oni and status members and stale_seconds per stale source.","operationId":"get_climate","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with sea, air, weekly, oni and status members and stale_seconds per stale source."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"World sea and air temperature and El Nino","tags":["Climate"]}},"/api/v1/countries/scores":{"get":{"description":"Current score for every country.\n\nReturns: An object keyed or arrayed by ISO code with each country's score.","operationId":"get_countries_scores","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object keyed or arrayed by ISO code with each country's score."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Current score for every country","tags":["Countries"]}},"/api/v1/countries/threat-index":{"get":{"description":"The same readings as /countries/scores with the index metadata needed to compare them.\n\nReturns: An object with the index and its inputs.","operationId":"get_countries_threat_index","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with the index and its inputs."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Threat index across all countries","tags":["Countries"]}},"/api/v1/countries/{iso}/brief":{"get":{"description":"A short written rundown of the current situation. Generated from the same facts the endpoints above return, with a deterministic floor when the model is unavailable, so this endpoint answers even when generation does not.\n\nReturns: An object with the brief text and the facts it was built from.","operationId":"get_countries_iso_brief","parameters":[{"description":"ISO 3166-1 alpha-3 country code.","example":"JPN","in":"path","name":"iso","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with the brief text and the facts it was built from."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Plain-language brief for one country","tags":["Countries"]}},"/api/v1/countries/{iso}/cities":{"get":{"description":"The capital and up to two other large places, at least 30 km apart, from GeoNames (CC BY 4.0). The country panel asks /api/v1/forecast for each.\n\nReturns: An object with iso and cities: name, lat, lon, IANA time zone, population and whether it is the capital. Empty for a country with none.","operationId":"get_countries_iso_cities","parameters":[{"description":"ISO 3166-1 alpha-3 country code.","example":"JPN","in":"path","name":"iso","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with iso and cities: name, lat, lon, IANA time zone, population and whether it is the capital. Empty for a country with none."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Main cities of one country","tags":["Countries"]}},"/api/v1/countries/{iso}/energy":{"get":{"description":"Covers 79 countries, from a bundled Our World in Data snapshot (2024 figures). Any other country answers 200 with status no_energy_data, which means not covered, not zero. The snapshot's age is in /api/v1/freshness under datasets.\n\nReturns: An object with generation mix, import dependence and coverage metadata.","operationId":"get_countries_iso_energy","parameters":[{"description":"ISO 3166-1 alpha-3 country code.","example":"JPN","in":"path","name":"iso","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with generation mix, import dependence and coverage metadata."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Energy mix and dependence for one country","tags":["Energy"]}},"/api/v1/countries/{iso}/energy-emergency":{"get":{"description":"Whether current events intersect that country's energy dependence in a way that matters.\n\nReturns: An object describing the signal and what drives it.","operationId":"get_countries_iso_energy_emergency","parameters":[{"description":"ISO 3166-1 alpha-3 country code.","example":"JPN","in":"path","name":"iso","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object describing the signal and what drives it."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Energy emergency signal for one country","tags":["Energy"]}},"/api/v1/countries/{iso}/events":{"get":{"description":"Events for one country.\n\nReturns: An object with an events array.","operationId":"get_countries_iso_events","parameters":[{"description":"ISO 3166-1 alpha-3 country code.","example":"JPN","in":"path","name":"iso","required":true,"schema":{"type":"string"}},{"description":"Time window to look back over. One of 1h, 6h, 24h, 72h, 7d, 30d, all. Defaults to 24h. Anything else is a 400.","example":"24h","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"Maximum rows to return. A positive integer; the server applies its own ceiling.","example":"100","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Rows to skip, for paging through a result set.","example":"0","in":"query","name":"offset","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an events array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Events for one country","tags":["Countries"]}},"/api/v1/countries/{iso}/news-clusters":{"get":{"description":"News items grouped into stories, so ten reports of one event read as one story. The last 48 hours, from about 55 English-language feeds; a story is listed under every country that at least two different outlets, state media excluded, name in a headline, and under the country most of its articles name; each story carries also_in, the other countries it is about. An empty list means no multi-source story was resolved, not that nothing happened. unconfirmed lists up to six posts from public Telegram channels that name the country (channel, excerpt, link, time): one channel each, nothing checked.\n\nReturns: An object with a clusters array.","operationId":"get_countries_iso_news_clusters","parameters":[{"description":"ISO 3166-1 alpha-3 country code.","example":"JPN","in":"path","name":"iso","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a clusters array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Clustered news for one country","tags":["Countries"]}},"/api/v1/countries/{iso}/patterns":{"get":{"description":"Recurring patterns detected for one country.\n\nReturns: An object with a patterns array.","operationId":"get_countries_iso_patterns","parameters":[{"description":"ISO 3166-1 alpha-3 country code.","example":"JPN","in":"path","name":"iso","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a patterns array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Recurring patterns detected for one country","tags":["Countries"]}},"/api/v1/countries/{iso}/prepare":{"get":{"description":"The hazard with the most severe event Rift is tracking in this country (active, last 30 days, severity 40 or more), then the most events, then the most recent. A hazard with no official guide is still reported, with guide null, rather than replaced by a lesser one that has a guide. largest null means nothing tracked reached the floor, not that the country is safe: coverage is thin in many places. Guidance is quoted only where confirmed word for word on the live agency page, as in /api/v1/prepare; kit is the emergency-kit guide and national this country's own agency, linked.\n\nReturns: An object with iso, window_days, min_score, largest (category, count, event, guide), kit and national.","operationId":"get_countries_iso_prepare","parameters":[{"description":"ISO 3166-1 alpha-3 country code.","example":"JPN","in":"path","name":"iso","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with iso, window_days, min_score, largest (category, count, event, guide), kit and national."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Largest tracked hazard in one country, and how to prepare for it","tags":["Hazards"]}},"/api/v1/countries/{iso}/resilience":{"get":{"description":"Structural context rather than live events: what this country would face an event with.\n\nReturns: An object with indicator values and their vintages.","operationId":"get_countries_iso_resilience","parameters":[{"description":"ISO 3166-1 alpha-3 country code.","example":"JPN","in":"path","name":"iso","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with indicator values and their vintages."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Resilience and fragility indicators for one country","tags":["Countries"]}},"/api/v1/countries/{iso}/threat":{"get":{"description":"The composite score and the components it is built from, so the number can be argued with rather than only read. Recomputed hourly from this site's own feeds: a country with thin reporting can score low for lack of data rather than lack of risk.\n\nReturns: A threat object with a score and its breakdown.","operationId":"get_countries_iso_threat","parameters":[{"description":"ISO 3166-1 alpha-3 country code.","example":"JPN","in":"path","name":"iso","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"A threat object with a score and its breakdown."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Current threat reading for one country","tags":["Countries"]}},"/api/v1/daily-brief":{"get":{"description":"Today's global brief.\n\nReturns: An object with the brief text, its sections and the time it was generated.","operationId":"get_daily_brief","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with the brief text, its sections and the time it was generated."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Today's global brief","tags":["Assessment"]}},"/api/v1/disputes":{"get":{"description":"Records where two sources disagree, or where automated classification was overruled. Published because a monitoring site that hides its disagreements is asserting more confidence than it has.\n\nReturns: An object with a disputes array.","operationId":"get_disputes","parameters":[{"description":"true to list resolved disputes, false for open ones.","example":"false","in":"query","name":"resolved","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a disputes array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Events whose classification is contested","tags":["Events"]}},"/api/v1/doomsday":{"get":{"description":"One number for the state of the world, with the components that produced it. It is this site's own synthesis and is labelled as such, not a reading of any external body's clock.\n\nReturns: An object with the current score, band and breakdown.","operationId":"get_doomsday","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with the current score, band and breakdown."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Composite global threat clock","tags":["Assessment"]}},"/api/v1/energy/exposure-signal":{"get":{"description":"Where current events meet energy dependence.\n\nReturns: An object with the countries flagged and why.","operationId":"get_energy_exposure_signal","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with the countries flagged and why."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Where current events meet energy dependence","tags":["Energy"]}},"/api/v1/energy/global":{"get":{"description":"Global energy picture.\n\nReturns: An object with the global generation mix and trade dependence.","operationId":"get_energy_global","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with the global generation mix and trade dependence."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Global energy picture","tags":["Energy"]}},"/api/v1/events/nearby":{"get":{"description":"The same feed as /events/recent, restricted to a radius around a coordinate. MeteoAlarm (Europe) warnings sit at the country centre with a 100 km radius, so answers in Europe are approximate. Official warning coverage is national and uneven, and a source that is down simply contributes no rows: check /api/v1/freshness before reading an absence of events as calm.\n\nReturns: An object with response_built_at and an events array, nearest first.","operationId":"get_events_nearby","parameters":[{"description":"Latitude in decimal degrees, -90 to 90.","example":"35.68","in":"query","name":"lat","required":false,"schema":{"type":"number"}},{"description":"Longitude in decimal degrees, -180 to 180.","example":"139.69","in":"query","name":"lon","required":false,"schema":{"type":"number"}},{"description":"Search radius in kilometres from lat/lon.","example":"250","in":"query","name":"radius_km","required":false,"schema":{"type":"number"}},{"description":"Time window to look back over. One of 1h, 6h, 24h, 72h, 7d, 30d, all. Defaults to 24h. Anything else is a 400.","example":"24h","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"Comma-separated category ids to include, for example earthquake,flood. An unknown id is a 400 rather than an empty result, so a typo cannot read as a quiet world.","example":"earthquake,volcanic","in":"query","name":"categories","required":false,"schema":{"type":"string"}},{"description":"Lowest severity score to include, 0 to 100.","example":"40","in":"query","name":"min_score","required":false,"schema":{"type":"integer"}},{"description":"Maximum rows to return. A positive integer; the server applies its own ceiling.","example":"100","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Most rows any single source may contribute, so one talkative feed cannot own the response. Pass 0 with a narrow filter to read one feed in full.","example":"20","in":"query","name":"per_source_cap","required":false,"schema":{"type":"integer"}},{"description":"Include alert footprint polygons. true or false; coordinates are rounded either way.","example":"false","in":"query","name":"geometry","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with response_built_at and an events array, nearest first."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Events near a point","tags":["Events"]}},"/api/v1/events/recent":{"get":{"description":"The main event feed: every hazard and incident recorded in the window, from all sources, scored on one severity scale. Each row carries its source, the source's own URL, the event time and the location. Official warning coverage is national and uneven, and a source that is down simply contributes no rows: check /api/v1/freshness before reading an absence of events as calm.\n\nReturns: An object with response_built_at, a snapshot token and an events array. With a base that is still held, events carries only the rows new or changed since that snapshot, and ids lists every row of the answer in order.","operationId":"get_events_recent","parameters":[{"description":"Time window to look back over. One of 1h, 6h, 24h, 72h, 7d, 30d, all. Defaults to 24h. Anything else is a 400.","example":"24h","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"Comma-separated category ids to include, for example earthquake,flood. An unknown id is a 400 rather than an empty result, so a typo cannot read as a quiet world.","example":"earthquake,volcanic","in":"query","name":"categories","required":false,"schema":{"type":"string"}},{"description":"Lowest severity score to include, 0 to 100.","example":"40","in":"query","name":"min_score","required":false,"schema":{"type":"integer"}},{"description":"Maximum rows to return. A positive integer; the server applies its own ceiling.","example":"100","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Most rows any single source may contribute, so one talkative feed cannot own the response. Pass 0 with a narrow filter to read one feed in full.","example":"20","in":"query","name":"per_source_cap","required":false,"schema":{"type":"integer"}},{"description":"Include alert footprint polygons. true or false; coordinates are rounded either way.","example":"false","in":"query","name":"geometry","required":false,"schema":{"type":"boolean"}},{"description":"The snapshot token of an answer you already hold, with every other parameter unchanged. The answer then lists every row id in order and sends only the rows new or changed since. An unknown or expired token (about 15 minutes) gets a full answer, so check for ids before merging.","example":"3k2j9x0a1b","in":"query","name":"base","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with response_built_at, a snapshot token and an events array. With a base that is still held, events carries only the rows new or changed since that snapshot, and ids lists every row of the answer in order."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Recent events worldwide","tags":["Events"]}},"/api/v1/events/{id}":{"get":{"description":"One event by id.\n\nReturns: A single event record, or 404 if the id is not in the retention window.","operationId":"get_events_id","parameters":[{"description":"Identifier of the record, as returned in the id field of a list response.","example":"usgs:us7000n1a2","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"A single event record, or 404 if the id is not in the retention window."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"One event by id","tags":["Events"]}},"/api/v1/events/{id}/cascades":{"get":{"description":"Predictions the cascade rules made from this event: a big shallow earthquake to a tsunami warning, a disease in one country to a second, a new war on a shipping route to its disruption. Each has its odds (the rule's own track record), a deadline, why, what would prove it wrong and, once graded, the grade. Made and graded from the data, not by a model.\n\nReturns: event_id and cascades (the /predictions/ fields plus rule and prepare, a /prepare/ guide slug), open first, at most 6. 503 if the ledger is not running.","operationId":"get_events_id_cascades","parameters":[{"description":"Identifier of the record, as returned in the id field of a list response.","example":"usgs:us7000n1a2","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"event_id and cascades (the /predictions/ fields plus rule and prepare, a /prepare/ guide slug), open first, at most 6. 503 if the ledger is not running."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"What one event could lead to","tags":["Events"]}},"/api/v1/events/{id}/coverage":{"get":{"description":"Articles tied to the event, newest first, at most 8. An article qualifies only if it belongs to a news cluster resolved to the event's country, names the event's kind of hazard, was published no earlier than an hour before the event began, and, when the country has several current events of that kind, names this event's place. A named tropical cyclone is matched by its name instead, from any cluster, and also carries videos: broadcasters' uploads whose title names the storm, which play in YouTube's embedded player. Also names the live news channel for the event's region (the one a country panel offers), which is a general channel and not coverage of the event.\n\nReturns: event_id, items (headline, source, url, published_at, cluster_id, matched_place), videos (video_id, title, network, published_at; a named storm by its name, any other event by its hazard and its place or country; empty when none match), regional_news (network, channel, region; null when the region has none), window_hours and status: ok, no_country or category_not_matched. 404 if the event is not found.","operationId":"get_events_id_coverage","parameters":[{"description":"Identifier of the record, as returned in the id field of a list response.","example":"usgs:us7000n1a2","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"event_id, items (headline, source, url, published_at, cluster_id, matched_place), videos (video_id, title, network, published_at; a named storm by its name, any other event by its hazard and its place or country; empty when none match), regional_news (network, channel, region; null when the region has none), window_hours and status: ok, no_country or category_not_matched. 404 if the event is not found."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"News coverage of one event","tags":["Events"]}},"/api/v1/events/{id}/reports":{"get":{"description":"Feed reports and news headlines grouped as one real event, lead first, then feeds, then news, then area warnings hung under it. The id may be any report in the pin. total counts every report, warnings included.\n\nReturns: event_id, pin_id, status (ok, or not_unified when the event is not grouped yet and is a pin of one), total, and reports (id, role, why, kind: feed or news, source, title, url, image (the picture the outlet attached, https, omitted when none), observed_at, unavailable when the report has aged out). 404 if the event is not found.","operationId":"get_events_id_reports","parameters":[{"description":"Identifier of the record, as returned in the id field of a list response.","example":"usgs:us7000n1a2","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"event_id, pin_id, status (ok, or not_unified when the event is not grouped yet and is a pin of one), total, and reports (id, role, why, kind: feed or news, source, title, url, image (the picture the outlet attached, https, omitted when none), observed_at, unavailable when the report has aged out). 404 if the event is not found."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Every report in one event's pin","tags":["Events"]}},"/api/v1/events/{id}/story":{"get":{"description":"What the event did on the ground: official warnings issued inside its area while it lasted (floods, tornadoes, landslides, evacuation and shelter orders, internet blackouts), grouped by alert type. Then how its danger moved: a line each time it moved 10 points or its kind changed (a storm becoming a hurricane, a volcano's alert raised). For a developing story between two sides (a build-up, warnings), also the headlines behind it from independent outlets over the last 60 days. Recorded from the data as it changes; history starts when this was added (2026-10-06).\n\nReturns: event_id, effects (null when this kind of event is not looked at; else kind, label, count, first_at, last_at, places, more, sources, event_id when count is 1; oldest first), effects_truncated (true when more than 5,000 alerts matched and the newest were not read), steps (at, title, severity, subcategory; oldest first, at most 30), story (the story key, or empty) and news (headline, url, outlet, kind: news, state for state media, or commentary; published_at; newest first, at most 40). 404 if the event is not found.","operationId":"get_events_id_story","parameters":[{"description":"Identifier of the record, as returned in the id field of a list response.","example":"usgs:us7000n1a2","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"event_id, effects (null when this kind of event is not looked at; else kind, label, count, first_at, last_at, places, more, sources, event_id when count is 1; oldest first), effects_truncated (true when more than 5,000 alerts matched and the newest were not read), steps (at, title, severity, subcategory; oldest first, at most 30), story (the story key, or empty) and news (headline, url, outlet, kind: news, state for state media, or commentary; published_at; newest first, at most 40). 404 if the event is not found."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"The story so far of one event","tags":["Events"]}},"/api/v1/faultlines":{"get":{"description":"The 54 tracked fault systems from GEM Global Active Faults, not every fault, each with a slug that resolves to a detail record and to a page on the site. Recent seismicity is USGS over 30 days.\n\nReturns: An object with a faultlines array.","operationId":"get_faultlines","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a faultlines array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Fault systems catalogue","tags":["Hazards"]}},"/api/v1/faultlines/{slug}":{"get":{"description":"One fault system.\n\nReturns: A fault system record with its geometry reference and recent seismicity.","operationId":"get_faultlines_slug","parameters":[{"description":"URL slug of the system, as returned by the matching index endpoint.","example":"san-andreas","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"A fault system record with its geometry reference and recent seismicity."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"One fault system","tags":["Hazards"]}},"/api/v1/feed":{"get":{"description":"A lighter projection of the event store intended for lists and tickers rather than for the map.\n\nReturns: An object with an events array and a count.","operationId":"get_feed","parameters":[{"description":"Time window to look back over. One of 1h, 6h, 24h, 72h, 7d, 30d, all, or a unix time in seconds to start from. Defaults to 7d. Anything else is a 400.","example":"24h","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"A category id to filter on, or several separated by commas. An unknown id is a 400.","example":"earthquake","in":"query","name":"category","required":false,"schema":{"type":"string"}},{"description":"ISO 3166-1 alpha-3 country code to filter on.","example":"JPN","in":"query","name":"country_iso","required":false,"schema":{"type":"string"}},{"description":"Maximum rows to return. A positive integer; the server applies its own ceiling.","example":"100","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an events array and a count."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Event feed, flattened for display","tags":["Events"]}},"/api/v1/fires":{"get":{"description":"Thermal anomalies from satellite detection. A detection is not a confirmed fire and is labelled as such.\n\nReturns: A GeoJSON FeatureCollection of fires, with gas flares and furnaces (heat that burns in one place every day) split off under flares.","operationId":"get_fires","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"A GeoJSON FeatureCollection of fires, with gas flares and furnaces (heat that burns in one place every day) split off under flares."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Active fire detections","tags":["Hazards"]}},"/api/v1/flashpoints":{"get":{"description":"The geographic areas this system treats as flashpoints, published so the filtering above can be checked.\n\nReturns: An object with a flashpoints array.","operationId":"get_flashpoints","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a flashpoints array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Flashpoint definitions","tags":["Hazards"]}},"/api/v1/forecast":{"get":{"description":"The next 48 hourly steps from MET Norway Locationforecast 2.0 for lat and lon, rounded to 2 decimals (about 1 km) before MET is asked: air temperature, feels-like (wind chill or humidex, as Environment Canada computes them), wind, precipitation and the weather symbol with its plain name. Cached until MET's own Expires; if a refresh fails the last copy is served up to 6 hours old with stale_seconds set. Data: MET Norway, CC BY 4.0.\n\nReturns: An object with lat, lon, updated_at, hours and stale_seconds.","operationId":"get_forecast","parameters":[{"description":"Latitude in decimal degrees, -90 to 90.","example":"35.68","in":"query","name":"lat","required":false,"schema":{"type":"number"}},{"description":"Longitude in decimal degrees, -180 to 180.","example":"139.69","in":"query","name":"lon","required":false,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with lat, lon, updated_at, hours and stale_seconds."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Hourly weather forecast for a point","tags":["Climate"]}},"/api/v1/freshness":{"get":{"description":"Per source: when it last delivered, its freshness budget, and whether it is inside it. This is the endpoint to read before quoting a count, because a zero from a source that is down is not a quiet world.\n\nReturns: An object with a per-source array carrying last_success and a state.","operationId":"get_freshness","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a per-source array carrying last_success and a state."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"How current each source is","tags":["Service"]}},"/api/v1/geo/countries.geojson":{"get":{"description":"The boundaries this site draws. Depiction of a boundary is not a position on it.\n\nReturns: A GeoJSON FeatureCollection.","operationId":"get_geo_countries_geojson","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"A GeoJSON FeatureCollection."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Country polygons","tags":["Geospatial"]}},"/api/v1/health":{"get":{"description":"Whether the service can answer.\n\nReturns: An object with status ok, or 503 with the reason.","operationId":"get_health","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with status ok, or 503 with the reason."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Whether the service can answer","tags":["Service"]}},"/api/v1/layers/smart-defaults":{"get":{"description":"Derived from what is currently happening, so a quiet day does not open every layer.\n\nReturns: An object naming the overlays and why each was chosen.","operationId":"get_layers_smart_defaults","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object naming the overlays and why each was chosen."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Which overlays are worth showing right now","tags":["Geospatial"]}},"/api/v1/layers/{name}":{"get":{"description":"One map overlay as GeoJSON.\n\nReturns: A GeoJSON FeatureCollection, or 404 for an unknown overlay name.","operationId":"get_layers_name","parameters":[{"description":"Overlay name. One of chokepoints, shipping, nuclear, military, faultlines, faultlines_major.","example":"chokepoints","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"A GeoJSON FeatureCollection, or 404 for an unknown overlay name."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"One map overlay as GeoJSON","tags":["Geospatial"]}},"/api/v1/livestreams":{"get":{"description":"Resolved at request time: pinned video ids go stale and a dead embed is indistinguishable from an outage.\n\nReturns: An object with a channels array.","operationId":"get_livestreams","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a channels array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Which video each live news channel is broadcasting now","tags":["Service"]}},"/api/v1/maritime/chokepoints":{"get":{"description":"Maritime chokepoints and their current state.\n\nReturns: An object with a chokepoints array.","operationId":"get_maritime_chokepoints","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a chokepoints array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Maritime chokepoints and their current state","tags":["Hazards"]}},"/api/v1/markets/snapshot":{"get":{"description":"A small fixed set of instruments, not a market data service. Delayed and labelled with its delay.\n\nReturns: An object with an instruments array and the quote time.","operationId":"get_markets_snapshot","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an instruments array and the quote time."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Market instruments that move with global risk","tags":["Markets"]}},"/api/v1/military-aircraft":{"get":{"description":"Positions from public ADS-B data. Absence means not broadcasting or not received, never absence of aircraft.\n\nReturns: An object with an aircraft array.","operationId":"get_military_aircraft","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an aircraft array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Military aircraft currently tracked","tags":["Hazards"]}},"/api/v1/military-aircraft/flashpoints":{"get":{"description":"Military air activity near defined flashpoints.\n\nReturns: An object keyed by flashpoint with the activity near each.","operationId":"get_military_aircraft_flashpoints","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object keyed by flashpoint with the activity near each."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Military air activity near defined flashpoints","tags":["Hazards"]}},"/api/v1/military-aircraft/significant":{"get":{"description":"The same data filtered to types and behaviours worth a reader's attention.\n\nReturns: An object with an aircraft array.","operationId":"get_military_aircraft_significant","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an aircraft array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"The militarily significant subset","tags":["Hazards"]}},"/api/v1/monsoon":{"get":{"description":"Two map layers from NASA's PMM Publisher and what has been reported beside them. rain: GPM IMERG Late Run 3-day rainfall, served only where at least 100 mm fell. landslide: the LHASA nowcast, a model's estimate of where rain-triggered landslides are probable, NOT a report that one happened. Each layer carries per-country maxima and a GeoJSON FeatureCollection (value in properties.v), capped at 12000 features, highest first. reported: flood and landslide events from the event store in the last 72 hours, by country, each with its source link. news: headlines from the last 48 hours about floods, landslides or heavy rain that name exactly one country (by name or main city), by country, with outlet, time and link; a headline naming two countries is left out rather than guessed. A layer NASA did not answer for carries an error and no features, and is served from its last good copy up to 24 hours old with stale_seconds set. Data: NASA (US Government work).\n\nReturns: An object with rain, landslide and reported members.","operationId":"get_monsoon","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with rain, landslide and reported members."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Heavy rain, landslide hazard, and flood and landslide news and reports","tags":["Climate"]}},"/api/v1/news":{"get":{"description":"Reporting collected alongside the event feed, kept separate from it: a news report is not a warning, and the two are never merged into one stream.\n\nReturns: An object with an items array, each carrying its publisher and link.","operationId":"get_news","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an items array, each carrying its publisher and link."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Recent news items","tags":["News"]}},"/api/v1/news/clusters":{"get":{"description":"Items clustered so ten reports of one event read as one story, with the confidence of each grouping published rather than hidden.\n\nReturns: An object with a clusters array, each with its members and a confidence.","operationId":"get_news_clusters","parameters":[{"description":"Time window to look back over. One of 1h, 6h, 24h, 72h, 7d, 30d, all. Defaults to 24h. Anything else is a 400.","example":"24h","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"Maximum rows to return. A positive integer; the server applies its own ceiling.","example":"100","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Lowest cluster confidence to include, 0 to 1.","example":"0.5","in":"query","name":"min_confidence","required":false,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a clusters array, each with its members and a confidence."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"News grouped into stories","tags":["News"]}},"/api/v1/news/top":{"get":{"description":"The stories the most independent outlets carried in the last 24 hours, any topic, ranked by how many carried each. State media never counts. A named creator's video whose title names an event (a hazard, an attack, a blast) and is not a question or explainer appears as an early report, apart from the list; once an outlet reports the same kind of event it is marked carried and led by the outlet's headline. It joins the list only when three non-state outlets carry it, the video not counted. market_moves lists outlet headlines that name a market and a move (shares, an index, oil, gold), most outlets first.\n\nReturns: An object with a stories array, an early array and a market_moves array, each story with its outlets, links and any countries two sources name.","operationId":"get_news_top","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a stories array, an early array and a market_moves array, each story with its outlets, links and any countries two sources name."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Top news today","tags":["News"]}},"/api/v1/nuclear-events/active":{"get":{"description":"Active nuclear and radiological events.\n\nReturns: An object with an events array, normally empty.","operationId":"get_nuclear_events_active","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an events array, normally empty."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Active nuclear and radiological events","tags":["Hazards"]}},"/api/v1/openapi.json":{"get":{"description":"The OpenAPI 3.1 description of this API, generated at request time by walking the router of the running process. It therefore describes the endpoints this deployment actually serves.\n\nReturns: An OpenAPI 3.1 document.","operationId":"get_openapi_json","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An OpenAPI 3.1 document."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"This document","tags":["Service"]}},"/api/v1/outages":{"get":{"description":"Internet and infrastructure outages.\n\nReturns: An object with an outages array.","operationId":"get_outages","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an outages array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Internet and infrastructure outages","tags":["Hazards"]}},"/api/v1/plate-readers":{"get":{"description":"Every node tagged surveillance:type=ALPR in Geofabrik's US extract, rebuilt monthly. Points are [lon, lat, index into makers]. ODbL 1.0, (c) OpenStreetMap contributors.\n\nReturns: An object with fetched, licence, attribution, makers and points, or 503 before the first build.","operationId":"get_plate_readers","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with fetched, licence, attribution, makers and points, or 503 before the first build."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Plate reader cameras (ALPR) mapped in OpenStreetMap, US","tags":["Geospatial"]}},"/api/v1/prediction-markets":{"get":{"description":"Prediction market contracts on tracked situations.\n\nReturns: An object with a markets array.","operationId":"get_prediction_markets","parameters":[{"description":"Country name or ISO code to filter on.","example":"JPN","in":"query","name":"country","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a markets array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Prediction market contracts on tracked situations","tags":["Markets"]}},"/api/v1/predictions":{"get":{"description":"The prediction ledger: each forecast the situation report makes, with why (because), what would prove it wrong (wrong_if), its confidence as a stated probability, its deadline and the events it was made from. Graded ones add the verdict (correct, wrong, unresolved, or duplicate for a row that repeats another and is not counted), the reason and the reports it rests on. Only predictions that state a falsifier are recorded, and a restated prediction is counted once. status=open (default) or graded.\n\nReturns: An object with status, count and predictions.","operationId":"get_predictions","parameters":[{"description":"Which predictions: open (deadline not yet passed, the default) or graded.","example":"open","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Maximum rows to return. A positive integer; the server applies its own ceiling.","example":"100","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with status, count and predictions."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Forecasts, open or graded","tags":["Assessment"]}},"/api/v1/predictions/scorecard":{"get":{"description":"Right, wrong, unsettled and open counts per confidence level, with the stated probability beside the measured hit rate (correct over correct plus wrong; -1 until something is graded), and its low and high bounds over every finished prediction: unsettled counted as all misses, then as all hits.\n\nReturns: An object with levels, total, since and computed_at.","operationId":"get_predictions_scorecard","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with levels, total, since and computed_at."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Forecast track record","tags":["Assessment"]}},"/api/v1/prepare":{"get":{"description":"Eleven hazards, each with the official pages that publish guidance for it (FEMA Ready.gov, the US National Weather Service, the CDC, and national agencies elsewhere as links). quotes holds only text confirmed word for word on the live page, from US federal sources (public domain); pages reports each official page's last reading, including excerpts it did not contain, which are never shown as quotes.\n\nReturns: An object with guides and pages.","operationId":"get_prepare","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with guides and pages."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Official preparedness guidance by hazard","tags":["Hazards"]}},"/api/v1/push/vapid-key":{"get":{"description":"The public half only. There is no endpoint that reads back a subscription, so a leaked push endpoint cannot be turned into a query for what a browser is watching.\n\nReturns: An object with the base64url key, or an empty key when push is not configured.","operationId":"get_push_vapid_key","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with the base64url key, or an empty key when push is not configured."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Web Push application server public key","tags":["Service"]}},"/api/v1/radiation":{"get":{"description":"The latest hourly reading of each BfS station in service (dl-de/by-2-0) and each Safecast fixed sensor heard in the last day (CC0), in uSv/h. Points are [lon, lat, uSv/h, index into sources]. Refetched at most every 30 minutes.\n\nReturns: An object with sources (name, licence, attribution, stations, fetched, error) and points, or 503 when no source has answered.","operationId":"get_radiation","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with sources (name, licence, attribution, stations, fetched, error) and points, or 503 when no source has answered."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Gamma dose rate stations: BfS ODL (Germany) and Safecast","tags":["Geospatial"]}},"/api/v1/readiness":{"get":{"description":"Whether the data behind the map is complete enough to read.\n\nReturns: An object describing readiness and what is missing.","operationId":"get_readiness","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object describing readiness and what is missing."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Whether the data behind the map is complete enough to read","tags":["Service"]}},"/api/v1/resilience/data-status":{"get":{"description":"Which indicators are present for how many countries and how old each dataset is. Published so a gap reads as a gap.\n\nReturns: An object with per-indicator coverage.","operationId":"get_resilience_data_status","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with per-indicator coverage."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Coverage and vintage of the resilience indicators","tags":["Countries"]}},"/api/v1/resilience/scatter":{"get":{"description":"Resilience indicators as plotted pairs.\n\nReturns: An object with the points and their axes.","operationId":"get_resilience_scatter","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with the points and their axes."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Resilience indicators as plotted pairs","tags":["Countries"]}},"/api/v1/risk":{"get":{"description":"Risk scores by region.\n\nReturns: An object with scores and the window they cover.","operationId":"get_risk","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with scores and the window they cover."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Risk scores by region","tags":["Assessment"]}},"/api/v1/rundown":{"get":{"description":"Written on a schedule for the biggest events only; every reader gets the same copy. Any other event answers with an empty rundown.\n\nReturns: An object with now text, empty when there is no rundown.","operationId":"get_rundown","parameters":[{"description":"Event identifier, as returned in the id field of the feed.","example":"usgs:us7000n1a2","in":"query","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with now text, empty when there is no rundown."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"What is going on with one event","tags":["Assessment"]}},"/api/v1/search":{"get":{"description":"One ranked list across both. An exact country match outranks a partial match inside an event's location name.\n\nReturns: An object with a results array, each carrying its type.","operationId":"get_search","parameters":[{"description":"Free-text query.","example":"philippines","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Maximum rows to return. A positive integer; the server applies its own ceiling.","example":"100","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a results array, each carrying its type."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Search countries and events","tags":["Search"]}},"/api/v1/sections/{id}/brief":{"get":{"description":"What the reader is looking at, what it means, and what would change it. Optionally scoped to a country or a point; unscoped it describes the world.\n\nReturns: An object with the rundown text and the facts behind it.","operationId":"get_sections_id_brief","parameters":[{"description":"Identifier of the record, as returned in the id field of a list response.","example":"usgs:us7000n1a2","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"ISO 3166-1 alpha-3 country code, scoping the answer to that country.","example":"JPN","in":"query","name":"iso","required":false,"schema":{"type":"string"}},{"description":"Human-readable label for the scoped area, used in the prose.","example":"Tokyo","in":"query","name":"place","required":false,"schema":{"type":"string"}},{"description":"Latitude in decimal degrees, -90 to 90.","example":"35.68","in":"query","name":"lat","required":false,"schema":{"type":"number"}},{"description":"Longitude in decimal degrees, -180 to 180.","example":"139.69","in":"query","name":"lon","required":false,"schema":{"type":"number"}},{"description":"Search radius in kilometres from lat/lon.","example":"250","in":"query","name":"radius_km","required":false,"schema":{"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with the rundown text and the facts behind it."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Plain-language rundown for one section of the site","tags":["Assessment"]}},"/api/v1/ships":{"get":{"description":"Tracked vessels of interest.\n\nReturns: An object with a ships array.","operationId":"get_ships","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a ships array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Tracked vessels of interest","tags":["Hazards"]}},"/api/v1/sitrep/temporal":{"get":{"description":"Situation report over a time window.\n\nReturns: An object describing what changed over the window.","operationId":"get_sitrep_temporal","parameters":[{"description":"Window the temporal situation report covers.","example":"24h","in":"query","name":"timeframe","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object describing what changed over the window."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Situation report over a time window","tags":["Assessment"]}},"/api/v1/sitrep/temporal/all":{"get":{"description":"Situation reports for every window.\n\nReturns: An object keyed by timeframe.","operationId":"get_sitrep_temporal_all","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object keyed by timeframe."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Situation reports for every window","tags":["Assessment"]}},"/api/v1/sources":{"get":{"description":"What this site reads, with the attribution each source requires. The list here is the same one the site's terms page is built from.\n\nReturns: An object with a sources array.","operationId":"get_sources","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a sources array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Every upstream source, by name","tags":["Service"]}},"/api/v1/stats":{"get":{"description":"Counts across the current retention window.\n\nReturns: An object with totals by category and source.","operationId":"get_stats","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with totals by category and source."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Counts across the current retention window","tags":["Service"]}},"/api/v1/stillcams/{id}/image":{"get":{"description":"Relayed from the camera's open-data operator (TfL, Hong Kong Transport Department, Fintraffic, Caltrans), fetched at most once a minute per camera. Last-Modified is when the photo was taken. A photo more than an hour old, or with no time on it, answers 404 rather than pass for a current view.\n\nReturns: The image, with the operator's own content type.","operationId":"get_stillcams_id_image","parameters":[{"description":"Identifier of the record, as returned in the id field of a list response.","example":"usgs:us7000n1a2","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"The image, with the operator's own content type."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"The current photo from one road or city camera","tags":["News"]}},"/api/v1/stories":{"get":{"description":"For each story key (two sides, such as NATO-RUS, from an event story's story field), its newest reports over the last 60 days and the live event carrying it, if one is live. The site keeps what a reader follows in their browser; this endpoint keeps nothing about who asked.\n\nReturns: stories: one per key in the order asked, each with story, event_id and title (empty when the story has no live event), and news (headline, url, outlet, kind, published_at; newest first, at most 20). 400 for no keys, more than 10, or one that is not a story key.","operationId":"get_stories","parameters":[{"description":"Story keys separated by commas, at most 10.","example":"NATO-RUS,IND-PAK","in":"query","name":"keys","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"stories: one per key in the order asked, each with story, event_id and title (empty when the story has no live event), and news (headline, url, outlet, kind, published_at; newest first, at most 20). 400 for no keys, more than 10, or one that is not a story key."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"What is new in the stories a reader follows","tags":["Events"]}},"/api/v1/storms/tracks":{"get":{"description":"Past track, forecast track, dated fixes and forecast cone for every active GDACS cyclone. Storms NHC forecasts (Atlantic, East and Central Pacific) carry NHC's official cone, marked source NHC. A storm whose path could not be fetched is named in failed rather than silently absent.\n\nReturns: A GeoJSON FeatureCollection; each feature's kind is fix, past, forecast or cone.","operationId":"get_storms_tracks","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"A GeoJSON FeatureCollection; each feature's kind is fix, past, forecast or cone."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Paths of active tropical cyclones","tags":["Hazards"]}},"/api/v1/supervolcanoes":{"get":{"description":"The 19 supervolcanoes and large caldera systems Rift tracks. Live alert levels are read for the volcanoes of the United States (USGS) and Japan (JMA); Tokyo VAAC ash advisories add state \"ash\" for East Asian volcanoes. Each system carries alert_feed: live, unavailable (the feed is not answering) or none (no feed covers it), so a system with no state is not read as quiet.\n\nReturns: An object with a systems array.","operationId":"get_supervolcanoes","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a systems array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Supervolcano catalogue","tags":["Hazards"]}},"/api/v1/supervolcanoes/{slug}":{"get":{"description":"One supervolcano.\n\nReturns: A supervolcano record with its current alert level and recent activity.","operationId":"get_supervolcanoes_slug","parameters":[{"description":"URL slug of the system, as returned by the matching index endpoint.","example":"san-andreas","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"A supervolcano record with its current alert level and recent activity."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"One supervolcano","tags":["Hazards"]}},"/api/v1/threat/rankings":{"get":{"description":"Same method and limits as /countries/{iso}/threat: a low rank can reflect thin reporting rather than calm.\n\nReturns: An object with a ranked array, or 503 when the threat scorer is not running.","operationId":"get_threat_rankings","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a ranked array, or 503 when the threat scorer is not running."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Countries ranked by current threat","tags":["Countries"]}},"/api/v1/ticker":{"get":{"description":"The short strings the site scrolls across the top, ordered by recency of the EVENT, not of ingest.\n\nReturns: An object with an items array.","operationId":"get_ticker","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an items array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Headline ticker items","tags":["Events"]}},"/api/v1/timeline/events":{"get":{"description":"The events in force at the given timestamp, with the score and title they had then, for replaying how a situation developed. Place, summary and expiry are as last recorded.\n\nReturns: An object with an events array and the snapshot time actually used.","operationId":"get_timeline_events","parameters":[{"description":"Unix timestamp in seconds. Returns the world as it was recorded at that moment.","example":"1758499200","in":"query","name":"at","required":false,"schema":{"type":"integer"}},{"description":"Time window to look back over. One of 1h, 6h, 24h, 72h, 7d, 30d, all. Defaults to 24h. Anything else is a 400.","example":"24h","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"Maximum rows to return. A positive integer; the server applies its own ceiling.","example":"100","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Include alert footprint polygons. true or false; coordinates are rounded either way.","example":"false","in":"query","name":"geometry","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with an events array and the snapshot time actually used."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"The world as recorded at one moment","tags":["Assessment"]}},"/api/v1/timeline/snapshots":{"get":{"description":"The points in time the timeline can be rewound to.\n\nReturns: An object with a snapshots array of unix timestamps.","operationId":"get_timeline_snapshots","parameters":[{"description":"How many hours of snapshots to return.","example":"24","in":"query","name":"hours","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a snapshots array of unix timestamps."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Recorded snapshots of world state","tags":["Assessment"]}},"/api/v1/unclassified-codes":{"get":{"description":"Warning codes arriving from upstream that this system does not yet map to a hazard class. The list is the backlog, published rather than swallowed.\n\nReturns: An object with a codes array.","operationId":"get_unclassified_codes","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a codes array."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Source codes no classifier recognises","tags":["Events"]}},"/api/v1/version":{"get":{"description":"The commit the running binary was built from. Used by the deploy to prove a rollout landed rather than assuming it.\n\nReturns: An object with sha and built_at.","operationId":"get_version","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with sha and built_at."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Which build is running","tags":["Service"]}},"/api/v1/weather-alerts":{"get":{"description":"Warnings from national meteorological services, normalised onto one awareness scale while keeping the issuing service's own wording.\n\nReturns: The US National Weather Service's active alerts as a GeoJSON FeatureCollection. An alert the service sent without a shape carries the outlines of the zones it names, simplified to about 1 km; for one exact spot use /api/v1/alerts/at.","operationId":"get_weather_alerts","responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"The US National Weather Service's active alerts as a GeoJSON FeatureCollection. An alert the service sent without a shape carries the outlines of the zones it names, simplified to about 1 km; for one exact spot use /api/v1/alerts/at."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Severe weather warnings","tags":["Hazards"]}},"/api/v1/webcams":{"get":{"description":"A curated table of fixed cameras, each bound to one place (volcanoes, city centres, a launch site). Only cameras whose YouTube stream reads as live and embeddable are returned, checked at most every 10 minutes. With lat and lon: the cameras within their own radius of that point (60 km for a volcano, 40 km for a city), nearest first, at most 3. With iso: that country's cameras; with iso and a point as well, that country's cameras nearest the point first, however far. With neither: every live camera. An empty list means no verified live camera, not an error.\n\nReturns: An object with a webcams array (id, place, country, lat, lon, kind, operator, video_id, radius_km, and distance_km when asked by point) and a stills array of road and city photo cameras (id, place, country, lat, lon, image, operator, credit, credit_url, distance_km by point). news names a live news channel when a country has neither.","operationId":"get_webcams","parameters":[{"description":"Latitude in decimal degrees, -90 to 90.","example":"35.68","in":"query","name":"lat","required":false,"schema":{"type":"number"}},{"description":"Longitude in decimal degrees, -180 to 180.","example":"139.69","in":"query","name":"lon","required":false,"schema":{"type":"number"}},{"description":"ISO 3166-1 alpha-3 country code, scoping the answer to that country.","example":"JPN","in":"query","name":"iso","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{}}},"description":"An object with a webcams array (id, place, country, lat, lon, kind, operator, video_id, radius_km, and distance_km when asked by point) and a stills array of road and city photo cameras (id, place, country, lat, lon, image, operator, credit, credit_url, distance_km by point). news names a live news channel when a country has neither."},"default":{"content":{"application/json":{"schema":{"properties":{"error":{"type":"string"}},"type":"object"}}},"description":"An error. The body is an object with a single error field carrying a human-readable message."}},"summary":"Live webcams near a point or in a country","tags":["News"]}}},"servers":[{"description":"Production","url":"https://rift.news"}],"tags":[{"name":"Events"},{"name":"Countries"},{"name":"Hazards"},{"name":"Assessment"},{"name":"Climate"},{"name":"Energy"},{"name":"Markets"},{"name":"News"},{"name":"Geospatial"},{"name":"Search"},{"name":"Service"}]}
