POST
/
insurance-discovery
/
check
/
v1
curl --request POST \
  --url https://healthcare.us.stedi.com/2024-04-01/insurance-discovery/check/v1 \
  --header 'Authorization: <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{
  "provider": {
    "npi": "1234567890"
  },
  "subscriber": {
    "firstName": "John",
    "lastName": "Smith",
    "middleName": "Robert",
    "dateOfBirth": "19800101",
    "ssn": "123456789",
    "gender": "M",
    "address": {
      "address1": "123 Main St",
      "city": "Springfield",
      "state": "IL",
      "postalCode": "62701"
    }
  },
  "encounter": {
    "beginningDateOfService": "20240326",
    "endDateOfService": "20240326"
  }
}'
{
  "discoveryId": "12345678-abcd-4321-efgh-987654321abc",
  "items": [
    {
      "provider": {
        "providerName": "provider",
        "entityType": "Non-Person Entity",
        "npi": "1234567890"
      },
      "subscriber": {
        "memberId": "987654321000",
        "firstName": "John",
        "lastName": "Doe",
        "middleName": "Smith",
        "gender": "M",
        "dateOfBirth": "19900115",
        "groupNumber": "123456-78",
        "planNumber": "123456-EXMPL9876",
        "groupDescription": "Individual On-Exchange",
        "address": {
          "address1": "123 Main Street",
          "city": "ANYTOWN",
          "state": "CA",
          "postalCode": "12345"
        }
      },
      "payer": {
        "name": "EXAMPLE INSURANCE CO"
      },
      "planInformation": {
        "planNumber": "123456-EXMPL9876",
        "groupNumber": "123456-78",
        "groupDescription": "Individual On-Exchange"
      },
      "planDateInformation": {
        "planBegin": "20250101",
        "eligibilityBegin": "20250101",
        "service": "20250301"
      },
      "benefitsInformation": [
        {
          "inPlanNetworkIndicatorCode": "W",
          "benefitsRelatedEntities": [
            {
              "entityIdentifier": "Primary Care Provider",
              "entityIdentification": "XX",
              "entityName": "Dough",
              "entityIdentificationValue": "1234567890",
              "entityFirstname": "Jane",
              "entityType": "Person"
            }
          ],
          "additionalInformation": [
            {
              "description": "To determine if a prior authorization is required, please check the health plan's website."
            }
          ],
          "serviceTypeCodes": [
            "30"
          ],
          "serviceTypes": [
            "Health Benefit Plan Coverage"
          ],
          "inPlanNetworkIndicator": "Not Applicable",
          "name": "Active Coverage",
          "code": "1",
          "planCoverage": "Gold Plan"
        },
        {
          "serviceTypes": [
            "Medical Care"
          ],
          "name": "Active Coverage",
          "planCoverage": "Gold Plan",
          "inPlanNetworkIndicatorCode": "W",
          "serviceTypeCodes": [
            "1"
          ],
          "inPlanNetworkIndicator": "Not Applicable",
          "code": "1"
        },
        {
          "additionalInformation": [
            {
              "description": "Prior authorization may be required. Covered No Limit."
            }
          ],
          "inPlanNetworkIndicatorCode": "Y",
          "code": "1",
          "name": "Active Coverage",
          "serviceTypeCodes": [
            "4"
          ],
          "serviceTypes": [
            "Diagnostic X-Ray"
          ],
          "inPlanNetworkIndicator": "Yes",
          "planCoverage": "Gold Plan"
        },
        {
          "inPlanNetworkIndicator": "Yes",
          "code": "A",
          "serviceTypeCodes": [
            "4"
          ],
          "name": "Co-Insurance",
          "coverageLevel": "Family",
          "serviceTypes": [
            "Diagnostic X-Ray"
          ],
          "inPlanNetworkIndicatorCode": "Y",
          "benefitPercent": "0.5",
          "planCoverage": "Gold Plan",
          "timeQualifierCode": "27",
          "timeQualifier": "Visit",
          "coverageLevelCode": "FAM"
        }
      ],
      "confidence": {
        "score": 0.8,
        "level": "REVIEW_NEEDED",
        "reason": "This record was identified as a low confidence match due to a DOB partial match"
      }
    }
  ],
  "meta": {
    "applicationMode": "production",
    "traceId": "1-abcdef12-123456789abcdef123456789"
  },
  "status": "COMPLETE"
}

This is a beta endpoint. We may make backward incompatible changes.

This endpoint submits an insurance discovery check request for a patient. You can use an insurance discovery check to find a patient’s active coverage using only their demographic data.

