SENTINARA API

API reference

All endpoints of SENTINARA API v1.0.0. Base URL https://api.sentinara.org. Download the OpenAPI 3.1 document to generate a client.

#Service

API status and discovery.

#API index

GET/v1Key optional

Links to the documentation, the OpenAPI document and the status endpoint.

bash
curl "https://api.sentinara.org/v1"
Example response 200
{
  "data": {
    "name": "SENTINARA API",
    "version": 1,
    "docs": "https://docs.sentinara.org",
    "openapi": "https://api.sentinara.org/openapi.json",
    "status": "https://api.sentinara.org/v1/status"
  },
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#index"
  }
}

#Data freshness and validation

GET/v1/statusKey optional

When the data was last refreshed, the engine version, and the result of the automated validation checks.

bash
curl "https://api.sentinara.org/v1/status"
Example response 200
{
  "data": {
    "status": "ok",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "pipeline_seconds": 23,
    "files": 256,
    "who_rows": 44747,
    "ml_version": "1.0.0",
    "validation": {
      "pass": 18,
      "warn": 2,
      "fail": 0,
      "total": 20
    },
    "sources": {
      "who": {
        "fetchedAt": "2026-10-31T06:49:52.016Z",
        "rows": 44747,
        "latestIndonesia": "2026-08"
      },
      "opendengue": {
        "version": "V1.3",
        "title": "OpenDengue: data from the OpenDengue database",
        "published": "2025-05-27T11:05:52Z",
        "doi": "10.6084/m9.figshare.24259573"
      },
      "worldbank": {
        "lastUpdated": "2026-10-08"
      },
      "climate": {
        "months": 120
      },
      "situation": {
        "asOf": "2026-09-30"
      }
    }
  },
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#status"
  }
}

#Countries

WHO surveillance data for 199 countries and territories, with early-warning signals, forecasts and anomalies.

#List countries

GET/v1/countriesKey optionalList · CSV

Every country and territory with year-to-date cases, last full year incidence and the current warning level.

ParameterInTypeDescription
regionqueryAMR | SEAR | WPR | EMR | AFR | EURWHO region (case-insensitive).
levelquerynormal | watch | alert | outbreakEarly-warning level.
qquerystringCase-insensitive text search.
sortqueryname | cases | -cases | change | -change | level | -level | incidence | -incidence default -casesSort field; prefix with - for descending.
has_casesquerytrue | falseOnly countries that have (or have never) reported a case.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/countries?region=SEAR&sort=-cases&limit=5"
Example response 200
{
  "data": [
    {
      "iso3": "LKA",
      "slug": "sri-lanka",
      "name": "Sri Lanka",
      "name_id": "Sri Lanka",
      "who_name": "Sri Lanka",
      "region": "SEAR",
      "population": 21756000,
      "latest_month": "2026-08",
      "latest_complete_month": "2026-08",
      "reporting": "month/isoweek",
      "year_to_date": {
        "year": 2026,
        "through_month": 8,
        "cases": 95545,
        "deaths": 47,
        "previous_year_cases": 36637,
        "change_pct": 160.8,
        "five_year_average": 41221,
        "vs_five_year_average_pct": 131.8
      },
      "last_full_year": {
        "year": 2025,
        "incidence_per_100k": 236.5,
        "case_fatality_pct": 0.056
      },
      "warning": {
        "status": "ok",
        "level": "outbreak",
        "score": 5.5
      },
      "links": {
        "self": "https://api.sentinara.org/v1/countries/LKA",
        "series": "https://api.sentinara.org/v1/countries/LKA/series",
        "page": "https://sentinara.org/global/sri-lanka"
      }
    },
    {
      "iso3": "BGD",
      "slug": "bangladesh",
      "name": "Bangladesh",
      "name_id": "Bangladesh",
      "who_name": "Bangladesh",
      "region": "SEAR",
      "population": 175686899,
      "latest_month": "2026-09",
      "latest_complete_month": "2026-09",
      "reporting": "isoweek/month",
      "year_to_date": {
        "year": 2026,
        "through_month": 9,
        "cases": 79620,
        "deaths": 245,
        "previous_year_cases": 47342,
        "change_pct": 68.2,
        "five_year_average": 64109,
        "vs_five_year_average_pct": 24.2
      },
      "last_full_year": {
        "year": 2025,
        "incidence_per_100k": 58.6,
        "case_fatality_pct": 0.442
      },
      "warning": {
        "status": "ok",
        "level": "watch",
        "score": 2.5
      },
      "links": {
        "self": "https://api.sentinara.org/v1/countries/BGD",
        "series": "https://api.sentinara.org/v1/countries/BGD/series",
        "page": "https://sentinara.org/global/bangladesh"
      }
    },
    {
      "iso3": "IND",
      "slug": "india",
      "name": "India",
      "name_id": "India",
      "who_name": "India",
      "region": "SEAR",
      "population": 1463865525,
      "latest_month": "2026-09",
      "latest_complete_month": "2026-09",
      "reporting": "month",
      "year_to_date": {
        "year": 2026,
        "through_month": 9,
        "cases": 70140,
        "deaths": 71,
        "previous_year_cases": 68356,
        "change_pct": 2.6,
        "five_year_average": null,
        "vs_five_year_average_pct": null
      },
      "last_full_year": {
        "year": 2025,
        "incidence_per_100k": 8.2,
        "case_fatality_pct": 0.09
      },
      "warning": {
        "status": "insufficient",
        "level": null,
        "score": null
      },
      "links": {
        "self": "https://api.sentinara.org/v1/countries/IND",
        "series": "https://api.sentinara.org/v1/countries/IND/series",
        "page": "https://sentinara.org/global/india"
      }
    },
    {
      "iso3": "THA",
      "slug": "thailand",
      "name": "Thailand",
      "name_id": "Thailand",
      "who_name": "Thailand",
      "region": "SEAR",
      "population": 71619863,
      "latest_month": "2026-08",
      "latest_complete_month": "2026-08",
      "reporting": "month",
      "year_to_date": {
        "year": 2026,
        "through_month": 8,
        "cases": 23780,
        "deaths": 32,
        "previous_year_cases": 43969,
        "change_pct": -45.9,
        "five_year_average": 48191,
        "vs_five_year_average_pct": -50.7
      },
      "last_full_year": {
        "year": 2025,
        "incidence_per_100k": 80.2,
        "case_fatality_pct": 0.082
      },
      "warning": {
        "status": "ok",
        "level": "normal",
        "score": 0
      },
      "links": {
        "self": "https://api.sentinara.org/v1/countries/THA",
        "series": "https://api.sentinara.org/v1/countries/THA/series",
        "page": "https://sentinara.org/global/thailand"
      }
    },
    {
      "iso3": "NPL",
      "slug": "nepal",
      "name": "Nepal",
      "name_id": "Nepal",
      "who_name": "Nepal",
      "region": "SEAR",
      "population": 29618118,
      "latest_month": "2026-09",
      "latest_complete_month": "2026-09",
      "reporting": "month/isoweek",
      "year_to_date": {
        "year": 2026,
        "through_month": 9,
        "cases": 6192,
        "deaths": 3,
        "previous_year_cases": 5496,
        "change_pct": 12.7,
        "five_year_average": 15741,
        "vs_five_year_average_pct": -60.7
      },
      "last_full_year": {
        "year": 2025,
        "incidence_per_100k": 28.9,
        "case_fatality_pct": 0.07
      },
      "warning": {
        "status": "ok",
        "level": "normal",
        "score": 0
      },
      "links": {
        "self": "https://api.sentinara.org/v1/countries/NPL",
        "series": "https://api.sentinara.org/v1/countries/NPL/series",
        "page": "https://sentinara.org/global/nepal"
      }
    }
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#countriesList",
    "total": 9,
    "limit": 5,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/countries?region=SEAR&sort=-cases&limit=5",
    "next": "https://api.sentinara.org/v1/countries?region=SEAR&sort=-cases&limit=5&cursor=eyJvIjo1fQ"
  }
}

#Country profile

GET/v1/countries/{country}Key optional

Annual totals, warning level with reasons and signals, endemic channel, seasonality, data quality and provenance.

