---
title: "Read your provider check results as they arrive: one row per NPI with a verdict (needs_attention: a problem; checking: not settled yet and not counted as a problem; records_to_fix: records to tidy; clean: none of these), short findings, every cell with its source link and read time, and the mismatches between records. Use the request ID and the email that sent the list."
method: GET
path: "/v1/provider-checks/{id}"
tags: ["Provider checks"]
---

# Read your provider check results as they arrive: one row per NPI with a verdict (needs_attention: a problem; checking: not settled yet and not counted as a problem; records_to_fix: records to tidy; clean: none of these), short findings, every cell with its source link and read time, and the mismatches between records. Use the request ID and the email that sent the list.

`GET /v1/provider-checks/{id}`

## Request

- Base URL: `https://www.licium.ai`
- URL: `https://www.licium.ai/v1/provider-checks/{id}`
- Auth: none required

Use the request email (header X-Provider-Check-Email, or ?email=) or a session signed in with that email. format=csv returns the full table as CSV. Each row: verdict needs_attention (a license of the provider expired, inactive, not registered or with discipline when the board shows no current license of theirs in that state, an exclusion by NPI, the NPI deactivated or not in the registry, or the provider's own Medicare revalidation due within six months), checking (a license still being read or not yet found by name, a possible exclusion match by name to confirm, or a source that did not answer; never counted as a problem), records_to_fix (no license number in the registry, an older lapsed license next to the current one, a current license the registry does not list, a number the board does not have for the provider, a lookalike character in the number, a name that differs, a registry record not updated in over five years), or clean. A renewal due within 90 days is a finding but not counted; a group's revalidation due within six months is in groups_due, once per list. When the registry lists no license number, or its license does not settle the answer, the board is searched by name; a license found that way has matched_on name and is listed after the registry's licenses. Each cell has status found, not_found (the source answered and has no record), could_not_verify (the source did not answer; never reported as not found), pending (a license on a board we read that a person reads within 48 hours) or not_checked (a state or license type we do not read automatically yet; never counted; source_url is the board's search), with source_url and read_at. not_checked lists these licenses once per list. exclusion.excluded is true only for a match on the NPI; matched_on name_and_state is a possible match a person must confirm.

## Path parameters

- `id` string, uuid, required

## Query parameters

- `email` string, email
- `format` 'json' | 'csv'

## Headers

- `X-Provider-Check-Email` string, email

## Response `200`

Progress and the rows read so far.

