Sandbox Mock Scenarios
Use this guide when you want a canned Sandbox response for Enhanced Eligibility real-time (RTE) testing.
You do not need to know any predefined payer test values before starting. Pick one test case from the scenario table, copy the scenario header, and send the payer id shown in that row. The same scenario header can be used for either the JSON endpoint or the X12 endpoint.
Do not send PHI in Sandbox. All examples and responses are fake data for developer testing.
Quick Start
Sandbox supports two canned-response testing methods:
| Method | Best for | Header |
|---|---|---|
| Scenario-header mocks in this guide | Testing one of the specific outcomes listed in the scenario table, including Coverage Discovery-linked outcomes. | Send x-optum-rcmelig-mock-scenarios. |
| Standard Medical Network Sandbox predefined values | Testing the standard Sandbox examples documented in the Medical Network developer portal pages. | Do not send x-optum-rcmelig-mock-scenarios. |
The rest of this guide focuses on scenario-header mocks.
For scenario-header mocks, only these requirements control the canned test flow:
| Requirement | Where it goes | Why it matters |
|---|---|---|
| Scenario header | Request header: x-optum-rcmelig-mock-scenarios | Selects the canned response scenario. |
| Payer id | JSON body: tradingPartnerServiceId; X12 body: payer NM1 segment PI value | Must match the scenario row. This submitted value is persisted to chcPayerId in the response. |
| Required request data | Request body | Needed only when the scenario table lists a requirement, such as Texas address state or birth date older than 65. If no requirement is listed, no additional scenario-specific request data is needed. |
All other request details are accepted as valid test input, but they may not appear in the response. The response body is canned. Subscriber, dependent, benefit, payer, and Coverage Discovery details may come from the selected mock scenario instead of from your request.
The sample names and member values in this guide are stable Sandbox test values and align with supported Medical Network Sandbox predefined values. Relationship values such as SELF are determined in the Enhanced Eligibility response; you do not need to send them in the request.
Request Options
Choose the request format you want to test.
| If you are sending | Use this endpoint | Send the payer id as | Example request body |
|---|---|---|---|
| JSON Enhanced Eligibility RTE request | POST /rcm/eligibility/v1 | JSON body tradingPartnerServiceId | JSON request |
| X12 270 Enhanced Eligibility RTE request | POST /rcm/eligibility/v1/real-time/x12 | X12 payer NM1*PR*2...PI*<payer id> | X12 request |
Use only one row from the Scenario Table per request. The same scenario header works for both request formats. The scenario header and payer id must come from the same row.
Required Mock Header
Send this header in Sandbox:
x-optum-rcmelig-mock-scenarios: <scenario-header-value>
Rules:
- The value is case-sensitive.
- Use it only in Sandbox.
- Do not combine values from different scenario rows.
- The selected scenario controls the canned response outcome.
JSON Request
Use this format when you are sending normalized JSON.
Endpoint:
POST /rcm/eligibility/v1
Minimal subscriber-only request body:
{
"tradingPartnerServiceId": "SB900",
"provider": {
"organizationName": "Example Medical Center",
"npi": "1234567893"
},
"subscriber": {
"memberId": "0000000005",
"firstName": "JANEONE",
"lastName": "DOEONE",
"dateOfBirth": "1880-01-02",
"address": {
"address1": "123 Test Street",
"city": "Dallas",
"state": "TX",
"postalCode": "75001"
}
},
"encounter": {
"dateOfService": "20260115",
"serviceTypeCodes": [
"30"
]
}
}
For JSON tests, change tradingPartnerServiceId to the payer id from the scenario row you selected.
For dependent or spouse scenarios, you can include a dependent object so your request shape matches the scenario you are testing:
{
"tradingPartnerServiceId": "SB900",
"provider": {
"organizationName": "Example Medical Center",
"npi": "1234567893"
},
"subscriber": {
"memberId": "0000000005",
"firstName": "JANEONE",
"lastName": "DOEONE",
"dateOfBirth": "1880-01-02",
"address": {
"address1": "123 Test Street",
"city": "Dallas",
"state": "TX",
"postalCode": "75001"
}
},
"dependents": [
{
"memberId": "1111111111",
"firstName": "JohnTwo",
"lastName": "DoeOne",
"dateOfBirth": "20120505"
}
],
"encounter": {
"dateOfService": "20260115",
"serviceTypeCodes": [
"30"
]
}
}
The dependent details above help your test request look like the scenario. The response is still canned and may not echo those values.
X12 Request
Use this format when you are sending an X12 270.
Endpoint:
POST /rcm/eligibility/v1/real-time/x12
Request body shape:
{
"x12": "ISA*00*...~IEA*1*900000001~"
}
The request body is JSON. The x12 field contains the full X12 270 as a string.
Inside the X12 270, send the payer id in the payer NM1 segment:
NM1*PR*2*<PAYER NAME>*****PI*<payer id>~
Minimal X12 example using payer id SB900:
{
"x12": "ISA*00* *01*SomePwd *ZZ*TPG00000 *ZZ*RECEIVER *260101*1201*^*00501*900000001*0*T*:~GS*HS*SUBMITTER*RECEIVER*20260101*1201*900000001*X*005010X279A1~ST*270*900000001*005010X279A1~BHT*0022*13*123456789*20260101*120101~HL*1**20*1~NM1*PR*2*TEXAS BLUE CROSS BLUE SHIELD*****PI*SB900~HL*2*1*21*1~NM1*1P*2*EXAMPLE PROVIDER*****XX*1234567893~HL*3*2*22*0~NM1*IL*1*DOEONE*JANEONE****MI*0000000005~N3*123 TEST STREET~N4*DALLAS*TX*75001~DMG*D8*18800102*F~DTP*291*D8*20260115~EQ*30~SE*14*900000001~GE*1*900000001~IEA*1*900000001~"
}
For X12 tests, change only the payer id in PI*<payer id> unless the scenario row lists extra request data.
For dependent or spouse scenarios, include dependent patient loops if your test needs to match that request shape. The response is still canned and may not echo the submitted dependent values.
Scenario Table
Pick one row. Send the scenario header in x-optum-rcmelig-mock-scenarios and send the payer id shown in the row. The same scenario header can be used for either JSON or X12 requests.
| Test case | Scenario header | Payer id as tradingPartnerServiceId or X12 PI | Coverage Discovery Link Header* | Required request data | Canned result |
|---|---|---|---|---|---|
| Eligible spouse with HMO discovery | BCBS-TX-SB900-ELIGIBLE-HMO-DEPENDENT-SPOUSE-RTE | SB900 | Yes | Optional: include spouse/dependent request shape if you want the request to match the scenario. | Eligible spouse response. |
| Ineligible child with Medicaid discovery | BCBS-TX-SB900-INELIGIBLE-DEPENDENT-CHILD-RTE | SB900 | Yes | Address state must be TX. Optional: include child dependent request shape. | Ineligible child response. |
| Invalid provider NPI | BCBS-TX-SB900-REJECTED-INVALID-PROVIDER-NPI-AAA43-RTE | SB900 | No | None. | Rejected response for invalid provider NPI. |
| Invalid payer | UNSUPPORTEDPAYER-UNAMN-REJECTED-INVALID-PAYER-AAA79-RTE | UNAMN | No | None. | Rejected response for invalid payer. |
| Medicare eligible | MEDICARE-CMSMED-ELIGIBLE-RTE | CMSMED | No | None. | Eligible self response with Medicare-style content. |
| Medicare patient not found with discovery | MEDICARE-CMSMED-PATIENT-NOT-FOUND-RTE | CMSMED | Yes | Birth date must be older than 65. | Patient not found response. |
| Aetna QMB eligible | AETNA-60054-ELIGIBLE-QMB-RTE | 60054 | Yes | None. | Eligible self response with QMB-style content. |
| Cigna eligible | CIGNA-CIGNA-ELIGIBLE-RTE | CIGNA | No | None. | Eligible self response. |
| Texas Medicaid eligible | TXMEDICAID-SKTX0-ELIGIBLE-RTE | SKTX0 | No | None. | Eligible self response with Medicaid-style content. |
| Aetna Better Health pending spouse | AETNABETTERHEALTH-IL-26337-PENDING-DEPENDENT-SPOUSE-RTE | 26337 | No | Optional: include spouse/dependent request shape if you want the request to match the scenario. | Pending spouse response. |
| Duplicate subscriber rejection | CIGNA-CIGNA-REJECTED-DEPENDENT-DUPLICATE-SUBSCRIBER-ID-AAA76-RTE | CIGNA | No | Optional: include dependent request shape if you want the request to match the scenario. | Rejected response for duplicate subscriber. |
| Subscriber not found for child | AETNA-60054-REJECTED-DEPENDENT-CHILD-SUBSCRIBER-NOT-FOUND-AAA75-RTE | 60054 | No | Optional: include child dependent request shape if you want the request to match the scenario. | Rejected response for subscriber not found. |
| Payer unavailable for child | AETNA-60054-PAYER-UNAVAILABLE-DEPENDENT-CHILD-AAA42-RTE | 60054 | No | Optional: include child dependent request shape if you want the request to match the scenario. | Payer unavailable response. |
| BCBS Virginia payer unavailable spouse | BCBS-VA-SB923-PAYER-UNAVAILABLE-DEPENDENT-SPOUSE-RTE | SB923 | No | Optional: include spouse/dependent request shape if you want the request to match the scenario. | Payer unavailable spouse response. |
| Additional Medicare eligible | MEDICARE-XMEDX-ELIGIBLE-RTE | XMEDX | No | None. | Eligible self response with Medicare-style content. |
| Wellcare conditional | WELLCARE-WLLCR-CONDITIONAL-RTE | WLLCR | No | None. | Conditional self response. |
| BCBS New Jersey ineligible with discovery | BCBS-NJ-22099-INELIGIBLE-RTE | 22099 | Yes | None. | Ineligible self response. |
- Coverage Discovery link headers are returned only when your Sandbox product is configured for Coverage Discovery.
Coverage Discovery Link Header
Scenarios marked Yes in the Coverage Discovery Link Header* column return a Coverage Discovery link header when your Sandbox product is configured for Coverage Discovery.
The link response header contains one or more related Coverage Discovery task URLs.
The linked Coverage Discovery response is asynchronous. It is not returned inside the first Enhanced Eligibility RTE response body.
To retrieve the Coverage Discovery response, read the task path from the link header and call:
GET /rcm/eligibility/v1/coverage-discovery/{id}
Example Enhanced Eligibility RTE response header:
link: </coverage-discovery/0716e3e8-87ee-11ee-b9d1-0242ac120002>; title="coverage discovery - Task 1"; rel="related"
Use the id from the linked path in the retrieval request:
GET /rcm/eligibility/v1/coverage-discovery/0716e3e8-87ee-11ee-b9d1-0242ac120002
If the link header contains more than one /coverage-discovery/{id} path, call the retrieval endpoint once for each id.
Expected Fake Member Story
These mock responses return fixed fake member stories:
- Spouse scenarios return subscriber
JANEONE DOEONEand spouse/patientJOHNTWO DOEONE. - Dependent child scenarios return subscriber
JANEONE DOEONEand child/patientJOHNTWO DOEONE. - Self scenarios using
JANEONEreturn genderF. - Self scenarios using
JOHNONEreturn genderM.
The returned names, birth dates, gender values, payer names, benefit details, and Coverage Discovery results are canned. They may not match every field in your request.
The payer id you submit is the main request value reflected back in the response. JSON tradingPartnerServiceId or X12 payer PI is persisted as chcPayerId.
Other Sandbox Test Values
The JSON and X12 real-time endpoints also support standard Optum Medical Network Sandbox predefined canned values. These are separate from the scenario-header values in this guide.
Use the Medical Network Sandbox docs when you want those predefined values:
For JSON requests, send the documented values in the matching JSON fields, including tradingPartnerServiceId.
For X12 requests, send the documented values in the matching X12 270 segments. The payer id still goes in the payer NM1 segment's PI value.
Use only one Sandbox mock method per request:
| Mock method | When to use it | Header |
|---|---|---|
| Scenario headers in this guide | To test the canned outcomes listed on this page, including Coverage Discovery-linked scenarios. | Send x-optum-rcmelig-mock-scenarios. |
| Standard Medical Network Sandbox predefined values | To test standard eligibility Sandbox examples outside this scenario list. | Do not send x-optum-rcmelig-mock-scenarios. |
Troubleshooting
If you do not get the expected mock response, check these items first:
| Check | What to verify |
|---|---|
| Header spelling | The header name is x-optum-rcmelig-mock-scenarios. |
| Header value | The value exactly matches one scenario row, including case. |
| Endpoint | JSON requests use /rcm/eligibility/v1; X12 requests use /rcm/eligibility/v1/real-time/x12. |
| Payer id | JSON uses tradingPartnerServiceId; X12 uses the payer NM1 segment PI value. |
| Request body | X12 requests must still be sent as JSON with an x12 string field. |
| Required request data | Include any row-specific request data, especially when testing Coverage Discovery-linked scenarios. |
| Sandbox only | Mock scenario headers are supported only in Sandbox. |
| Coverage Discovery | Linked results require Coverage Discovery to be enabled for your Sandbox product. |
Updated 18 days ago