ParameterInTypeDescription
country requiredpathstringISO 3166-1 alpha-3 code (IDN) or slug (indonesia).
bash
curl "https://api.sentinara.org/v1/countries/IDN"
Example response 200
{
  "data": {
    "iso3": "IDN",
    "slug": "indonesia",
    "name": "Indonesia",
    "name_id": "Indonesia",
    "who_name": "Indonesia",
    "region": "WPR",
    "population": 285721236,
    "latest_month": "2026-09",
    "latest_complete_month": "2026-08",
    "reporting": "month",
    "year_to_date": {
      "year": 2026,
      "through_month": 8,
      "cases": 88178,
      "deaths": 240,
      "previous_year_cases": 130105,
      "change_pct": -32.2,
      "five_year_average": 111782,
      "vs_five_year_average_pct": -21.1
    },
    "last_full_year": {
      "year": 2025,
      "incidence_per_100k": 59.8,
      "case_fatality_pct": 0.412
    },
    "warning": {
      "status": "ok",
      "level": "normal",
      "score": 0,
      "as_of": "2026-08",
      "reliability": "high",
      "forecast_skilled": true,
      "endemic_zone": "sukses",
      "reasons": [
        {
          "code": "within-pattern",
          "text": "Within the usual range for this time of year"
        }
      ],
      "signals": {
        "outbreak_score": -0.41,
        "expected_cases": 9867,
        "upper_bound": 23654,
        "robust_z": -2.44,
        "cusum": 0,
        "cusum_alarm": false,
        "p_exceed_next_3_months": 0.001,
        "momentum_pct": -42.3,
        "vs_last_year_pct": -45.2
      },
      "points": [
        {
          "signal": "zone",
          "points": 0
        },
        {
          "signal": "outbreak-score",
          "points": 0
        },
        {
          "signal": "cusum",
          "points": 0
        },
        {
          "signal": "forecast",
          "points": 0,
          "used": true
        },
        {
          "signal": "momentum",
          "points": 0
        }
      ],
      "endemic_channel": {
        "reference_years": [
          2021,
          2022,
          2023,
          2024,
          2025
        ],
        "median": [
          20486,
          11849,
          10220,
          10664,
          12470,
          12762,
          "… 6 more"
        ],
        "q3": [
          23805,
          19930,
          15838,
          14656,
          16208,
          14239,
          "… 6 more"
        ],
        "epidemic_threshold": [
          62418,
          51467,
          44009,
          39313,
          42365,
          34644,
          "… 6 more"
        ]
      },
      "seasonality": {
        "share_pct": [
          13.32,
          12.23,
          10.88,
          9.63,
          9.31,
          7.76,
          "… 6 more"
        ],
        "peak_month": 1,
        "complete_years": 19
      },
      "data_quality": {
        "completeness": 1,
        "months_reported": 236,
        "longest_gap_months": 0,
        "suspect_months": [],
        "interpolated_months": []
      }
    },
    "links": {
      "self": "https://api.sentinara.org/v1/countries/IDN",
      "series": "https://api.sentinara.org/v1/countries/IDN/series",
      "page": "https://sentinara.org/global/indonesia",
      "forecast": "https://api.sentinara.org/v1/countries/IDN/forecast",
      "anomalies": "https://api.sentinara.org/v1/countries/IDN/anomalies"
    },
    "annual": [
      {
        "year": 2014,
        "cases": 100347,
        "deaths": 907,
        "months_reported": 12
      },
      {
        "year": 2015,
        "cases": 129579,
        "deaths": 1244,
        "months_reported": 12
      },
      {
        "year": 2016,
        "cases": 204172,
        "deaths": 1598,
        "months_reported": 12
      },
      {
        "year": 2017,
        "cases": 68364,
        "deaths": 494,
        "months_reported": 12
      },
      {
        "year": 2018,
        "cases": 65591,
        "deaths": 467,
        "months_reported": 12
      },
      {
        "year": 2019,
        "cases": 138131,
        "deaths": 919,
        "months_reported": 12
      },
      "… 7 more"
    ],
    "serotypes_reported": [],
    "similar_seasonality": [
      "AUS",
      "COL",
      "PER",
      "TLS",
      "ABW",
      "LKA"
    ],
    "provenance": {
      "source": "WHO Global Dengue Surveillance",
      "extended_with": null,
      "negative_corrections_absorbed": 0
    }
  },
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#country"
  }
}

#Monthly series

GET/v1/countries/{country}/seriesKey optionalList · CSV

Monthly cases, deaths and severe cases reported to WHO. include_history=true prepends OpenDengue months where the sources were verified to agree.

ParameterInTypeDescription
country requiredpathstringISO 3166-1 alpha-3 code (IDN) or slug (indonesia).
fromquerystringFirst month (YYYY-MM), inclusive.
toquerystringLast month (YYYY-MM), inclusive.
include_historyquerytrue | false default falseInclude spliced OpenDengue history.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/countries/BRA/series?from=2025-01"
Example response 200
{
  "data": [
    {
      "month": "2025-01",
      "cases": 462699,
      "deaths": 289,
      "severe": 404,
      "source": "WHO"
    },
    {
      "month": "2025-02",
      "cases": 569042,
      "deaths": 311,
      "severe": 439,
      "source": "WHO"
    },
    {
      "month": "2025-03",
      "cases": 693042,
      "deaths": 432,
      "severe": 576,
      "source": "WHO"
    },
    {
      "month": "2025-04",
      "cases": 792762,
      "deaths": 383,
      "severe": 560,
      "source": "WHO"
    },
    {
      "month": "2025-05",
      "cases": 466447,
      "deaths": 203,
      "severe": 278,
      "source": "WHO"
    },
    {
      "month": "2025-06",
      "cases": 182242,
      "deaths": 87,
      "severe": 110,
      "source": "WHO"
    },
    "… 15 more"
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#countrySeries",
    "iso3": "BRA",
    "latest_complete_month": "2026-09",
    "total": 21,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/countries/BRA/series?from=2025-01",
    "next": null
  }
}

#Six-month forecast

GET/v1/countries/{country}/forecastKey optional

Ensemble forecast with 80% and 95% ranges, the probability of exceeding the epidemic threshold, and backtest skill. 404 not_available when there is not enough data.

ParameterInTypeDescription
country requiredpathstringISO 3166-1 alpha-3 code (IDN) or slug (indonesia).
bash
curl "https://api.sentinara.org/v1/countries/IDN/forecast"
Example response 200
{
  "data": {
    "iso3": "IDN",
    "name": "Indonesia",
    "issued_from": "2026-08",
    "model": "weighted ensemble (seasonal naive, damped Holt-Winters, harmonic regression with AR terms)",
    "weights": {
      "seasonalNaive": 0,
      "holtWinters": 0,
      "harmonicAR": 1
    },
    "backtest": {
      "origins": 26,
      "mape_pct": 14.8,
      "mase": 0.3,
      "coverage_80": 0.81
    },
    "skilled": true,
    "months": [
      {
        "month": "2026-09",
        "mean": 4057,
        "lower_80": 3216,
        "upper_80": 5117,
        "lower_95": 2844,
        "upper_95": 5787,
        "p_exceed_threshold": 0
      },
      {
        "month": "2026-10",
        "mean": 4294,
        "lower_80": 3192,
        "upper_80": 5777,
        "lower_95": 2728,
        "upper_95": 6758,
        "p_exceed_threshold": 0
      },
      {
        "month": "2026-11",
        "mean": 5395,
        "lower_80": 3917,
        "upper_80": 7430,
        "lower_95": 3307,
        "upper_95": 8802,
        "p_exceed_threshold": 0.001
      },
      {
        "month": "2026-12",
        "mean": 7478,
        "lower_80": 5168,
        "upper_80": 10822,
        "lower_95": 4249,
        "upper_95": 13160,
        "p_exceed_threshold": 0.002
      },
      {
        "month": "2027-01",
        "mean": 10138,
        "lower_80": 6707,
        "upper_80": 15325,
        "lower_95": 5389,
        "upper_95": 19071,
        "p_exceed_threshold": 0
      },
      {
        "month": "2027-02",
        "mean": 11587,
        "lower_80": 7369,
        "upper_80": 18220,
        "lower_95": 5799,
        "upper_95": 23152,
        "p_exceed_threshold": 0
      }
    ]
  },
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#countryForecast"
  }
}

#Detected anomalies

GET/v1/countries/{country}/anomaliesKey optional

Months flagged by the outbreak score or the robust z-score, most recent first.

ParameterInTypeDescription
country requiredpathstringISO 3166-1 alpha-3 code (IDN) or slug (indonesia).
bash
curl "https://api.sentinara.org/v1/countries/ECU/anomalies"
Example response 200
{
  "data": {
    "iso3": "ECU",
    "name": "Ecuador",
    "total": 15,
    "recent": [
      {
        "month": "2026-09",
        "cases": 5822,
        "expected": 1606,
        "upper_bound": 4836,
        "outbreak_score": 1.31,
        "robust_z": 3.04,
        "type": "spike",
        "method": "farrington"
      },
      {
        "month": "2024-07",
        "cases": 5937,
        "expected": 1540,
        "upper_bound": 4299,
        "outbreak_score": 1.59,
        "robust_z": 0.15,
        "type": "spike",
        "method": "farrington"
      },
      {
        "month": "2024-06",
        "cases": 6192,
        "expected": 1817,
        "upper_bound": 3951,
        "outbreak_score": 2.05,
        "robust_z": -0.58,
        "type": "spike",
        "method": "farrington"
      },
      {
        "month": "2024-05",
        "cases": 9970,
        "expected": 1920,
        "upper_bound": 3993,
        "outbreak_score": 3.88,
        "robust_z": 0.71,
        "type": "spike",
        "method": "farrington"
      },
      {
        "month": "2024-04",
        "cases": 8185,
        "expected": 2048,
        "upper_bound": 4638,
        "outbreak_score": 2.37,
        "robust_z": 0,
        "type": "spike",
        "method": "farrington"
      },
      {
        "month": "2024-03",
        "cases": 7605,
        "expected": 1885,
        "upper_bound": 4717,
        "outbreak_score": 2.02,
        "robust_z": 0,
        "type": "spike",
        "method": "farrington"
      },
      "… 9 more"
    ]
  },
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#countryAnomalies"
  }
}

#Early warning

Countries with an active signal and the outbreak probability calendar.

#Countries with a signal

GET/v1/warningsKey optionalList · CSV

Countries at or above min_level (default watch), ordered by score, with plain-language reasons.

