Quickstart
Every endpoint is a GET request that returns JSON. There is nothing to install and no key to request; this public API is its own sandbox.
# 1. Find a city's slug
curl https://laterstages.com/api/v1/california/index.json
# 2. Get every provider in that city
curl https://laterstages.com/api/v1/california/huntington-beach.json
# 3. Search cities and providers by name (one file, filter locally)
curl https://laterstages.com/api/v1/search.json Endpoints
| Endpoint | Returns |
|---|---|
GET /api/v1/california/index.json | All 667 cities: slug, county, provider counts by category, links |
GET /api/v1/california/{city}.json | Every provider in one city: name, category, address, phone, beds, year licensed, license number, Medicare overall stars, page URL |
GET /api/v1/search.json | Compact index of all cities and providers for name search |
GET /openapi.json | OpenAPI 3.1 description of this API (also at /api/openapi.json) |
GET /sitemap.xml | Every public page |
Categories: assisted-living, ccrc, nursing-homes, home-care, home-health, hospice.
Versioning and deprecation
- The version is in the URL:
/api/v1/. Every response under/api/carries anAPI-Versionheader. - Within v1 we only add fields. Removing or renaming a field, or changing what it means, ships as
/api/v2/. - A replaced version keeps working for at least 6 months. During that time its responses carry
DeprecationandSunsetheaders and aLinkto the new version, and the change is listed here. - Older unversioned paths (
/api/california/...,/search.json) are aliases of v1.
Current version: v1 (November 2026). No versions are deprecated.
Example response
{
"city": "Huntington Beach",
"county": "Orange",
"counts": { "assisted-living": 66, "nursing-homes": 3, "home-care": 18, ... },
"providers": [
{
"name": "Huntington Terrace",
"category": "assisted-living",
"url": "https://laterstages.com/california/huntington-beach/huntington-terrace/",
"address": "18800 Florida St",
"phone": "(714) 848-8811",
"beds": 185,
"licensed_since": "2015",
"license_number": "306004796",
"medicare_overall_stars": null
}
]
} Authentication and errors
None needed. The API is read-only: every endpoint is a GET, so retries are always safe and no idempotency key is needed. Unknown cities and paths under /api/ return HTTP 404 with a JSON body: {"error":"not_found","message":"..."}. Responses allow cross-origin requests.
MCP server for AI agents
The same data is available as tools over the Model Context Protocol at https://mcp.laterstages.com/mcp (Streamable HTTP, no auth): search, list providers, get one provider with Medicare citations, city summaries and plain-English guides. Setup for Claude, ChatGPT and other clients.
In-page tools (WebMCP)
Every page registers WebMCP tools with document.modelContext in browsers that support it: search_senior_care, list_providers, get_shortlist, add_to_shortlist, remove_from_shortlist. Agents can build a visitor's comparison list that shows at /compare/.
Data and freshness
- Assisted living, CCRC and home care: California Department of Social Services licensing data, rows dated May 25, 2025.
- Nursing homes, home health and hospice: Medicare Care Compare, processed October 1, 2026.
- Files are regenerated when the site is rebuilt. Check
data_as_ofin each response.
Terms
The data comes from public records. Use it freely, and please link to the provider's Later Stages page when you show it to people. Tell users to confirm a license with the state before deciding. No warranty; information only, not medical, legal or financial advice. Please cache responses and avoid more than a few requests per second.