Developers and partners
JSON API
One read-only endpoint serves this page and outside developers. The page is just its first client. No key is needed. CORS is open. The API takes no member information, so please don’t send any.
Verify an address
| Parameter | Rules |
|---|---|
address | Required, 5–200 characters, California only (other states return 422). Keep the suite number. |
type | Required, one of the 190 ids from GET /api/treatment-types. |
Example
curl "https://YOUR-DOMAIN/api/verify?address=1936%20E%201st%20St%2C%20Los%20Angeles%2C%20CA%2090033&type=dialysis-incl-port-related-appointments"Response 200
{
"status": "verified",
"headline": "Licensed and Medi-Cal enrolled provider at this address",
"query": {
"address": "1936 E 1st St, Los Angeles, CA 90033",
"type": "dialysis-incl-port-related-appointments",
"type_name": "Dialysis (incl. port-related appointments)",
"recipe": "R04",
"destination_class": "licensed_facility"
},
"location": {
"matched_address": "1936 E 1ST ST, LOS ANGELES, CA, 90033",
"lat": 34.0457, "lng": -118.2164, "zip": "90033",
"source": "census", "as_of": "2026-10-04"
},
"candidates": [
{
"score": 90,
"name": "EXAMPLE DIALYSIS CENTER",
"npi": "1234567890",
"npi_type": "organization",
"phone": "323-555-0100",
"facility_type": "Chronic Dialysis Clinic",
"address": "1936 E 1ST ST, LOS ANGELES, CA 90033",
"lat": 34.0457, "lng": -118.2164, "distance_m": 12,
"excluded": false,
"found_in": ["cdph", "nppes", "medi_cal_ffs"],
"score_breakdown": [{ "signal": "Same house number and street", "points": 40 }, "..."],
"checks": {
"licence": { "result": "pass", "label": "Licensed by CDPH (...)", "source": "cdph", "as_of": "2026-09-16" },
"enrollment": { "result": "pass", "label": "Enrolled in Medi-Cal fee-for-service", "source": "medi_cal_ffs", "as_of": "2026-09-29" },
"exclusion": { "result": "clear", "label": "Not on LEIE or Medi-Cal S&I list", "sources": ["leie", "si_list"], "as_of": "2026-09-10" },
"npi": { "result": "pass", "label": "Active organisation NPI", "source": "nppes" }
// R27 ER types also return:
// "er": { "result": "pass", "label": "Comprehensive emergency department on the CDPH licence", "source": "cdph_services" }
}
}
],
"coverage": { "level": "full", "note": null },
"sources": [{ "id": "census", "ok": true, "as_of": "2026-10-04" }, "..."],
"coverage_note": "Identity check only. Coverage depends on the member's plan.",
"generated_at": "2026-10-04T20:15:00.000Z"
}The example values are illustrative, not a real facility.
status values
| status | Meaning |
|---|---|
verified | One clean candidate scored 80+ and passed the exclusion gate. |
multiple | Two or more candidates scored 60+, ranked (up to 5). Also used when the only match is excluded. |
no_provider | Address found, no licensed provider matched. |
address_not_found | The geocoder couldn’t place the address. suggestions may list close matches. |
address_only | Non-medical, mobile or registry type: location returned, no provider check. |
not_verifiable | Blocked type. No lookup was run. |
partial | Some sources timed out and no clean match was found. sources[].ok shows which. |
Check results
pass, clear, fail, excluded, not_found, not_checked (the source isn’t loaded for this type yet) and unavailable (the source didn’t answer in time). An excluded provider is never verified. Not being in the Medi-Cal FFS list reads not_found (“may be managed-care only”) and does not block verified. For SUD and narcotic treatment types, the enrollment label says when the NPI is Drug Medi-Cal certified (FFS provider type 076).
Hospital ER types (recipe R27, e.g. urgent-care-to-er-with-admission) add checks.er: the emergency department level on the hospital’s CDPH licence (Comprehensive, Basic or Standby). A hospital with no emergency department listed is never verified for these types.
Errors
| HTTP | error | When |
|---|---|---|
| 400 | invalid_address, invalid_type | Bad input |
| 422 | outside_california | Address is outside California |
| 429 | rate_limited | Over 20 searches a minute or 300 a day per IP. See Retry-After. |
| 503 | upstream_unavailable | Every upstream source failed |
Each error body is { "error": code, "message": text }.
List treatment types
Returns all 190 types with their destination class, recipe, and whether they get a provider check. A few:
| id | Class | Recipe | Mode |
|---|---|---|---|
dialysis-incl-port-related-appointments | Licensed facility | R04 | provider |
doctors-visit | Clinic or office | R09 | provider |
gym | Non-medical | R24 | address_only |
pharmacy | Practitioner | R15 | provider |
Fair use
- Results are cached for up to 7 days. Exclusion lists refresh monthly. Every check carries its
as_ofdate. - No bulk export. Please don’t scrape. Batch lookups are planned for Phase 2.
- This is an identity check only. It never says whether a trip or service is covered.