You may need to perform an insurance discovery check when a patient provides outdated insurance details, doesn’t have their insurance card, or can’t provide insurance details in an urgent care situation. You may also want to use insurance discovery checks to simplify patient onboarding by reducing the amount of information new patients must provide to schedule an appointment.

  1. Call this endpoint with as much patient demographic information as possible to increase the chances of finding matching coverage. You’ll also need to include information like the provider’s NPI and the service date, similar to an eligibility check.
  2. Stedi uses the demographic information you provide to determine if the patient has active coverage with one or more payers. This process involves submitting real-time eligibility checks to supported payers in order to find a match.
  3. When the insurance discovery check is complete, Stedi returns an array of potential active coverages along with subscriber details and complete benefits information. Results will typically also contain a confidence score to indicate how likely it is that the plan is a match for the patient information you provided, but this won’t happen in all circumstances.

You should always review the results to ensure the returned subscriber information for each active health plan matches the demographic information for the patient. You generally shouldn’t need to perform a followup standard eligibility check, since the insurance discovery check includes all of the information that would be included in a standard eligibility check.

There is no cost for limited insurance discovery checks while the API is in beta. If you are interested in pricing when the product is generally available, please reach out to the Stedi team.

Enrollment requirements

You should submit a transaction enrollment request for each provider for whom you plan to submit insurance discovery checks. To enroll your providers, please download the enrollment spreadsheet template and add one row for each provider. You’ll be required to provide the following information:

  • National Provider Identifier (NPI)
  • Tax Identification Number (TIN)
  • Medicaid Provider ID (if applicable)

You can email the completed template to enrollments@stedi.com, or drop it in your shared Slack channel.

Response

This endpoint can take up to 120 seconds to return a response, though it’s often faster.

The response can have one of two status values:

  • COMPLETE - Stedi has completed the insurance discovery search for the patient. If Stedi finds coverage for the patient, the items array will contain the results. If Stedi doesn’t find any coverage for the patient, the items array will be empty.
  • PENDING - Stedi is still processing the insurance discovery search for the patient. You can use the discoveryId in the response to retrieve the results asynchronously.

Retrieve results asynchronously

If the synchronous insurance discovery response indicates that the search is still PENDING, you can use the discoveryId to retrieve the complete results asynchronously from the Insurance Discovery Check Results endpoint.

Authorizations

Authorization
string
header
required

A Stedi API Key for authentication.

Body

application/json
provider
object
required

Information about the provider requesting the insurance discovery check.

subscriber
object
required

Demographic information for the patient when they are the health plan subscriber.

We strongly recommend providing as much information as possible to improve the probability of finding matching coverage. We especially recommend providing the subscriber's Social Security Number and their address - particularly their zip code.

dependent
object

Demographic information for the patient when they are a dependent on a health plan.

  • We strongly recommend providing as much information as possible to improve the probability of finding matching coverage. We especially recommend providing the dependent's Social Security Number and their address - particularly their zip code.
  • You should provide information for both the subscriber and the dependent in the request when possible.
  • If you only have the dependent's information, you should identify them in the subscriber object instead and leave this object empty. Note that some payers require information about both the dependent and the subscriber, so providing only the dependent's information limits Stedi's ability to return coverage matches for those payers.
encounter
object

The date range for the service being requested. If you don't specify a service date (either a single day or a range of dates), the Stedi defaults to the current date.

If you need to specify a single date, use the beginningDateOfService property and leave endDateOfService blank.

Response

200
application/json
InsuranceDiscoveryCheck 200 response
meta
object

Metadata about the response. Stedi uses this data for tracking and troubleshooting.

discoveryId
string

A unique ID for this insurance discovery check. You can use it to retrieve the results asynchronously through the Insurance Discovery Check Results endpoint.

status
enum<string>

The status of the discovery check. This is either PENDING or COMPLETE. - If the status is COMPLETE, the items array will contain any potential coverage matches Stedi found for the patient. - If the status is PENDING, the check is still in progress. You can immediately begin polling the Insurance Discovery Check Results endpoint to retrieve the results asynchronously.

Available options:
PENDING,
COMPLETE
items
object[]

An array of potential coverage matches for the patient. This will only be populated if the insurance discovery check status is COMPLETE. Each item in the array contains information about a potential match, including the provider, subscriber, payer, and plan information.

errors
object[]

When a payer rejects your eligibility check, the response contains one or more AAA errors that specify the reasons for the rejection and any recommended follow-up actions. Learn more