ParameterInTypeDescription
levelquerynormal | watch | alert | outbreakEarly-warning level.
min_levelquerynormal | watch | alert | outbreak default watchMinimum level (ignored when level is set).
regionqueryAMR | SEAR | WPR | EMR | AFR | EURWHO region (case-insensitive).

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/warnings?min_level=alert"
Example response 200
{
  "data": [
    {
      "iso3": "ECU",
      "slug": "ecuador",
      "name": "Ecuador",
      "region": "AMR",
      "level": "outbreak",
      "score": 8,
      "as_of": "2026-09",
      "endemic_zone": "epidemi",
      "reasons": [
        {
          "code": "zone-epidemic",
          "text": "Latest month is above the epidemic threshold of the endemic channel"
        },
        {
          "code": "outbreak-score",
          "text": "Outbreak score above 1: cases exceed the 99.5% upper bound for the season",
          "value": 1.31
        },
        {
          "code": "sustained-rise",
          "text": "CUSUM detects a sustained rise",
          "since": "2026-07"
        },
        {
          "code": "forecast-exceed",
          "text": "High probability that the next three months exceed the epidemic threshold",
          "value": 0.581
        }
      ],
      "p_exceed_next_3_months": 0.581,
      "outbreak_score": 1.31,
      "momentum_pct": 26.2,
      "next_month": {
        "month": "2026-10",
        "mean": 4216,
        "lower_80": 2933,
        "upper_80": 6059
      },
      "links": {
        "country": "https://api.sentinara.org/v1/countries/ECU"
      }
    },
    {
      "iso3": "KHM",
      "slug": "cambodia",
      "name": "Cambodia",
      "region": "WPR",
      "level": "outbreak",
      "score": 7.5,
      "as_of": "2026-09",
      "endemic_zone": "waspada",
      "reasons": [
        {
          "code": "zone-alert",
          "text": "Latest month is above the 3rd quartile of the previous five years"
        },
        {
          "code": "outbreak-score",
          "text": "Outbreak score above 1: cases exceed the 99.5% upper bound for the season",
          "value": 1.63
        },
        {
          "code": "sustained-rise",
          "text": "CUSUM detects a sustained rise",
          "since": "2026-07"
        },
        {
          "code": "forecast-exceed",
          "text": "High probability that the next three months exceed the epidemic threshold",
          "value": 0.586
        },
        {
          "code": "momentum",
          "text": "Last three months well above the three months before",
          "value": 512.2
        }
      ],
      "p_exceed_next_3_months": 0.586,
      "outbreak_score": 1.63,
      "momentum_pct": 512.2,
      "next_month": {
        "month": "2026-10",
        "mean": 17855,
        "lower_80": 10409,
        "upper_80": 30626
      },
      "links": {
        "country": "https://api.sentinara.org/v1/countries/KHM"
      }
    },
    {
      "iso3": "LKA",
      "slug": "sri-lanka",
      "name": "Sri Lanka",
      "region": "SEAR",
      "level": "outbreak",
      "score": 5.5,
      "as_of": "2026-08",
      "endemic_zone": "waspada",
      "reasons": [
        {
          "code": "zone-alert",
          "text": "Latest month is above the 3rd quartile of the previous five years"
        },
        {
          "code": "elevated-score",
          "text": "Outbreak score above 0.5: cases well above the seasonal expectation",
          "value": 0.86
        },
        {
          "code": "forecast-exceed",
          "text": "High probability that the next three months exceed the epidemic threshold",
          "value": 0.721
        },
        {
          "code": "momentum",
          "text": "Last three months well above the three months before",
          "value": 204.1
        }
      ],
      "p_exceed_next_3_months": 0.721,
      "outbreak_score": 0.86,
      "momentum_pct": 204.1,
      "next_month": {
        "month": "2026-09",
        "mean": 5673,
        "lower_80": 3919,
        "upper_80": 8214
      },
      "links": {
        "country": "https://api.sentinara.org/v1/countries/LKA"
      }
    },
    {
      "iso3": "PER",
      "slug": "peru",
      "name": "Peru",
      "region": "AMR",
      "level": "outbreak",
      "score": 5.5,
      "as_of": "2026-09",
      "endemic_zone": "waspada",
      "reasons": [
        {
          "code": "zone-alert",
          "text": "Latest month is above the 3rd quartile of the previous five years"
        },
        {
          "code": "elevated-score",
          "text": "Outbreak score above 0.5: cases well above the seasonal expectation",
          "value": 0.56
        },
        {
          "code": "sustained-rise",
          "text": "CUSUM detects a sustained rise",
          "since": "2026-07"
        },
        {
          "code": "forecast-exceed-possible",
          "text": "Possible crossing of the epidemic threshold within three months",
          "value": 0.448
        },
        {
          "code": "momentum",
          "text": "Last three months well above the three months before",
          "value": 42.2
        }
      ],
      "p_exceed_next_3_months": 0.448,
      "outbreak_score": 0.56,
      "momentum_pct": 42.2,
      "next_month": {
        "month": "2026-10",
        "mean": 6088,
        "lower_80": 3365,
        "upper_80": 11013
      },
      "links": {
        "country": "https://api.sentinara.org/v1/countries/PER"
      }
    },
    {
      "iso3": "MDV",
      "slug": "maldives",
      "name": "Maldives",
      "region": "SEAR",
      "level": "outbreak",
      "score": 4.5,
      "as_of": "2026-08",
      "endemic_zone": "waspada",
      "reasons": [
        {
          "code": "zone-alert",
          "text": "Latest month is above the 3rd quartile of the previous five years"
        },
        {
          "code": "elevated-score",
          "text": "Outbreak score above 0.5: cases well above the seasonal expectation",
          "value": 0.66
        },
        {
          "code": "forecast-exceed",
          "text": "High probability that the next three months exceed the epidemic threshold",
          "value": 0.548
        }
      ],
      "p_exceed_next_3_months": 0.548,
      "outbreak_score": 0.66,
      "momentum_pct": -23,
      "next_month": {
        "month": "2026-09",
        "mean": 347,
        "lower_80": 214,
        "upper_80": 561
      },
      "links": {
        "country": "https://api.sentinara.org/v1/countries/MDV"
      }
    }
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#warnings",
    "counts": {
      "normal": 44,
      "watch": 8,
      "alert": 0,
      "outbreak": 5,
      "stale": 2,
      "insufficient": 140
    },
    "engine_version": "1.0.0",
    "total": 5,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/warnings?min_level=alert",
    "next": null
  }
}

#Outbreak probability calendar

GET/v1/warnings/calendarKey optionalList · CSV

For countries whose forecast has shown skill: the probability that each of the next six months exceeds its epidemic threshold.

ParameterInTypeDescription
min_probabilityquerynumber default 0Only countries whose highest monthly probability is at least this value.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/warnings/calendar?min_probability=0.2"
Example response 200
{
  "data": [
    {
      "iso3": "KHM",
      "name": "Cambodia",
      "max_probability": 0.803,
      "months": [
        {
          "month": "2026-10",
          "p_exceed_threshold": 0.08
        },
        {
          "month": "2026-11",
          "p_exceed_threshold": 0.21
        },
        {
          "month": "2026-12",
          "p_exceed_threshold": 0.431
        },
        {
          "month": "2027-01",
          "p_exceed_threshold": 0.803
        },
        {
          "month": "2027-02",
          "p_exceed_threshold": 0.71
        },
        {
          "month": "2027-03",
          "p_exceed_threshold": 0.758
        }
      ]
    },
    {
      "iso3": "ECU",
      "name": "Ecuador",
      "max_probability": 0.572,
      "months": [
        {
          "month": "2026-10",
          "p_exceed_threshold": 0.11
        },
        {
          "month": "2026-11",
          "p_exceed_threshold": 0.206
        },
        {
          "month": "2026-12",
          "p_exceed_threshold": 0.407
        },
        {
          "month": "2027-01",
          "p_exceed_threshold": 0.32
        },
        {
          "month": "2027-02",
          "p_exceed_threshold": 0.489
        },
        {
          "month": "2027-03",
          "p_exceed_threshold": 0.572
        }
      ]
    },
    {
      "iso3": "LKA",
      "name": "Sri Lanka",
      "max_probability": 0.509,
      "months": [
        {
          "month": "2026-09",
          "p_exceed_threshold": 0.342
        },
        {
          "month": "2026-10",
          "p_exceed_threshold": 0.509
        },
        {
          "month": "2026-11",
          "p_exceed_threshold": 0.136
        },
        {
          "month": "2026-12",
          "p_exceed_threshold": 0.072
        },
        {
          "month": "2027-01",
          "p_exceed_threshold": 0.061
        },
        {
          "month": "2027-02",
          "p_exceed_threshold": 0.196
        }
      ]
    },
    {
      "iso3": "MDV",
      "name": "Maldives",
      "max_probability": 0.457,
      "months": [
        {
          "month": "2026-09",
          "p_exceed_threshold": 0.457
        },
        {
          "month": "2026-10",
          "p_exceed_threshold": 0.007
        },
        {
          "month": "2026-11",
          "p_exceed_threshold": 0.162
        },
        {
          "month": "2026-12",
          "p_exceed_threshold": 0.062
        },
        {
          "month": "2027-01",
          "p_exceed_threshold": 0.058
        },
        {
          "month": "2027-02",
          "p_exceed_threshold": 0.116
        }
      ]
    },
    {
      "iso3": "PER",
      "name": "Peru",
      "max_probability": 0.235,
      "months": [
        {
          "month": "2026-10",
          "p_exceed_threshold": 0.235
        },
        {
          "month": "2026-11",
          "p_exceed_threshold": 0.06
        },
        {
          "month": "2026-12",
          "p_exceed_threshold": 0.232
        },
        {
          "month": "2027-01",
          "p_exceed_threshold": 0.153
        },
        {
          "month": "2027-02",
          "p_exceed_threshold": 0.032
        },
        {
          "month": "2027-03",
          "p_exceed_threshold": 0.015
        }
      ]
    }
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#warningsCalendar",
    "total": 5,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/warnings/calendar?min_probability=0.2",
    "next": null
  }
}

#Indonesia

National series since 2010, annual totals since 1968, forecast and 33 harmonised provinces.

#National summary

GET/v1/indonesiaKey optional

