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.
https://api-sandbox.seminars.page
Everything you do starts by adding something to the end of this address.
There are two "resources" — think of each as a table you can ask questions of:
| Resource | What it contains | Address |
|---|---|---|
| Cases | Weekly reported counts of a few notifiable conditions, by state and county | /v1/cases |
| Immunizations | Monthly doses administered for a few vaccines, by state and county | /v1/immunizations |
data list to expand it into rowshttps://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
}
| Parameter | Required? | What it does |
|---|---|---|
state | No | Two-letter state code, e.g. CA, TX, NY, FL, WA. Leave it out to get every state. |
limit | No | How 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. |
cursor | No | Where to pick up from. You get this value from the previous response's next_cursor — you never make it up yourself. |
https://api-sandbox.seminars.page/v1/immunizations?county=King&limit=25
| Parameter | Required? | What it does |
|---|---|---|
county | No | County name, e.g. King, Harris, Erie. Leave it out to get every county. |
limit | No | Same as above — 1 to 50, default 25. |
cursor | No | Same as above. |
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=
| Status | Meaning |
|---|---|
| 400 | Something 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. |
| 404 | The 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.