> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.usebridge.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.usebridge.com/_mcp/server.

# Testing

In the Sandbox environment, use a combination of States and Member ID's, for testing.
All Payers that do not require a Member ID, will respond as active.
Any Payer that requires a Member ID, will respond active for anything *other than* the test Member ID's below.
The sandbox Member ID's are case-insensitive.
One policy may have multiple errors, send a comma-separated list (no whitespace) of testing Member ID's to simulate.

*Blue Shield of California* and *Medicaid* are are configured to require a Member ID.

### Sandbox Member ID's

#### Policy Lookup

| Member ID         | Behavior                                       |
| ----------------- | ---------------------------------------------- |
| `INCONCLUSIVE`    | Policy requires asynchronous follow-up         |
| `NOT_FOUND`       | Policy is not found, with no additional reason |
| `PATIENT_NAME`    | Policy found, patient name issue               |
| `SUBSCRIBER_NAME` | Policy found, subscriber name issue            |
| `DOB`             | Policy found, date of birth doesn't match      |
| `DOB_INVALID`     | Policy found, date of birth is invalid         |
| `MEMBER_ID`       | Policy found, submitting Member ID is required |

#### Policy Errors

| Member ID       | Behavior                                 |
| --------------- | ---------------------------------------- |
| `GENERIC_ERROR` | Generic system error                     |
| `PAYER_ERROR`   | Payer responds as unavailable            |
| `DUPLICATE`     | Duplicate Member ID is found by Payer    |
| `TIMEOUT`       | Payer did not respond, request timed out |
| `INACTIVE`      | Policy is found, but is not active       |

#### Service Eligibility

| Member ID     | Behavior                                                          |
| ------------- | ----------------------------------------------------------------- |
| `NOT_COVERED` | An active, confirmed Policy, that does not cover any Service Type |

#### Usage

##### To test service eligibilities in the sandbox, you need to:

* Add providers in the Providers section of the dashboard.
* Set Licenses and Enrollments.

##### Managing Providers, Licenses, and Enrollments

All provider settings, including licenses and payer enrollments, can be managed on the [Sandbox Manage](https://app.usebridge.xyz/providers/manage) page. Providers must have at least one state license and payer enrollment to appear during testing.

#### Cash Pay (No Policy)

If you want to test licensing-only eligibility without insurance:

* Create Service Eligibility with an **empty** `policyIds` array.
* Results will reflect provider licensing only.

#### Revalidation Scenarios

To simulate coverage changes before a visit:

* Attach a Policy with a `TIMEOUT`, `INACTIVE`, or `NOT_COVERED` Member ID and revalidate.
* Change the Service Provider to one that is not enrolled.
* Change the Service Location to a state where the Provider is not licensed.

#### Resolving Sandbox Tasks

Send `DELETE /api/sandbox/services/{serviceId}/tasks/{type}` to resolve an open sandbox task. The request will not wait for Service evaluation to finish, so poll the Service aferwards to confirm evaluation has completed.

### Estimates

To test estimates, select a Payer that requires Member ID, and use these values.
All non-test Payers will resolve with a \$25 copayment.

| Member ID               | Estimate                                                             |
| ----------------------- | -------------------------------------------------------------------- |
| COPAYMENT               | \$25 copayment                                                       |
| DEDUCTIBLE              | \$150 of remaining individual deductible                             |
| DEDUCTIBLE-FAMILY       | \$150 of remaining family deductible                                 |
| COINSURANCE             | \$30/20% co-insurance                                                |
| FREE                    | \$0 copayment, \$0 co-insurance                                      |
| OOP-MAX                 | \$25 copayment, waived due to already-hit OOP limits                 |
| OOP-LIMIT               | \$25 copayment, \$10 waived due to reaching OOP limits               |
| DEDUCTIBLE-LIMIT        | \$75 of remaining individual deductible, and a \$15/20% co-insurance |
| DEDUCTIBLE-LIMIT-FAMILY | \$75 of remaining family deductible, and a \$15/20% co-insurance     |
| FALLBACK                | \$150 estimate, unresolvable "maximum" cost                          |

### Conditional Patient Responsibility

If sending `clinicalInfo` with a ServiceEligibility request, use the following Member ID's to test conditional preventative care coverage.
These Member IDs are case insensitive.
See the [Conditional Patient Responsibility](/eligibility/api/conditional-patient-responsibility) guide for detail on how to interpret the results.

All payers support this behavior. These will only be evaluated if the `clinicalInfo` is included in the request.
Patient responsibility will respond as \$0 (covered as preventative care), with varying limits.

| Member ID         | Limit                            |
| ----------------- | -------------------------------- |
| CPR_UNKNOWN       | `{ type: "UNKNOWN" }`            |
| CPR_UNLIMITED     | `{ type: "UNLIMITED" }`          |
| CPR_LIMITED       | `{ type: "LIMITED" }`            |
| CPR_LIMITED_VALUE | `{ type: "LIMITED", value: 12 }` |

#### Limit Modifiers

Additionally, dash separated modifiers can be appended to `CPR_LIMITED_VALUE` to apply limit periods and metrics.
These modifiers should be equal to a valid [period](/eligibility/api/conditional-patient-responsibility#period) or [metric](/eligibility/api/conditional-patient-responsibility#metric) value.
Modifiers are case and order insensitive.

| Member ID                            | Limit                                                                    |
| ------------------------------------ | ------------------------------------------------------------------------ |
| CPR_LIMITED_VALUE-ANNUAL             | `{ type: "LIMITED", value: 12, period: "ANNUAL" }`                       |
| CPR_LIMITED_VALUE-Units-Lifetime     | `{ type: "LIMITED", value: 12, period: "LIFETIME", metric: "UNITS }`     |
| CPR_LIMITED_VALUE-benefit_year-visit | `{ type: "LIMITED", value: 12, period: "BENEFIT_YEAR", metric: "VISIT"}` |