Current endemic-channel status, year to date, peak month, seasonality and warning assessment.

bash
curl "https://api.sentinara.org/v1/indonesia"
Example response 200
{
  "data": {
    "name": "Indonesia",
    "latest_month": "2026-09",
    "latest_complete_month": "2026-08",
    "population": 285721236,
    "status": {
      "month": "2026-08",
      "cases": 4167,
      "endemic_zone": "sukses",
      "median": 11745,
      "q3": 12348,
      "epidemic_threshold": 28363
    },
    "year_to_date": {
      "year": 2026,
      "through_month": 8,
      "cases": 88178,
      "deaths": 240,
      "case_fatality_pct": 0.27,
      "previous_year_cases": 130105,
      "change_pct": -32.2,
      "vs_five_year_average_pct": -21.1
    },
    "peak_month_on_record": {
      "month": "2024-03",
      "cases": 32292
    },
    "seasonality_share_pct": [
      13.4,
      12.05,
      10.8,
      9.42,
      9.07,
      7.64,
      "… 6 more"
    ],
    "warning": {
      "status": "ok",
      "level": "normal",
      "score": 0,
      "as_of": "2026-08",
      "reliability": "high",
      "forecast_skilled": true,
      "endemic_zone": "sukses",
      "reasons": [
        {
          "code": "within-pattern",
          "text": "Within the usual range for this time of year"
        }
      ],
      "signals": {
        "outbreak_score": -0.41,
        "expected_cases": 9867,
        "upper_bound": 23654,
        "robust_z": -2.45,
        "cusum": 0,
        "cusum_alarm": false,
        "p_exceed_next_3_months": 0,
        "momentum_pct": -42.3,
        "vs_last_year_pct": -45.2
      },
      "points": [
        {
          "signal": "zone",
          "points": 0
        },
        {
          "signal": "outbreak-score",
          "points": 0
        },
        {
          "signal": "cusum",
          "points": 0
        },
        {
          "signal": "forecast",
          "points": 0,
          "used": true
        },
        {
          "signal": "momentum",
          "points": 0
        }
      ],
      "endemic_channel": {
        "reference_years": [
          2021,
          2022,
          2023,
          2024,
          2025
        ],
        "median": [
          20486,
          11849,
          10220,
          10664,
          12470,
          12762,
          "… 6 more"
        ],
        "q3": [
          23805,
          19930,
          15838,
          14656,
          16208,
          14239,
          "… 6 more"
        ],
        "epidemic_threshold": [
          62418,
          51467,
          44009,
          39313,
          42365,
          34644,
          "… 6 more"
        ]
      },
      "seasonality": {
        "share_pct": [
          13.4,
          12.05,
          10.8,
          9.42,
          9.07,
          7.64,
          "… 6 more"
        ],
        "peak_month": 1,
        "complete_years": 16
      },
      "data_quality": {
        "completeness": 1,
        "months_reported": 200,
        "longest_gap_months": 0,
        "suspect_months": [],
        "interpolated_months": []
      }
    },
    "links": {
      "series": "https://api.sentinara.org/v1/indonesia/series",
      "annual": "https://api.sentinara.org/v1/indonesia/annual",
      "forecast": "https://api.sentinara.org/v1/indonesia/forecast",
      "provinces": "https://api.sentinara.org/v1/indonesia/provinces"
    }
  },
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#indonesia"
  }
}

#National monthly series

GET/v1/indonesia/seriesKey optionalList · CSV

Monthly cases and deaths since 2010 (WHO).

ParameterInTypeDescription
fromquerystringFirst month (YYYY-MM), inclusive.
toquerystringLast month (YYYY-MM), inclusive.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/indonesia/series?from=2024-01"
Example response 200
{
  "data": [
    {
      "month": "2024-01",
      "cases": 27268,
      "deaths": 180
    },
    {
      "month": "2024-02",
      "cases": 29411,
      "deaths": 229
    },
    {
      "month": "2024-03",
      "cases": 32292,
      "deaths": 219
    },
    {
      "month": "2024-04",
      "cases": 30123,
      "deaths": 176
    },
    {
      "month": "2024-05",
      "cases": 32020,
      "deaths": 208
    },
    {
      "month": "2024-06",
      "cases": 24098,
      "deaths": 98
    },
    "… 27 more"
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#indonesiaSeries",
    "source": "WHO Global Dengue Surveillance",
    "latest_complete_month": "2026-08",
    "total": 33,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/indonesia/series?from=2024-01",
    "next": null
  }
}

#Annual totals since 1968

GET/v1/indonesia/annualKey optionalList · CSV

OpenDengue before 2010, WHO from 2010, with incidence and case fatality.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/indonesia/annual?format=csv"
Example response 200
year,cases,deaths,incidence_per_100k,case_fatality_pct,partial,source
1968,58,,,,false,OpenDengue
1969,167,,,,false,OpenDengue
1970,477,,,,false,OpenDengue
…

#National forecast

GET/v1/indonesia/forecastKey optional

Six-month ensemble forecast for Indonesia, including whether climate covariates were adopted.

bash
curl "https://api.sentinara.org/v1/indonesia/forecast"
Example response 200
{
  "data": {
    "name": "Indonesia",
    "climate_covariates_used": false,
    "issued_from": "2026-08",
    "model": "weighted ensemble (seasonal naive, damped Holt-Winters, harmonic regression with AR terms)",
    "weights": {
      "seasonalNaive": 0,
      "holtWinters": 0.457,
      "harmonicAR": 0.543
    },
    "backtest": {
      "origins": 26,
      "mape_pct": 12.6,
      "mase": 0.25,
      "coverage_80": 0.81
    },
    "skilled": true,
    "months": [
      {
        "month": "2026-09",
        "mean": 4020,
        "lower_80": 3298,
        "upper_80": 4900,
        "lower_95": 2970,
        "upper_95": 5441,
        "p_exceed_threshold": 0
      },
      {
        "month": "2026-10",
        "mean": 4209,
        "lower_80": 3179,
        "upper_80": 5572,
        "lower_95": 2740,
        "upper_95": 6465,
        "p_exceed_threshold": 0
      },
      {
        "month": "2026-11",
        "mean": 4879,
        "lower_80": 3551,
        "upper_80": 6703,
        "lower_95": 3001,
        "upper_95": 7931,
        "p_exceed_threshold": 0
      },
      {
        "month": "2026-12",
        "mean": 5579,
        "lower_80": 3866,
        "upper_80": 8052,
        "lower_95": 3183,
        "upper_95": 9777,
        "p_exceed_threshold": 0
      },
      {
        "month": "2027-01",
        "mean": 8748,
        "lower_80": 5804,
        "upper_80": 13183,
        "lower_95": 4672,
        "upper_95": 16380,
        "p_exceed_threshold": 0
      },
      {
        "month": "2027-02",
        "mean": 9351,
        "lower_80": 5966,
        "upper_80": 14654,
        "lower_95": 4703,
        "upper_95": 18589,
        "p_exceed_threshold": 0
      }
    ]
  },
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#indonesiaForecast"
  }
}

#List provinces

GET/v1/indonesia/provincesKey optionalList · CSV

Cases and incidence per province for the latest complete year (or year).

ParameterInTypeDescription
regionquerystringIsland group, e.g. Jawa, Sumatera.
yearqueryintegerYear (2007 onwards).
sortqueryname | incidence | -incidence | cases | -cases default -incidenceSort field.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/indonesia/provinces?region=Jawa"
Example response 200
{
  "data": [
    {
      "id": "jabar",
      "slug": "jawa-barat",
      "name": "Jawa Barat",
      "region": "Jawa",
      "capital": "Bandung",
      "lat": -6.9175,
      "lng": 107.6191,
      "year": 2023,
      "cases": 19328,
      "incidence_per_100k": 37.6,
      "complete_year": true,
      "pattern_level": "outbreak",
      "links": {
        "self": "https://api.sentinara.org/v1/indonesia/provinces/jawa-barat",
        "page": "https://sentinara.org/indonesia/jawa-barat"
      }
    },
    {
      "id": "jakarta",
      "slug": "dki-jakarta",
      "name": "DKI Jakarta",
      "region": "Jawa",
      "capital": "Jakarta",
      "lat": -6.2088,
      "lng": 106.8456,
      "year": 2023,
      "cases": 3908,
      "incidence_per_100k": 35.1,
      "complete_year": true,
      "pattern_level": "watch",
      "links": {
        "self": "https://api.sentinara.org/v1/indonesia/provinces/dki-jakarta",
        "page": "https://sentinara.org/indonesia/dki-jakarta"
      }
    },
    {
      "id": "banten",
      "slug": "banten",
      "name": "Banten",
      "region": "Jawa",
      "capital": "Serang",
      "lat": -6.12,
      "lng": 106.1503,
      "year": 2023,
      "cases": 4154,
      "incidence_per_100k": 31,
      "complete_year": true,
      "pattern_level": "alert",
      "links": {
        "self": "https://api.sentinara.org/v1/indonesia/provinces/banten",
        "page": "https://sentinara.org/indonesia/banten"
      }
    },
    {
      "id": "jatim",
      "slug": "jawa-timur",
      "name": "Jawa Timur",
      "region": "Jawa",
      "capital": "Surabaya",
      "lat": -7.2575,
      "lng": 112.7521,
      "year": 2023,
      "cases": 9401,
      "incidence_per_100k": 22.5,
      "complete_year": true,
      "pattern_level": "watch",
      "links": {
        "self": "https://api.sentinara.org/v1/indonesia/provinces/jawa-timur",
        "page": "https://sentinara.org/indonesia/jawa-timur"
      }
    },
    {
      "id": "jateng",
      "slug": "jawa-tengah",
      "name": "Jawa Tengah",
      "region": "Jawa",
      "capital": "Semarang",
      "lat": -6.9932,
      "lng": 110.4203,
      "year": 2023,
      "cases": 6659,
      "incidence_per_100k": 18.9,
      "complete_year": true,
      "pattern_level": "alert",
      "links": {
        "self": "https://api.sentinara.org/v1/indonesia/provinces/jawa-tengah",
        "page": "https://sentinara.org/indonesia/jawa-tengah"
      }
    },
    {
      "id": "diy",
      "slug": "di-yogyakarta",
      "name": "DI Yogyakarta",
      "region": "Jawa",
      "capital": "Yogyakarta",
      "lat": -7.7956,
      "lng": 110.3695,
      "year": 2023,
      "cases": 700,
      "incidence_per_100k": 17.8,
      "complete_year": true,
      "pattern_level": "watch",
      "links": {
        "self": "https://api.sentinara.org/v1/indonesia/provinces/di-yogyakarta",
        "page": "https://sentinara.org/indonesia/di-yogyakarta"
      }
    }
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#provinces",
    "source": "OpenDengue V1.3",
    "population_note": "BPS 2016 provincial shares × World Bank national population",
    "total": 6,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/indonesia/provinces?region=Jawa",
    "next": null
  }
}

