Examples & recipes
#Weekly alert to your team (server, secret key)
Run on Mondays after 03:00 UTC, when the data has refreshed.
// alert.mjs — node alert.mjs
const res = await fetch('https://api.sentinara.org/v1/warnings?min_level=alert', {
headers: { Authorization: `Bearer ${process.env.SENTINARA_KEY}` },
});
const { data, meta } = await res.json();
for (const c of data) {
console.log(`${c.name}: ${c.level} (score ${c.score}) because ${c.reasons.map((r) => r.text).join('; ')}`);
}
console.log(`Data updated ${meta.data_updated_at}`);#Browser widget (publishable key)
Create a publishable key for https://your-site.example, then:
<div id="sentinara">Loading…</div>
<script type="module">
const res = await fetch('https://api.sentinara.org/v1/indonesia', {
headers: { Authorization: 'Bearer sn_pk_your_publishable_key' },
});
const { data } = await res.json();
document.getElementById('sentinara').textContent =
`Indonesia, ${data.status.month}: ${data.status.cases.toLocaleString()} cases (${data.status.endemic_zone})`;
</script>You can also call without a key from the browser (anonymous, 30 requests per minute per visitor).
#pandas
import pandas as pd
df = pd.read_csv("https://api.sentinara.org/v1/countries/IDN/series?format=csv&from=2015-01")
df["month"] = pd.to_datetime(df["month"])
print(df.set_index("month")["cases"].resample("YE").sum())#R
library(jsonlite)
fc <- fromJSON("https://api.sentinara.org/v1/indonesia/forecast")$data$months
plot(as.Date(paste0(fc$month, "-01")), fc$mean, type = "b", ylab = "Cases")#Google Sheets
=IMPORTDATA("https://api.sentinara.org/v1/indonesia/provinces?format=csv")#Verify a raw dataset
curl -s https://api.sentinara.org/v1/datasets?q=national | jq -r '.data[0] | "\(.sha256) national.json"' > sum.txt
curl -s -o national.json https://sentinara.org/data/indonesia/national.json
sha256sum -c sum.txt