← Ebola Outbreak 2026

Data & API

The numbers on the dashboard are free to use under CC BY-SA 4.0. No account, no key, and any website can call them from the browser. Every figure points back to the source revision it came from, so you can check it.

Endpoints

Every outbreak has its own set of endpoints, addressed by its slug. Start from the list to find them. The examples below use the default outbreak, ebola-bundibugyo-2026.

GET /api/v1/outbreaks

Every outbreak tracked: slug, title, disease, status, places, source, the latest confirmed cases and deaths with their date, and links to its page and its endpoints.

Try it: /api/v1/outbreaks

GET /api/v1/outbreaks/<slug>/toll

One row per day of cumulative confirmed, suspected, deaths and recovered, each linked to the exact Wikipedia revision it was read from.

from, to
Inclusive date range, YYYY-MM-DD.
limit
Keep only the most recent N rows (1–1000).
format
json (default) or csv.

Try it: /api/v1/outbreaks/ebola-bundibugyo-2026/toll?from=2026-09-01&format=csv

GET /api/v1/outbreaks/<slug>/metrics

Derived indicators: new cases and deaths per 7 days, growth rate, doubling or halving time, reproduction number (Rt) and three fatality ratios, with their assumptions.

include=daily
Add the day-by-day series (new cases, 7-day average, interpolated flag).
format=csv
Return the daily series as CSV.

Try it: /api/v1/outbreaks/ebola-bundibugyo-2026/metrics?include=daily

GET /api/v1/outbreaks/<slug>/signals

Countries the news has linked to the outbreak, when each was first mentioned, and, once officially confirmed, how far the news led.

Try it: /api/v1/outbreaks/ebola-bundibugyo-2026/signals

An unknown slug returns 404 with a JSON { "error": ... } body, like every other error.

Un-prefixed endpoints are permanent aliases

/api/v1/toll, /api/v1/metrics and /api/v1/signals always return the default outbreak (currently ebola-bundibugyo-2026), with the same parameters and the same response as its per-outbreak endpoints. They will keep working, so existing scripts need no change. New integrations should use the per-outbreak paths.

Latest reading, as the API returns it

{
  "date": "2026-10-02",
  "confirmed": 8245,
  "suspected": 347,
  "deaths": 3984,
  "recovered": 2140,
  "source": "Wikipedia infobox (cites INSP DRC / WHO)",
  "sourceUrl": "https://en.wikipedia.org/w/index.php?oldid=1377979097",
  "revid": 1377979097
}

From a browser or script

const res = await fetch("/api/v1/outbreaks/ebola-bundibugyo-2026/metrics");   // or the full https:// address
const { growth, rt, incidence } = await res.json();
console.log(growth.trend, rt.estimate);

How the indicators are calculated

All of them start from the daily cumulative totals. Days the source did not publish are filled in a straight line between neighbouring readings and flagged interpolated. A total that falls is treated as unchanged, because cumulative counts cannot decrease.

New cases and deaths per 7 days
The rise in the total over the last 7 days, compared with the 7 days before that.
Where the window ends
The source is updated in batches, so the newest days often look like “no new cases” just because the report has not been entered yet. Measuring up to such a day would understate current incidence. The windows therefore end on the latest day the total actually moved, but never more than 3 days before the last reading, so a genuine halt still shows. The response says which day that is in windowEnd.
Growth rate and doubling or halving time
r = ln(this week’s new cases ÷ last week’s) ÷ 7, per day. The range is a 95% interval from counting error alone (the square root of 1/n₁ + 1/n₂ on the log ratio). It does not include reporting noise, so treat it as a minimum. The trend is called growing or shrinking only when that whole range is above or below zero; otherwise stable. Doubling time is ln 2 ÷ r.
Reproduction number (Rt)
The average number of people each case infects, implied by the growth rate. With a gamma-distributed serial interval of mean μ and standard deviation σ, R = (1 + r·σ²/μ)^(μ²/σ²) (Wallinga & Lipsitch, 2007). The serial interval is set per disease, below. Where no source has been verified for a disease, Rt is left out rather than borrowed from another one. It describes recent transmission and lags real changes.
Case fatality, three ways
naive is deaths ÷ confirmed cases; it is too low while cases are still unresolved. delayAdjusted divides deaths by the cases confirmed some days earlier (set per disease, below), which accounts for the lag from confirmation to death; it is left out where that delay has no verified source. resolved is deaths ÷ (deaths + recovered); it runs high when recoveries are under-reported. The true value is most plausibly within that spread.

Assumptions by outbreak

  • Ebola Outbreak 2026. Serial interval μ = 15.3 days, σ = 9.3 days (WHO Ebola Response Team, NEJM 2014 (West Africa, Zaire ebolavirus); not measured for this Bundibugyo outbreak, so Rt carries that extra uncertainty). Confirmation-to-death delay 10 days.
  • Hantavirus Outbreak 2026. Rt not reported. A hand-curated record with no daily readings, so no rates are derived from it. Delay-adjusted fatality not reported.
  • Bangladesh Measles Outbreak 2026. Rt not reported. Rt is not reported for measles: no serial interval with a verified mean and standard deviation has been sourced, and lab-confirmed counts here depend on testing capacity, so their growth is an unreliable guide to transmission. Delay-adjusted fatality not reported.

Nothing here is a forecast. These are descriptions of the recent past that depend on how complete reporting is. For decisions, rely on official guidance from WHO and the health authorities.

News signals

Twice a day the tracker reads WHO and news feeds and records any country other than DR Congo that is reported to have cases linked to this outbreak. An entry is a lead to verify, not a confirmed case. The ledger keeps the date of the first mention, so once a country is officially confirmed we can measure how many days the news came earlier. It is only a useful early warning if that lead time turns out to be real and the false alarms are few, and the ledger exists to find out.

Where the data comes from

Outbreak Files (outbreakfiles.com, unofficial). Figures come from the Wikipedia article's infobox (CC BY-SA 4.0), which cites INSP DRC and WHO; every reading links to the exact revision it was read from. Shared under CC BY-SA 4.0. Not an official public health resource.

  • One reading per UTC day, taken from the last revision of the article that day. Currently 97 readings, 2026-06-02 to 2026-10-02.
  • History before 2026-06-02 is not included: early versions of the article counted suspected deaths in the same field, which is a different definition.
  • Revisions that break the rule that totals never fall (typos, vandalism, edits in progress) are removed when history is imported. Some days have no reading because the infobox could not be parsed.
  • Licence: CC BY-SA 4.0. Credit “Outbreak Files” (outbreakfiles.com) and link the source revision when you republish figures. If you adapt the data, share the result under the same licence.