#Province profile

GET/v1/indonesia/provinces/{province}Key optional

Annual cases, population and incidence, plus the pattern assessment at the latest provincial month.

ParameterInTypeDescription
province requiredpathstringProvince slug (jawa-barat) or id (jabar).
bash
curl "https://api.sentinara.org/v1/indonesia/provinces/jawa-barat"
Example response 200
{
  "data": {
    "id": "jabar",
    "slug": "jawa-barat",
    "name": "Jawa Barat",
    "region": "Jawa",
    "capital": "Bandung",
    "lat": -6.9175,
    "lng": 107.6191,
    "annual": [
      {
        "year": 2007,
        "cases": 30536,
        "population": 51889200,
        "incidence_per_100k": 58.8,
        "complete": true
      },
      {
        "year": 2008,
        "cases": 23248,
        "population": 51889200,
        "incidence_per_100k": 44.8,
        "complete": true
      },
      {
        "year": 2009,
        "cases": 37861,
        "population": 51889200,
        "incidence_per_100k": 73,
        "complete": true
      },
      {
        "year": 2010,
        "cases": 25727,
        "population": 45083351,
        "incidence_per_100k": 57.1,
        "complete": true
      },
      {
        "year": 2011,
        "cases": 13971,
        "population": 45662615,
        "incidence_per_100k": 30.6,
        "complete": true
      },
      {
        "year": 2012,
        "cases": 19663,
        "population": 46253554,
        "incidence_per_100k": 42.5,
        "complete": true
      },
      "… 12 more"
    ],
    "pattern_assessment": {
      "status": "ok",
      "level": "outbreak",
      "score": 5,
      "as_of": "2024-07",
      "reliability": "medium",
      "forecast_skilled": false,
      "endemic_zone": "epidemi",
      "reasons": [
        {
          "code": "zone-epidemic",
          "text": "Latest month is above the epidemic threshold of the endemic channel"
        },
        {
          "code": "outbreak-score",
          "text": "Outbreak score above 1: cases exceed the 99.5% upper bound for the season",
          "value": 1.27
        }
      ],
      "signals": {
        "outbreak_score": 1.27,
        "expected_cases": 1942,
        "upper_bound": 4133,
        "robust_z": -1.37,
        "cusum": 0,
        "cusum_alarm": false,
        "p_exceed_next_3_months": null,
        "momentum_pct": -12,
        "vs_last_year_pct": 308.6
      },
      "points": [
        {
          "signal": "zone",
          "points": 3
        },
        {
          "signal": "outbreak-score",
          "points": 2
        },
        {
          "signal": "cusum",
          "points": 0
        },
        {
          "signal": "forecast",
          "points": 0,
          "used": false
        },
        {
          "signal": "momentum",
          "points": 0
        }
      ],
      "endemic_channel": {
        "reference_years": [
          2019,
          2020,
          2021,
          2022,
          2023
        ],
        "median": [
          2438,
          2791,
          3158,
          2684,
          2574,
          2171,
          "… 6 more"
        ],
        "q3": [
          4505,
          3512,
          3168,
          3070,
          2636,
          2621,
          "… 6 more"
        ],
        "epidemic_threshold": [
          10950,
          7381,
          5449,
          4876,
          4361,
          4122,
          "… 6 more"
        ]
      },
      "seasonality": {
        "share_pct": [
          13.06,
          11.02,
          10.54,
          10.31,
          10.54,
          9.37,
          "… 6 more"
        ],
        "peak_month": 1,
        "complete_years": 17
      },
      "data_quality": {
        "completeness": 0.986,
        "months_reported": 208,
        "longest_gap_months": 1,
        "suspect_months": [],
        "interpolated_months": [
          "2011-04",
          "2016-02",
          "2020-09"
        ]
      }
    },
    "similar_seasonality": [
      "banten",
      "diy",
      "jateng",
      "malut",
      "kaltim"
    ],
    "links": {
      "series": "https://api.sentinara.org/v1/indonesia/provinces/jawa-barat/series",
      "page": "https://sentinara.org/indonesia/jawa-barat"
    }
  },
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#province"
  }
}

#Province monthly series

GET/v1/indonesia/provinces/{province}/seriesKey optionalList · CSV

Monthly cases from OpenDengue (2007 to 2024).

ParameterInTypeDescription
province requiredpathstringProvince slug (jawa-barat) or id (jabar).
fromquerystringFirst month (YYYY-MM), inclusive.
toquerystringLast month (YYYY-MM), inclusive.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/indonesia/provinces/bali/series?from=2023-01"
Example response 200
{
  "data": [
    {
      "month": "2023-01",
      "cases": 965
    },
    {
      "month": "2023-02",
      "cases": 963
    },
    {
      "month": "2023-03",
      "cases": 1005
    },
    {
      "month": "2023-04",
      "cases": 870
    },
    {
      "month": "2023-05",
      "cases": 851
    },
    {
      "month": "2023-06",
      "cases": 603
    },
    "… 18 more"
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#provinceSeries",
    "slug": "bali",
    "total": 24,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/indonesia/provinces/bali/series?from=2023-01",
    "next": null
  }
}

#Semarang

177 sub-districts of Semarang City: risk scores and spatial hotspots.

#List sub-districts

GET/v1/semarang/subdistrictsKey optionalList · CSV

Risk score and level for each of the 177 kelurahan in the latest year, with hotspot class.

ParameterInTypeDescription
kecamatanquerystringDistrict name.
riskquerysangat-tinggi | tinggi | sedang | rendahRisk level.
qquerystringCase-insensitive text search.
sortqueryscore | -score | incidence | -incidence | name default -scoreSort field.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/semarang/subdistricts?risk=sangat-tinggi"
Example response 200
{
  "data": [
    {
      "id": 6,
      "name": "Banyumanik",
      "kecamatan": "Banyumanik",
      "year": 2024,
      "cases": 93,
      "dhf_cases": 5,
      "df_cases": 88,
      "incidence_per_100k": 798.9,
      "five_year_mean_incidence": 340.1,
      "trend_pct": 135,
      "persistence": 0.78,
      "risk_score": 0.859,
      "risk_level": "sangat-tinggi",
      "hotspot": "hot90"
    },
    {
      "id": 110,
      "name": "Pekunden",
      "kecamatan": "Semarang Tengah",
      "year": 2024,
      "cases": 27,
      "dhf_cases": 1,
      "df_cases": 26,
      "incidence_per_100k": 755,
      "five_year_mean_incidence": 145.7,
      "trend_pct": 418,
      "persistence": 0.33,
      "risk_score": 0.846,
      "risk_level": "sangat-tinggi",
      "hotspot": "ns"
    },
    {
      "id": 137,
      "name": "Sambirejo",
      "kecamatan": "Gayamsari",
      "year": 2024,
      "cases": 68,
      "dhf_cases": 3,
      "df_cases": 65,
      "incidence_per_100k": 840.5,
      "five_year_mean_incidence": 203.8,
      "trend_pct": 312,
      "persistence": 0.22,
      "risk_score": 0.827,
      "risk_level": "sangat-tinggi",
      "hotspot": "ns"
    },
    {
      "id": 101,
      "name": "Pandansari",
      "kecamatan": "Semarang Tengah",
      "year": 2024,
      "cases": 22,
      "dhf_cases": 2,
      "df_cases": 20,
      "incidence_per_100k": 861.1,
      "five_year_mean_incidence": 101.9,
      "trend_pct": 745,
      "persistence": 0.11,
      "risk_score": 0.819,
      "risk_level": "sangat-tinggi",
      "hotspot": "hot90"
    },
    {
      "id": 147,
      "name": "Siwalan",
      "kecamatan": "Gayamsari",
      "year": 2024,
      "cases": 64,
      "dhf_cases": 2,
      "df_cases": 62,
      "incidence_per_100k": 765.2,
      "five_year_mean_incidence": 198.6,
      "trend_pct": 285,
      "persistence": 0.22,
      "risk_score": 0.812,
      "risk_level": "sangat-tinggi",
      "hotspot": "ns"
    },
    {
      "id": 15,
      "name": "Bubakan",
      "kecamatan": "Mijen",
      "year": 2024,
      "cases": 24,
      "dhf_cases": 2,
      "df_cases": 22,
      "incidence_per_100k": 884,
      "five_year_mean_incidence": 258.2,
      "trend_pct": 242,
      "persistence": 0.22,
      "risk_score": 0.809,
      "risk_level": "sangat-tinggi",
      "hotspot": "ns"
    },
    "… 13 more"
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#subdistricts",
    "source": "Dinas Kesehatan Kota Semarang",
    "risk_levels": [
      "sangat-tinggi (very high)",
      "tinggi (high)",
      "sedang (moderate)",
      "rendah (low)"
    ],
    "total": 19,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/semarang/subdistricts?risk=sangat-tinggi",
    "next": null
  }
}