- object
  - `success` unknown
  - `data` object
    - `request_id` string, uuid
    - `status` 'received' | 'checking' | 'sent' | 'closed'
    - `npi_count` integer
    - `checked_count` integer: Rows with a first result.
    - `licenses_checked_count` integer
    - `completed` boolean: Every row has its first full result.
    - `retrying` boolean: Some records could not be read and will be read again.
    - `email_status` 'pending' | 'sending' | 'sent' | 'skipped' | 'failed'
    - `estimated_seconds` integer
    - `summary` object
      - `needs_attention` integer
      - `checking` integer
      - `records_to_fix` integer
      - `clean` integer
    - `rows_still_reading` integer: Rows with a cell that could not be read yet or waits for a hand read; each such cell says so itself.
    - `groups_due` object[]: Groups the listed providers bill Medicare through whose revalidation is due within six months, once each.
      - `name` string
      - `group_pac_id` string, nullable
      - `revalidation_due_date` string, date
      - `providers` integer
    - `not_checked` object[]: Licenses in the list we do not read automatically yet, grouped by state (or by license type in a state we read). Never counted in summary. Reply to the results email to have a person look them up.
      - `state` string
      - `what` string
      - `licenses` integer
    - `invalid_entries` object[]
      - `entry` string
      - `reason` string
    - `waiting_npis` string[]
    - `next` string, nullable: Once the check is complete: what to do next (send the rest of the list the same way; how to ask for the licenses we do not check automatically). Null before.
    - `sources` object[]
      - `name` string
      - `as_of` string, nullable
      - `url` string
    - `rows` object[]
      - `npi` string
      - `verdict` 'needs_attention' | 'checking' | 'records_to_fix' | 'clean': needs_attention: a problem. checking: not settled yet, never counted as a problem. records_to_fix: records to tidy. clean: none of these in the records read.
      - `findings` string[]: Short plain reasons, most important first.
      - `registry` object
        - `status` 'found' | 'not_found' | 'could_not_verify' | 'pending' | 'not_checked', required
        - `value` object, nullable, required
          - `name` string
          - `credential` string, nullable
          - `enumeration_type` 'individual' | 'organization'
          - `status` string, nullable
          - `taxonomies` object[]
          - `practice_address` string, nullable
          - `mailing_address` string, nullable
          - `last_updated` string, nullable
        - `source_url` string, required: The page or file a person can open to see the same record.
        - `read_at` string, date-time, required
        - `reason` string, nullable, required: Plain sentence when the status is not found, or context such as the list date.
      - `medicare_revalidation` object
        - `status` 'found' | 'not_found' | 'could_not_verify' | 'pending' | 'not_checked', required
        - `value` object, nullable, required
          - `due_date` string, date, nullable: Null when CMS lists no due date in the next six months (TBD).
          - `within_six_months` boolean
        - `source_url` string, required: The page or file a person can open to see the same record.
        - `read_at` string, date-time, required
        - `reason` string, nullable, required: Plain sentence when the status is not found, or context such as the list date.
      - `medicare_enrollment` object
        - `status` 'found' | 'not_found' | 'could_not_verify' | 'pending' | 'not_checked', required
        - `value` object, nullable, required
          - `enrolled` boolean
          - `provider_type` string, nullable
          - `state` string, nullable
        - `source_url` string, required: The page or file a person can open to see the same record.
        - `read_at` string, date-time, required
        - `reason` string, nullable, required: Plain sentence when the status is not found, or context such as the list date.
      - `group_reassignment` object
        - `status` 'found' | 'not_found' | 'could_not_verify' | 'pending' | 'not_checked', required
        - `value` object, nullable, required
          - `groups` object[]
            - `name` string
            - `group_pac_id` string, nullable
            - `revalidation_due_date` string, date, nullable
        - `source_url` string, required: The page or file a person can open to see the same record.
        - `read_at` string, date-time, required
        - `reason` string, nullable, required: Plain sentence when the status is not found, or context such as the list date.
      - `exclusion` object
        - `status` 'found' | 'not_found' | 'could_not_verify' | 'pending' | 'not_checked', required
        - `value` object, nullable, required
          - `excluded` boolean: True only for a match on the NPI.
          - `matched_on` unknown
          - `exclusion_type` string, nullable
          - `exclusion_date` string, date, nullable
        - `source_url` string, required: The page or file a person can open to see the same record.
        - `read_at` string, date-time, required
        - `reason` string, nullable, required: Plain sentence when the status is not found, or context such as the list date.
      - `licenses` object[]
        - `status` 'found' | 'not_found' | 'could_not_verify' | 'pending' | 'not_checked', required
        - `value` object, nullable, required
          - `state` string
          - `number` string
          - `profession` string, nullable
          - `status` string, nullable
          - `expires` string, nullable
          - `name_on_license` string, nullable
          - `address_on_license` string, nullable
          - `discipline` string, nullable
          - `matched_on` 'number' | 'name': name: the registry lists no license number and the board's record was found by the provider's name.
        - `source_url` string, required: The page or file a person can open to see the same record.
        - `read_at` string, date-time, required
        - `reason` string, nullable, required: Plain sentence when the status is not found, or context such as the list date.
      - `mismatches` object[]
        - `field` string: name, practice_address, license_number, state or registry_status.
        - `a` object
          - `source` string
          - `value` string
        - `b` object
          - `source` string
          - `value` string
        - `note` string: What the records show and what to check, in one sentence.
      - `checked_at` string, date-time
    - `referral` object, nullable: The request email's own referral link, returned only to a signed-in session with that email. Its owner earns credit when someone who came through it makes a first payment. Null otherwise.
      - `code` string, required
      - `link` string, uri, required: The requester's own referral link.
      - `message` string, required: One line to share the link.
    - `referral_sign_in` boolean: True when the referral program is on and this reader is not a signed-in session with the request's email: sign in with it to get the referral link.

## Other responses

- `401`: Supply the request email or sign in with that email.
- `404`: Request not found. Check the request ID and email.
- `429`: Too many requests. Try again in one hour.
- `503`: Could not read the request. Try again in a minute.

---

[API](https://skmtc.dev/licium/apis/licium-public-api.md) · [All operations](https://skmtc.dev/licium/apis/licium-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/licium/apis/licium-public-api/revisions/d91a72f755f4?raw)
