Usamos almacenamiento local para recordar sus preferencias y medir la audiencia de forma anónima (Vercel Analytics — sin datos personales). Política de privacidad
Programmatic access to WHO, ECDC, PAHO and Africa CDC outbreak data, updated every hour. Available on the Enterprise plan. Manage your API keys from your account.
Looking for the embeddable widget?
Embed a live outbreak feed on any site — one iframe, no API key required.
Free RSS feed — no API key required
Subscribe to active outbreaks in any RSS reader. https://healthwatch-global.com/api/feed?locale=en®ion=africa
curl https://healthwatch-global.com/api/v1/outbreaks \
-H "X-API-Key: hwg_your_key_here"Replace hwg_your_key_here with a key generated in your account settings.
Academic or research institution?
Request a 30-day trial API key — no credit card required. We review requests within 24 h.
All API requests must include your API key in the X-API-Key header. Keys are prefixed with hwg_ and can be created and revoked at any time from your account settings.
All endpoints are versioned. The current version is v1. Breaking changes will increment the version.
/api/v1/outbreaksReturns a paginated list of active disease outbreaks sourced from WHO, ECDC, PAHO and Africa CDC, sorted by date descending.
Data is refreshed every hour from WHO, ECDC, PAHO and Africa CDC.
| Parameter | Type | Required | Description |
|---|---|---|---|
| region | string | optional | Filter by region: africa · asia · americas · europe · oceania |
| risk | string | optional | Filter by risk level: high · medium · low |
| limit | integer | optional | Number of results per page (1–100, default 50) |
| offset | integer | optional | Pagination offset — number of records to skip (default 0) |
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"disease": "Ebola virus disease",
"country": "DR Congo",
"region": "africa",
"lat": -4.0,
"lng": 21.8,
"risk_level": "high",
"cases": 381,
"deaths": 64,
"date": "2026-06-03",
"source": "https://www.who.int/emergencies/disease-outbreak-news/item/2026-DON603",
"description": "As of 3 June 2026, the Ministry of Health DRC...",
"is_pheic": false,
"active": true
}
],
"total": 39,
"limit": 50,
"offset": 0
}| Field | Type | Description |
|---|---|---|
| id | string | Unique UUID identifier |
| disease | string | Disease name (English) |
| country | string | Affected country (English) |
| region | string | Continent: africa · asia · americas · europe · oceania |
| lat / lng | number | Geographic coordinates of the country centroid |
| risk_level | string | Risk level: high · medium · low |
| cases | integer | Confirmed case count (0 = not reported in this bulletin) |
| deaths | integer | Confirmed death count |
| date | string | Report publication date (ISO 8601: YYYY-MM-DD) |
| source | string | Source URL — WHO DON bulletin, ECDC, PAHO, or Africa CDC report page |
| description | string | Summary extracted from the source bulletin (≤ 400 chars) |
| is_pheic | boolean | True when WHO has declared a Public Health Emergency of International Concern |
| active | boolean | False for deactivated / resolved outbreaks |
Every outbreak record carries an implicit source tier derived from its source URL. Use this to decide how to handle the data in your own analysis or citation workflow.
Source URL contains /emergencies/disease-outbreak-news/item/ with a unique reference number (e.g. 2026-DON603). Directly citable in academic and institutional reports. The dashboard's citation copy button generates a ready-to-use reference for these rows.
source: "https://www.who.int/emergencies/disease-outbreak-news/item/2026-DON603"
Sourced from an ECDC Rapid Risk Assessment, PAHO Epidemiological Alert, or Africa CDC situation report. Data is authoritative but does not carry a WHO DON reference number. Use for internal monitoring; cite the linked source page directly in publications.
Figures are provisional and have not yet been matched to a confirmed WHO, ECDC, PAHO, or Africa CDC report. Treat as early-warning signal only. Do not cite in external reports. HealthWatch upgrades these rows to a higher tier as soon as a matching official bulletin is published.
To filter by tier in the API, check whether the source URL contains disease-outbreak-news/item/ (WHO DON), ecdc.europa.eu, paho.org, or africacdc.org (official), or is empty / a placeholder (unverified).
# All active outbreaks
curl "https://healthwatch-global.com/api/v1/outbreaks" \
-H "X-API-Key: hwg_your_key_here"
# High-risk outbreaks in Africa, first 10
curl "https://healthwatch-global.com/api/v1/outbreaks?region=africa&risk=high&limit=10" \
-H "X-API-Key: hwg_your_key_here"
# Paginate: skip first 50, get next 50
curl "https://healthwatch-global.com/api/v1/outbreaks?limit=50&offset=50" \
-H "X-API-Key: hwg_your_key_here"import requests
API_KEY = "hwg_your_key_here"
BASE = "https://healthwatch-global.com/api/v1"
def get_outbreaks(region=None, risk=None, limit=50, offset=0):
params = {"limit": limit, "offset": offset}
if region: params["region"] = region
if risk: params["risk"] = risk
resp = requests.get(
f"{BASE}/outbreaks",
headers={"X-API-Key": API_KEY},
params=params,
timeout=10,
)
resp.raise_for_status()
return resp.json()
# Example: all high-risk outbreaks
result = get_outbreaks(risk="high")
for outbreak in result["data"]:
print(f"{outbreak['disease']} — {outbreak['country']} ({outbreak['risk_level']})")const API_KEY = process.env.HEALTHWATCH_API_KEY; // never expose client-side
const BASE = "https://healthwatch-global.com/api/v1";
interface Outbreak {
id: string;
disease: string;
country: string;
region: string;
lat: number;
lng: number;
risk_level: "high" | "medium" | "low";
cases: number;
deaths: number;
date: string;
source: string; // WHO DON, ECDC, PAHO, or Africa CDC URL
description: string;
is_pheic: boolean;
active: boolean;
}
interface OutbreakResponse {
data: Outbreak[];
total: number;
limit: number;
offset: number;
}
async function getOutbreaks(params?: {
region?: "africa" | "asia" | "americas" | "europe" | "oceania";
risk?: "high" | "medium" | "low";
limit?: number;
offset?: number;
}): Promise<OutbreakResponse> {
const url = new URL(`${BASE}/outbreaks`);
if (params?.region) url.searchParams.set("region", params.region);
if (params?.risk) url.searchParams.set("risk", params.risk);
if (params?.limit) url.searchParams.set("limit", String(params.limit));
if (params?.offset) url.searchParams.set("offset", String(params.offset));
const res = await fetch(url.toString(), {
headers: { "X-API-Key": API_KEY! },
next: { revalidate: 3600 }, // cache 1h in Next.js
});
if (!res.ok) throw new Error(`API error: ${res.status}`);
return res.json();
}
// Example
const { data } = await getOutbreaks({ region: "africa", risk: "high" });
console.log(data);| Limit | Value |
|---|---|
| Requests per minute (per key) | 300 |
| Max results per request | 100 |
| Max API keys per account | 5 |
When a rate limit is exceeded, the API returns HTTP 429 with a Retry-After: 60 header. The X-RateLimit-Remaining response header shows remaining requests in the current window.
| HTTP Status | Meaning |
|---|---|
| 200 | Success — response body contains requested data |
| 400 | Bad request — invalid query parameter value |
| 401 | Unauthorized — missing or invalid X-API-Key header |
| 403 | Forbidden — API key valid but Enterprise subscription is not active |
| 429 | Rate limit exceeded — retry after the value in the Retry-After header |
| 500 | Internal server error — contact support if this persists |
All error responses include a JSON body: { "error": "human-readable message" }
Embed a live outbreak feed on any website — no API key required. Copy the snippet below and paste it into your HTML.
<iframe
src="https://healthwatch-global.com/widget?locale=en"
width="400"
height="320"
frameborder="0"
style="border-radius:12px;overflow:hidden;"
title="HealthWatch Global — Live outbreak feed"
></iframe>| Param | Values | Default |
|---|---|---|
| locale | fr · en · es · ar · id | en |
| region | africa · asia · europe · americas · oceania · all | all |
| theme | dark · light | dark |
| limit | 1 – 10 | 5 |
<iframe
src="https://healthwatch-global.com/widget?locale=fr®ion=africa&theme=light&limit=7"
width="380"
height="400"
frameborder="0"
style="border-radius:12px;"
title="Foyers épidémiques en Afrique — HealthWatch Global"
></iframe>Ready to integrate?
Enterprise customers: generate your API key in account settings. Academic / research institution? Request a free trial key.