#Sub-district profile

GET/v1/semarang/subdistricts/{id}Key optional

Annual cases and population, risk components and Gi* z-scores by year.

ParameterInTypeDescription
id requiredpathintegerSub-district (kelurahan) id from /v1/semarang/subdistricts.
bash
curl "https://api.sentinara.org/v1/semarang/subdistricts/0"
Example response 200
{
  "data": {
    "id": 0,
    "name": "Bambankerep",
    "kecamatan": "Banyumanik",
    "lat": -6.9935,
    "lng": 110.4027,
    "risk_score": 0.794,
    "risk_level": "sangat-tinggi",
    "incidence_per_100k": 676,
    "trend_pct": 308,
    "persistence": 0.22,
    "annual_cases": [
      {
        "year": 2016,
        "cases": 16,
        "population": 6006
      },
      {
        "year": 2017,
        "cases": 0,
        "population": 5816
      },
      {
        "year": 2018,
        "cases": 3,
        "population": 5921
      },
      {
        "year": 2019,
        "cases": 3,
        "population": 5921
      },
      {
        "year": 2020,
        "cases": 15,
        "population": 5917
      },
      {
        "year": 2021,
        "cases": 1,
        "population": 5917
      },
      "… 3 more"
    ],
    "hotspot_gi_z": [
      {
        "year": 2016,
        "z": -0.45
      },
      {
        "year": 2017,
        "z": -1.89
      },
      {
        "year": 2018,
        "z": 0.45
      },
      {
        "year": 2019,
        "z": -1.98
      },
      {
        "year": 2020,
        "z": -0.97
      },
      {
        "year": 2021,
        "z": -1.25
      },
      "… 3 more"
    ]
  },
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#subdistrict"
  }
}

#Spatial hotspots

GET/v1/semarang/hotspotsKey optional

Moran's I for the year and the Getis-Ord Gi* class of every sub-district.

ParameterInTypeDescription
yearqueryintegerYear (default: latest).
bash
curl "https://api.sentinara.org/v1/semarang/hotspots?year=2024"
Example response 200
{
  "data": {
    "year": 2024,
    "neighbours_k": 6,
    "morans_i": {
      "year": 2024,
      "I": 0.001,
      "expected": -0.0057,
      "z": 0.18,
      "p": 0.426
    },
    "subdistricts": [
      {
        "id": 11,
        "name": "Beringin",
        "kecamatan": "Ngaliyan",
        "gi_z": 2.67,
        "class": "hot99"
      },
      {
        "id": 5,
        "name": "Banjardowo",
        "kecamatan": "Genuk",
        "gi_z": 2.44,
        "class": "hot95"
      },
      {
        "id": 29,
        "name": "Gedawang",
        "kecamatan": "Banyumanik",
        "gi_z": 1.87,
        "class": "hot90"
      },
      {
        "id": 40,
        "name": "Jatirejo",
        "kecamatan": "Gunungpati",
        "gi_z": 1.86,
        "class": "hot90"
      },
      {
        "id": 101,
        "name": "Pandansari",
        "kecamatan": "Semarang Tengah",
        "gi_z": 1.86,
        "class": "hot90"
      },
      {
        "id": 131,
        "name": "Randusari",
        "kecamatan": "Semarang Selatan",
        "gi_z": 1.82,
        "class": "hot90"
      },
      "… 171 more"
    ]
  },
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#hotspots"
  }
}

#Models

Model performance, backtests, the real-time forecast archive, multi-year cycles and climate.

#Model performance

GET/v1/modelsKey optional

Calibration, best-model counts, the Indonesia ensemble, the climate test and the forecast leaderboard.

bash
curl "https://api.sentinara.org/v1/models"
Example response 200
{
  "data": {
    "version": "1.0.0",
    "updated_at": "2026-10-31T06:49:43.461Z",
    "calibration": [
      {
        "level": 0.5,
        "observed": 0.577,
        "n": 1396
      },
      {
        "level": 0.8,
        "observed": 0.801,
        "n": 1396
      },
      {
        "level": 0.9,
        "observed": 0.894,
        "n": 1396
      },
      {
        "level": 0.95,
        "observed": 0.941,
        "n": 1396
      }
    ],
    "best_model_counts": {
      "harmonicAR": 26,
      "holtWinters": 9,
      "seasonalNaive": 3
    },
    "indonesia": {
      "backtest": {
        "origins": 26,
        "horizons": 3,
        "mape": 12.6,
        "mase": 0.25,
        "coverage80": 0.81,
        "maeLog": 0.1163
      },
      "weights": {
        "seasonalNaive": 0,
        "holtWinters": 0.457,
        "harmonicAR": 0.543
      },
      "models": [
        {
          "id": "seasonalNaive",
          "label": "Seasonal naive",
          "weight": 0,
          "maeLog": 0.376,
          "mape": 47.8
        },
        {
          "id": "holtWinters",
          "label": "Damped Holt-Winters",
          "weight": 0.457,
          "maeLog": 0.186,
          "mape": 13.5
        },
        {
          "id": "harmonicAR",
          "label": "Harmonic regression + AR (ridge)",
          "weight": 0.543,
          "maeLog": 0.171,
          "mape": 15
        }
      ]
    },
    "climate": {
      "adopted": false,
      "with_climate": {
        "mape": 12.8,
        "mase": 0.26,
        "maeLog": 0.1209,
        "coverage80": 0.81
      },
      "without_climate": {
        "mape": 12.6,
        "mase": 0.25,
        "maeLog": 0.1163,
        "coverage80": 0.81
      },
      "correlations": {
        "oni": [
          {
            "lag": 0,
            "r": -0.012
          },
          {
            "lag": 1,
            "r": 0.082
          },
          {
            "lag": 2,
            "r": 0.175
          },
          {
            "lag": 3,
            "r": 0.249
          },
          {
            "lag": 4,
            "r": 0.291
          },
          {
            "lag": 5,
            "r": 0.292
          },
          "… 7 more"
        ],
        "rain": [
          {
            "lag": 0,
            "r": 0.327
          },
          {
            "lag": 1,
            "r": 0.383
          },
          {
            "lag": 2,
            "r": 0.288
          },
          {
            "lag": 3,
            "r": 0.063
          },
          {
            "lag": 4,
            "r": -0.139
          }
        ],
        "temp": [
          {
            "lag": 0,
            "r": 0.076
          },
          {
            "lag": 1,
            "r": 0.189
          },
          {
            "lag": 2,
            "r": 0.335
          },
          {
            "lag": 3,
            "r": 0.439
          },
          {
            "lag": 4,
            "r": 0.427
          }
        ],
        "rh": [
          {
            "lag": 0,
            "r": 0.324
          },
          {
            "lag": 1,
            "r": 0.291
          },
          {
            "lag": 2,
            "r": 0.105
          },
          {
            "lag": 3,
            "r": -0.162
          },
          {
            "lag": 4,
            "r": -0.361
          }
        ]
      },
      "enso": {
        "ym": "2026-08",
        "value": 2.16
      },
      "enso_phase": "strong-el-nino"
    },
    "leaderboard": [
      {
        "iso3": "ARG",
        "slug": "argentina",
        "name": "Argentina",
        "nameEn": "Argentina",
        "region": "AMR",
        "mape": 92.6,
        "mase": 0.02,
        "coverage80": 0.81,
        "best": "harmonicAR",
        "weights": {
          "seasonalNaive": 0,
          "holtWinters": 0.475,
          "harmonicAR": 0.525
        },
        "level": "normal",
        "reliability": "medium",
        "avgCases": 745,
        "ranked": true
      },
      {
        "iso3": "URY",
        "slug": "uruguay",
        "name": "Uruguay",
        "nameEn": "Uruguay",
        "region": "AMR",
        "mape": 96.7,
        "mase": 0.02,
        "coverage80": 0.81,
        "best": "holtWinters",
        "weights": {
          "seasonalNaive": 0,
          "holtWinters": 1,
          "harmonicAR": 0
        },
        "level": "normal",
        "reliability": "low",
        "avgCases": 0,
        "ranked": false
      },
      {
        "iso3": "JAM",
        "slug": "jamaica",
        "name": "Jamaika",
        "nameEn": "Jamaica",
        "region": "AMR",
        "mape": 39.2,
        "mase": 0.05,
        "coverage80": 0.73,
        "best": "harmonicAR",
        "weights": {
          "seasonalNaive": 0,
          "holtWinters": 0.36,
          "harmonicAR": 0.64
        },
        "level": "watch",
        "reliability": "high",
        "avgCases": 41,
        "ranked": true
      },
      {
        "iso3": "BLM",
        "slug": "saint-barthelemy",
        "name": "Saint Barthélemy",
        "nameEn": "Saint Barthélemy",
        "region": "AMR",
        "mape": 171.1,
        "mase": 0.05,
        "coverage80": 0.81,
        "best": "harmonicAR",
        "weights": {
          "seasonalNaive": 0,
          "holtWinters": 0.488,
          "harmonicAR": 0.512
        },
        "level": "normal",
        "reliability": "low",
        "avgCases": 2,
        "ranked": false
      },
      {
        "iso3": "PRY",
        "slug": "paraguay",
        "name": "Paraguay",
        "nameEn": "Paraguay",
        "region": "AMR",
        "mape": 36.4,
        "mase": 0.06,
        "coverage80": 0.73,
        "best": "holtWinters",
        "weights": {
          "seasonalNaive": 0,
          "holtWinters": 0.552,
          "harmonicAR": 0.448
        },
        "level": "normal",
        "reliability": "high",
        "avgCases": 2034,
        "ranked": true
      },
      {
        "iso3": "DOM",
        "slug": "dominican-republic",
        "name": "Republik Dominika",
        "nameEn": "Dominican Republic",
        "region": "AMR",
        "mape": 44.1,
        "mase": 0.06,
        "coverage80": 0.77,
        "best": "harmonicAR",
        "weights": {
          "seasonalNaive": 0,
          "holtWinters": 0.371,
          "harmonicAR": 0.629
        },
        "level": "normal",
        "reliability": "high",
        "avgCases": 146,
        "ranked": true
      },
      "… 48 more"
    ]
  },
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#models"
  }
}

