California · Public records check

Open Facility Verification Search

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

GET/api/verify?address={free text}&type={treatment_type_id}
ParameterRules
addressRequired, 5–200 characters, California only (other states return 422). Keep the suite number.
typeRequired, 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

statusMeaning
verifiedOne clean candidate scored 80+ and passed the exclusion gate.
multipleTwo or more candidates scored 60+, ranked (up to 5). Also used when the only match is excluded.
no_providerAddress found, no licensed provider matched.
address_not_foundThe geocoder couldn’t place the address. suggestions may list close matches.
address_onlyNon-medical, mobile or registry type: location returned, no provider check.
not_verifiableBlocked type. No lookup was run.
partialSome 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

HTTPerrorWhen
400invalid_address, invalid_typeBad input
422outside_californiaAddress is outside California
429rate_limitedOver 20 searches a minute or 300 a day per IP. See Retry-After.
503upstream_unavailableEvery upstream source failed

Each error body is { "error": code, "message": text }.

List treatment types

GET/api/treatment-types

Returns all 190 types with their destination class, recipe, and whether they get a provider check. A few:

idClassRecipeMode
dialysis-incl-port-related-appointmentsLicensed facilityR04provider
doctors-visitClinic or officeR09provider
gymNon-medicalR24address_only
pharmacyPractitionerR15provider

Fair use