Public Health API Practice Sandbox

Phase 1 — no login required

This is a practice API built for the "Building Practical API Workflows for Public Health" workshops. It behaves like a real public-health data API — you'll ask it questions and it will hand back data — but everything here is safe to experiment on and won't break anything.

The one thing you need to know: the base URL

https://api-sandbox.seminars.page

Everything you do starts by adding something to the end of this address.

What data is available

There are two "resources" — think of each as a table you can ask questions of:

ResourceWhat it containsAddress
CasesWeekly reported counts of a few notifiable conditions, by state and county/v1/cases
ImmunizationsMonthly doses administered for a few vaccines, by state and county/v1/immunizations

Getting data with Excel Power Query

  1. In Excel: DataGet DataFrom Other SourcesFrom Web
  2. Paste in a full address (see examples below) and click OK
  3. Power Query will show you the response — click into the data list to expand it into rows
  4. Click Close & Load to bring it into a worksheet as a table

Example request — Cases

https://api-sandbox.seminars.page/v1/cases?state=CA&limit=25

This asks for up to 25 case records from California. Here's what comes back:

{
  "data": [
    {
      "id": 1,
      "state": "CA",
      "county": "Los Angeles",
      "report_date": "2026-06-01",
      "case_type": "influenza-like illness",
      "case_count": 12
    }
  ],
  "next_cursor": "MjU=",
  "count": 25
}

Parameters you can use

ParameterRequired?What it does
stateNoTwo-letter state code, e.g. CA, TX, NY, FL, WA. Leave it out to get every state.
limitNoHow many rows per page, from 1–50. Defaults to 25. The API will never hand back more than 50 rows in one response — see "Pagination" below.
cursorNoWhere to pick up from. You get this value from the previous response's next_cursor — you never make it up yourself.

Example request — Immunizations

https://api-sandbox.seminars.page/v1/immunizations?county=King&limit=25
ParameterRequired?What it does
countyNoCounty name, e.g. King, Harris, Erie. Leave it out to get every county.
limitNoSame as above — 1 to 50, default 25.
cursorNoSame as above.

Pagination — why you sometimes need a "second page"

This API deliberately never hands you an entire dataset in one response, even if the whole thing would technically fit. Real public-health APIs work the same way, both to protect their servers and because most tools (Excel included) work better with data in manageable chunks.

Every response includes a next_cursor value. If it's a piece of text, there's more data waiting — take that value and add it to your address as &cursor=THAT_VALUE to get the next page. If next_cursor is null, you've reached the end.

https://api-sandbox.seminars.page/v1/cases?state=CA&limit=25&cursor=MjU=

A data-quality note worth watching for

Missing is not the same as zero. Somewhere in this dataset, a case count or dose count is genuinely missing — the field shows up as blank/null, meaning nobody recorded a value. Elsewhere, a count is legitimately reported as 0 — meaning zero cases or zero doses were actually observed. In Excel, both can render as an empty-looking cell if you're not careful, but they mean very different things for analysis. Part of this exercise is learning to tell the two apart before you calculate an average or a total.

Errors you might see

StatusMeaning
400Something about your request doesn't make sense to the API — most often an invalid cursor. Try the request again without a cursor to start over.
404The address doesn't match a resource this API knows about. Double check /v1/cases or /v1/immunizations.

Phase 2 of this sandbox will add an API key requirement and rate limiting for the Advanced session — this docs page will be updated when that's live.