#Indonesia backtest replay

GET/v1/models/backtestKey optionalList · CSV

One-month-ahead forecasts the ensemble would have made, against what happened.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/models/backtest"
Example response 200
{
  "data": [
    {
      "month": "2024-07",
      "actual": 19265,
      "predicted": 20166,
      "lower_80": 16545,
      "upper_80": 24579
    },
    {
      "month": "2024-08",
      "actual": 14563,
      "predicted": 16199,
      "lower_80": 13290,
      "upper_80": 19744
    },
    {
      "month": "2024-09",
      "actual": 11074,
      "predicted": 12561,
      "lower_80": 10306,
      "upper_80": 15310
    },
    {
      "month": "2024-10",
      "actual": 10970,
      "predicted": 11152,
      "lower_80": 9149,
      "upper_80": 13592
    },
    {
      "month": "2024-11",
      "actual": 11975,
      "predicted": 12189,
      "lower_80": 10001,
      "upper_80": 14857
    },
    {
      "month": "2024-12",
      "actual": 14212,
      "predicted": 12955,
      "lower_80": 10629,
      "upper_80": 15790
    },
    "… 20 more"
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#modelsBacktest",
    "scope": "Indonesia, one month ahead",
    "total": 26,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/models/backtest",
    "next": null
  }
}

#Real-time forecast archive

GET/v1/models/archiveKey optionalList · CSV

Every archived forecast (first per scope and origin month).

ParameterInTypeDescription
scopequerystringISO3 code; IDN also matches the national forecast.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/models/archive?scope=IDN"
Example response 200
{
  "data": [
    {
      "scope": "IDN",
      "origin": "2026-08",
      "issued": "2026-10-30",
      "months": [
        {
          "month": "2026-09",
          "mean": 4057,
          "lower_80": 3216,
          "upper_80": 5117,
          "lower_95": 2844,
          "upper_95": 5787
        },
        {
          "month": "2026-10",
          "mean": 4294,
          "lower_80": 3192,
          "upper_80": 5777,
          "lower_95": 2728,
          "upper_95": 6758
        },
        {
          "month": "2026-11",
          "mean": 5395,
          "lower_80": 3917,
          "upper_80": 7430,
          "lower_95": 3307,
          "upper_95": 8802
        },
        {
          "month": "2026-12",
          "mean": 7478,
          "lower_80": 5168,
          "upper_80": 10822,
          "lower_95": 4249,
          "upper_95": 13160
        },
        {
          "month": "2027-01",
          "mean": 10138,
          "lower_80": 6707,
          "upper_80": 15325,
          "lower_95": 5389,
          "upper_95": 19071
        },
        {
          "month": "2027-02",
          "mean": 11587,
          "lower_80": 7369,
          "upper_80": 18220,
          "lower_95": 5799,
          "upper_95": 23152
        }
      ]
    },
    {
      "scope": "national:IDN",
      "origin": "2026-08",
      "issued": "2026-10-30",
      "months": [
        {
          "month": "2026-09",
          "mean": 4020,
          "lower_80": 3298,
          "upper_80": 4900,
          "lower_95": 2970,
          "upper_95": 5441
        },
        {
          "month": "2026-10",
          "mean": 4209,
          "lower_80": 3179,
          "upper_80": 5572,
          "lower_95": 2740,
          "upper_95": 6465
        },
        {
          "month": "2026-11",
          "mean": 4879,
          "lower_80": 3551,
          "upper_80": 6703,
          "lower_95": 3001,
          "upper_95": 7931
        },
        {
          "month": "2026-12",
          "mean": 5579,
          "lower_80": 3866,
          "upper_80": 8052,
          "lower_95": 3183,
          "upper_95": 9777
        },
        {
          "month": "2027-01",
          "mean": 8748,
          "lower_80": 5804,
          "upper_80": 13183,
          "lower_95": 4672,
          "upper_95": 16380
        },
        {
          "month": "2027-02",
          "mean": 9351,
          "lower_80": 5966,
          "upper_80": 14654,
          "lower_95": 4703,
          "upper_95": 18589
        }
      ]
    }
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#archive",
    "started": "2026-10-30",
    "rule": "only the first forecast per scope and origin month is kept",
    "total": 2,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/models/archive?scope=IDN",
    "next": null
  }
}

#Multi-year cycles

GET/v1/models/cyclesKey optionalList · CSV

Lomb-Scargle cycle analysis with permutation significance.

ParameterInTypeDescription
significantquerytrue | falseFilter by significance.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/models/cycles?significant=true"
Example response 200
{
  "data": [
    {
      "iso3": "AUS",
      "years": [
        1979,
        2024
      ],
      "n": 37,
      "period": 5.2,
      "power": 0.301,
      "p": 0.038,
      "significant": true,
      "amplitude": 1.49,
      "lastPeak": 2024,
      "nextPeak": 2029,
      "trendPerYear": 7.8,
      "surges": [
        1982,
        1992,
        1993,
        1998,
        2003,
        2009,
        "… 2 more"
      ],
      "name": "Australia"
    },
    {
      "iso3": "GUY",
      "years": [
        1978,
        2024
      ],
      "n": 27,
      "period": 11.6,
      "power": 0.4285,
      "p": 0.03,
      "significant": true,
      "amplitude": 3.62,
      "lastPeak": 2023,
      "nextPeak": 2034,
      "trendPerYear": 15,
      "surges": [
        1978,
        2010,
        2012,
        2022,
        2023,
        2024
      ],
      "name": "Guyana"
    },
    {
      "iso3": "NCL",
      "years": [
        1979,
        2024
      ],
      "n": 36,
      "period": 4.8,
      "power": 0.4499,
      "p": 0.004,
      "significant": true,
      "amplitude": 8.99,
      "lastPeak": 2023,
      "nextPeak": 2027,
      "trendPerYear": 6.3,
      "surges": [
        1980,
        1989,
        1995,
        1998,
        2003,
        2009,
        "… 2 more"
      ],
      "name": "New Caledonia"
    }
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#cycles",
    "method": "Lomb-Scargle periodogram of log annual cases after removing a linear trend; periods 2 to 12 years; 500-permutation test; sinusoid fit for peak timing.",
    "total": 3,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/models/cycles?significant=true",
    "next": null
  }
}

#Indonesia climate series

GET/v1/climate/indonesiaKey optionalList · CSV

Monthly rainfall, temperature, humidity (NASA POWER, population-weighted) and ONI.

ParameterInTypeDescription
fromquerystringFirst month (YYYY-MM), inclusive.
toquerystringLast month (YYYY-MM), inclusive.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/climate/indonesia?from=2025-01"
Example response 200
{
  "data": [
    {
      "month": "2025-01",
      "rain_mm": 403,
      "temperature_c": 25.26,
      "humidity_pct": 88.4,
      "oni": -0.46
    },
    {
      "month": "2025-02",
      "rain_mm": 257,
      "temperature_c": 25.3,
      "humidity_pct": 88,
      "oni": -0.22
    },
    {
      "month": "2025-03",
      "rain_mm": 273,
      "temperature_c": 25.7,
      "humidity_pct": 87.5,
      "oni": -0.08
    },
    {
      "month": "2025-04",
      "rain_mm": 214,
      "temperature_c": 25.8,
      "humidity_pct": 85.6,
      "oni": 0.02
    },
    {
      "month": "2025-05",
      "rain_mm": 252,
      "temperature_c": 26.08,
      "humidity_pct": 86.6,
      "oni": -0.04
    },
    {
      "month": "2025-06",
      "rain_mm": 170,
      "temperature_c": 25.48,
      "humidity_pct": 86.1,
      "oni": -0.02
    },
    "… 15 more"
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#climate",
    "sources": [
      "NASA POWER (MERRA-2), monthly, 33 provincial capitals, population-weighted",
      "NOAA CPC Oceanic Niño Index (ONI)"
    ],
    "note": "Population-weighted mean of the 33 provincial capitals",
    "total": 21,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/climate/indonesia?from=2025-01",
    "next": null
  }
}

#Reference

Seasonality, glossary and the dataset catalogue with checksums.

#Seasonal profiles

GET/v1/seasonalityKey optionalList · CSV

Monthly share of yearly cases and peak month.

