> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oneshotagent.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Health Provider Registration

> Look up a US individual health care provider by provider number, or by name and state.

Look up the national registration of an individual US health care practitioner (a doctor, nurse, pharmacist, therapist and the like) by 10-digit provider number, or by last name and state with optional first name and city. Returns each match with credential, whether the registration is active, specialties with licence state and number, practice address and mailing address, and the date the registry last updated the record. Use it to check that a practitioner in a directory, claim or referral exists and which specialty they are registered under. A registration is not a licence check and not proof that they still practise at the address; judge freshness by `last_updated_on`. Individuals only: organisations are not covered. `total` is the number of providers returned, at most `limit`; no match is `total: 0`.

## Authentication

Requires x402 payment in the `payment-signature` header.

## Request Body

<ParamField body="npi" type="string">
  The 10-digit provider number. Give this, or a last name and state, never both. A health provider number is exactly 10 digits.
</ParamField>

<ParamField body="last_name" type="string">
  Last name of the practitioner. Needs state. 1 to 100 characters.
</ParamField>

<ParamField body="state" type="string">
  Two-letter US state code, such as TX. Needs last name. A state is two capital letters, such as TX.
</ParamField>

<ParamField body="first_name" type="string">
  First name of the practitioner, to narrow a name search. 1 to 100 characters.
</ParamField>

<ParamField body="city" type="string">
  A city, to narrow a name search. 1 to 100 characters.
</ParamField>

<ParamField body="limit" type="integer">
  Most providers to return from a name search, 1 to 20. From 1 to 20. Defaults to `5`.
</ParamField>

<Snippet file="audit-context-params.mdx" />

## Response (200 OK)

Top-level envelope: `success` (boolean) and `data` (object). All fields below are nested under `data`.

<ResponseField name="data.request_id" type="string">
  Durable job ID for audit and lookup
</ResponseField>

<ResponseField name="data.status" type="string">
  Job status: `completed`
</ResponseField>

<ResponseField name="data.tool" type="string">
  Always `person_health_provider`
</ResponseField>

<ResponseField name="data.result" type="object">
  The answer, described under Result below
</ResponseField>

<ResponseField name="data.evidence" type="object">
  Where the answer came from and when
</ResponseField>

<ResponseField name="data.evidence.source" type="string">
  The public body the data comes from. Always `US Centers for Medicare & Medicaid Services`.
</ResponseField>

<ResponseField name="data.evidence.source_kind" type="string">
  `public` when the data comes from a public body, `commercial` otherwise
</ResponseField>

<ResponseField name="data.evidence.retrieved_at" type="string">
  When the lookup was made, as an ISO 8601 UTC time
</ResponseField>

<ResponseField name="data.evidence.as_of" type="string">
  When the source says the fact was last updated, or `null` when the source gives no date
</ResponseField>

## Result

Nested under `data.result`.

<ResponseField name="data.result.total" type="number">
  Number of providers returned.
</ResponseField>

<ResponseField name="data.result.providers" type="object[]">
  Providers.
</ResponseField>

<ResponseField name="data.result.providers[].npi" type="string">
  The 10-digit provider number.
</ResponseField>

<ResponseField name="data.result.providers[].first_name" type="string">
  First name. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].last_name" type="string">
  Last name. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].credential" type="string">
  Credential as registered, such as MD. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].active" type="boolean">
  True when the registration is active.
</ResponseField>

<ResponseField name="data.result.providers[].registered_on" type="string">
  Date the 10-digit number was issued, YYYY-MM-DD. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].last_updated_on" type="string">
  Date the registry last updated the record, YYYY-MM-DD. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].specialties" type="object[]">
  Specialties.
</ResponseField>

<ResponseField name="data.result.providers[].specialties[].code" type="string">
  Taxonomy code. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].specialties[].description" type="string">
  Description. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].specialties[].primary" type="boolean">
  Primary.
</ResponseField>

<ResponseField name="data.result.providers[].specialties[].license_state" type="string">
  License state. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].specialties[].license_number" type="string">
  License number. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].practice_address" type="object">
  Where they practise, as registered. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].practice_address.street" type="string">
  Street. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].practice_address.city" type="string">
  City. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].practice_address.state" type="string">
  State. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].practice_address.postal_code" type="string">
  Postal code. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].practice_address.phone" type="string">
  Phone. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].mailing_address" type="object">
  Where they receive mail, as registered. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].mailing_address.street" type="string">
  Street. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].mailing_address.city" type="string">
  City. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].mailing_address.state" type="string">
  State. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].mailing_address.postal_code" type="string">
  Postal code. `null` when the source gives no value.
</ResponseField>

<ResponseField name="data.result.providers[].mailing_address.phone" type="string">
  Phone. `null` when the source gives no value.
</ResponseField>

<RequestExample>
  ```bash cURL theme={null}
  curl -X POST https://win.oneshotagent.com/v1/tools/lookup/person-health-provider \
    -H "Content-Type: application/json" \
    -H "payment-signature: <base64 x402 payment>" \
    -d '{
      "npi": "1245319599"
    }'
  ```

  ```javascript JavaScript theme={null}
  const response = await fetch("https://win.oneshotagent.com/v1/tools/lookup/person-health-provider", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "payment-signature": paymentProof,
    },
    body: JSON.stringify({
      "npi": "1245319599"
    }),
  });
  ```

  ```typescript SDK theme={null}
  const result = await agent.tool('lookup/person-health-provider', {
    npi: '1245319599'
  });
  console.log(result.data.result);
  console.log(result.data.evidence);
  ```
</RequestExample>

<ResponseExample>
  ```json Response (200) theme={null}
  {
    "success": true,
    "data": {
      "request_id": "uuid",
      "receipt_id": "rcpt_...",
      "status": "completed",
      "tool": "person_health_provider",
      "result": {
        "total": 1,
        "providers": [
          {
            "npi": "1245319599",
            "first_name": "LAURA",
            "last_name": "SAMPLE",
            "credential": "MD",
            "active": true,
            "registered_on": "2006-11-06",
            "last_updated_on": "2025-10-17",
            "specialties": [
              {
                "code": "207Q00000X",
                "description": "Family Medicine",
                "primary": true,
                "license_state": "VA",
                "license_number": "0101244988"
              }
            ],
            "practice_address": {
              "street": "1080 FIRST COLONIAL RD, SUITE 200",
              "city": "VIRGINIA BEACH",
              "state": "VA",
              "postal_code": "23454-2406",
              "phone": "757-395-6070"
            },
            "mailing_address": {
              "street": "620 JOHN PAUL JONES CIR",
              "city": "PORTSMOUTH",
              "state": "VA",
              "postal_code": "23708-2111",
              "phone": "757-953-0831"
            }
          }
        ]
      },
      "evidence": {
        "source": "US Centers for Medicare & Medicaid Services",
        "source_kind": "public",
        "retrieved_at": "2026-01-15T12:00:00.000Z",
        "as_of": "2025-10-17"
      }
    }
  }
  ```
</ResponseExample>

<Info>Price: \$0.005 per lookup. See [Pricing](/pricing) for every tool.</Info>

## Notes

* Results return inline. The finished job stays available at `/v1/requests/{request_id}`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.