ParameterInTypeDescription
scopequeryprovinces | countries | national default provincesWhich profiles.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/seasonality?scope=provinces"
Example response 200
{
  "data": [
    {
      "id": "aceh",
      "slug": "aceh",
      "name": "Aceh",
      "region": "Sumatera",
      "peak_month": 11,
      "complete_years": 17,
      "share_pct": [
        11.07,
        9.91,
        7.75,
        6.14,
        6,
        6.01,
        "… 6 more"
      ]
    },
    {
      "id": "sumut",
      "slug": "sumatera-utara",
      "name": "Sumatera Utara",
      "region": "Sumatera",
      "peak_month": 10,
      "complete_years": 17,
      "share_pct": [
        9.2,
        8.12,
        7.01,
        6.14,
        7.25,
        8.01,
        "… 6 more"
      ]
    },
    {
      "id": "sumbar",
      "slug": "sumatera-barat",
      "name": "Sumatera Barat",
      "region": "Sumatera",
      "peak_month": 1,
      "complete_years": 17,
      "share_pct": [
        11.62,
        10.18,
        8.41,
        7.72,
        7.87,
        7.52,
        "… 6 more"
      ]
    },
    {
      "id": "riau",
      "slug": "riau",
      "name": "Riau",
      "region": "Sumatera",
      "peak_month": 1,
      "complete_years": 17,
      "share_pct": [
        12.14,
        10.82,
        7.46,
        6.21,
        6.37,
        5.59,
        "… 6 more"
      ]
    },
    {
      "id": "kepri",
      "slug": "kepulauan-riau",
      "name": "Kepulauan Riau",
      "region": "Sumatera",
      "peak_month": 1,
      "complete_years": 17,
      "share_pct": [
        12.14,
        9.27,
        6.34,
        5.44,
        6.76,
        7.77,
        "… 6 more"
      ]
    },
    {
      "id": "jambi",
      "slug": "jambi",
      "name": "Jambi",
      "region": "Sumatera",
      "peak_month": 1,
      "complete_years": 17,
      "share_pct": [
        16.93,
        11.98,
        9.69,
        6.37,
        5.31,
        4.58,
        "… 6 more"
      ]
    },
    "… 27 more"
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#seasonality",
    "scope": "provinces",
    "total": 33,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/seasonality?scope=provinces",
    "next": null
  }
}

#Glossary

GET/v1/glossaryKey optionalList · CSV

Definitions of the terms used by SENTINARA, in English or Indonesian.

ParameterInTypeDescription
categoryquerystringCategory id.
qquerystringCase-insensitive text search.
langqueryen | id default enLanguage.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/glossary?q=cusum"
Example response 200
{
  "data": [
    {
      "id": "warning-level",
      "category": "surveillance",
      "term": "Warning level",
      "definition": "SENTINARA's overall assessment for a place: Normal, Watch, Alert or Outbreak signal. It combines the endemic-channel zone, the outbreak score, CUSUM, the forecast threshold risk and momentum, and lists the reasons behind it.",
      "abbreviation": null
    },
    {
      "id": "cusum",
      "category": "models",
      "term": "CUSUM",
      "definition": "Cumulative sum control chart. It adds up how far each month is above normal and raises an alarm (at 4 or more) when small excesses persist, catching slow, sustained rises that single-month tests miss.",
      "abbreviation": null
    }
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0",
    "docs": "https://docs.sentinara.org/reference#glossary",
    "categories": [
      "disease",
      "prevention",
      "epidemiology",
      "surveillance",
      "models",
      "data"
    ],
    "lang": "en",
    "total": 2,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/glossary?q=cusum",
    "next": null
  }
}

#Dataset catalogue

GET/v1/datasetsKey optionalList · CSV

Every raw data file with its size, URL and SHA-256 checksum.

ParameterInTypeDescription
qquerystringCase-insensitive text search.

Also accepts limit (1 to 500), cursor and format=csv. See Pagination.

bash
curl "https://api.sentinara.org/v1/datasets?q=indonesia"
Example response 200
{
  "data": [
    {
      "file": "indonesia/climate.json",
      "url": "https://sentinara.org/data/indonesia/climate.json",
      "bytes": 81177,
      "sha256": "df8fe9b7814e01413d63a429d9216bb7b1e642a19fa19cd3ba52671494ba79f7"
    },
    {
      "file": "indonesia/national.json",
      "url": "https://sentinara.org/data/indonesia/national.json",
      "bytes": 15601,
      "sha256": "f79a3cda53e0defa0618de1be1119d4d3af3e09d1d2c99b51532737f928f50a0"
    },
    {
      "file": "indonesia/provinces-monthly.json",
      "url": "https://sentinara.org/data/indonesia/provinces-monthly.json",
      "bytes": 25767,
      "sha256": "89ca4a19a2a62e09d22d51f5136ae3d7e1f8410fe278e6e333292f100702f46d"
    },
    {
      "file": "indonesia/provinces.json",
      "url": "https://sentinara.org/data/indonesia/provinces.json",
      "bytes": 20064,
      "sha256": "eb8ab4432c1079be9477e0db1719ee753b8a8b28a2d28197926e44c0273ccbf1"
    },
    {
      "file": "indonesia/provinces/aceh.json",
      "url": "https://sentinara.org/data/indonesia/provinces/aceh.json",
      "bytes": 3124,
      "sha256": "ae4bdde5663c76e19b569806e97cd8df51b66c7998f9ce6ad5d63859bcb589df"
    },
    {
      "file": "indonesia/provinces/bali.json",
      "url": "https://sentinara.org/data/indonesia/provinces/bali.json",
      "bytes": 5071,
      "sha256": "95663c104711d1c8aaebd6f471aa88804f1ef591e066f353cc4c27490a8c2132"
    },
    "… 31 more"
  ],
  "meta": {
    "request_id": "8d3f2c1a9b7e4f60",
    "tier": "anonymous",
    "data_updated_at": "2026-10-31T06:49:43.461Z",
    "attribution": "SENTINARA (sentinara.org) analysis of WHO Global Dengue Surveillance, OpenDengue, Dinas Kesehatan Kota Semarang, World Bank and NASA POWER data",
    "license": "CC BY 4.0 for SENTINARA analyses; original sources keep their own terms",
    "docs": "https://docs.sentinara.org/reference#datasets",
    "updated_at": "2026-10-31T06:49:43.461Z",
    "total": 37,
    "limit": 50,
    "offset": 0
  },
  "links": {
    "self": "https://api.sentinara.org/v1/datasets?q=indonesia",
    "next": null
  }
}

#API keys

Create, inspect, rotate and revoke your own key.

#Create a key

POST/v1/keysNo key (Turnstile)

Self-service creation, protected by Cloudflare Turnstile. Use the form at docs.sentinara.org/keys. The key is returned once.

bash
curl -X POST https://api.sentinara.org/v1/keys \
  -H "Content-Type: application/json" \
  -d &#39;{"type":"secret","name":"My app","email":"you@example.org","accept_terms":true,"turnstile_token":"<token from the form>"}'
Example response 201
{
  "data": {
    "id": "key_8f3a2c1d9b7e4f60",
    "prefix": "sn_sk_Ab12Cd",
    "type": "secret",
    "name": "Dinkes dashboard",
    "created_at": "2026-10-31T07:00:00.000Z",
    "last_used_at": null,
    "limits": {
      "per_minute": 300,
      "per_day": 10000
    },
    "key": "sn_sk_Ab12CdEf34GhIj56KlMn78OpQr90StUv12WxYz34"
  },
  "meta": {
    "warning": "Store this key now. It is shown only once and cannot be recovered."
  }
}

#Inspect your key

GET/v1/keys/meAPI key required

Type, limits, last use and usage today. Publishable keys are public, so their allowed origins are not listed.

bash
curl "https://api.sentinara.org/v1/keys/me"
Example response 200
{
  "data": {
    "id": "key_8f3a2c1d9b7e4f60",
    "prefix": "sn_sk_Ab12Cd",
    "type": "secret",
    "name": "Dinkes dashboard",
    "created_at": "2026-10-31T07:00:00.000Z",
    "last_used_at": "2026-10-31T08:12:44.000Z",
    "limits": {
      "per_minute": 300,
      "per_day": 10000
    },
    "usage_today": 128,
    "remaining_today": 9872
  }
}

#Rotate your key

POST/v1/keys/me/rotateAPI key required

Issues a new key with the same settings and revokes the current one in a single transaction. Publishable keys also need their management token.

ParameterInTypeDescription
X-Management-TokenheaderstringPublishable keys only: the management token returned when the key was created. Send it from a server or terminal (requests with an Origin header are refused).
bash
curl -X POST https://api.sentinara.org/v1/keys/me/rotate -H "Authorization: Bearer $SENTINARA_KEY"
Example response 201
{
  "data": {
    "id": "key_c41e09a7d2b35f18",
    "prefix": "sn_sk_Zx98Yw",
    "type": "secret",
    "name": "Dinkes dashboard",
    "created_at": "2026-10-31T07:00:00.000Z",
    "last_used_at": null,
    "limits": {
      "per_minute": 300,
      "per_day": 10000
    },
    "key": "sn_sk_Zx98YwVu76TsRq54PoNm32LkJi10HgFe98DcBa76"
  },
  "meta": {
    "warning": "The previous key is revoked. Store this key now; it is shown only once.",
    "replaces": "key_8f3a2c1d9b7e4f60"
  }
}

#Revoke your key

DELETE/v1/keys/meAPI key required

Permanently disables the key used for this request. Publishable keys also need their management token.

ParameterInTypeDescription
X-Management-TokenheaderstringPublishable keys only: the management token returned when the key was created. Send it from a server or terminal (requests with an Origin header are refused).
bash
curl -X DELETE https://api.sentinara.org/v1/keys/me -H "Authorization: Bearer $SENTINARA_KEY"
Example response 200
{
  "data": {
    "id": "key_8f3a2c1d9b7e4f60",
    "revoked": true
  }
}

SENTINARA, a nonprofit organisation of Digivana Group · Data CC BY 4.0 · Terms · Security · OpenAPI