Testing: Sending Mock Requests with Demo Policies
Sandbox Demo Policies
Use the demo policies below to test the sandbox API. Each endpoint has its own section with a ready-to-send example. The full policy list is available as a CSV. š
š Download: All demo policies (.csv)
Each row in the CSV is one policy. The is_discover, is_scan and is_medicaid columns mark the policies built for those endpoints, and expected_status_code shows the HTTP status you should get back.
Contents
- Endpoints at a Glance
- Lookup Rules
- Testing /Estimate:
POST /v1/estimate - Testing /Discover:
POST /v1/discover - Testing /Scan:
POST /v1/scan - Testing /Medicaid:
POST /v1/medicaid - Demo Policies by Scenario
Endpoints at a Glance
All requests are POST with a JSON body. Base URL: https://coverage-api-sandbox.meetnirvana.com
Every example sends the headers Content-Type: application/json, accept: application/json and apikey: [YOUR API KEY]. Replace the placeholder with your sandbox API key.
| Endpoint | Full URL | What you send | Demo policies that work |
|---|---|---|---|
/v1/estimate | https://coverage-api-sandbox.meetnirvana.com/v1/estimate | Member ID, name, DOB, plus payer, provider NPI and session cost | Policies with a member ID (most tables below) |
/v1/discover | https://coverage-api-sandbox.meetnirvana.com/v1/discover | Name, DOB, zip and payer. No member ID. | CSV rows where is_discover is TRUE |
/v1/scan | https://coverage-api-sandbox.meetnirvana.com/v1/scan | Name, DOB and zip. No payer or member ID. | CSV rows where is_scan is TRUE |
/v1/medicaid | https://coverage-api-sandbox.meetnirvana.com/v1/medicaid | Name, DOB, member ID, and either payer_id or patient_state | CSV rows where is_medicaid is TRUE |
Lookup Rules
- Policies are looked up by member ID, or by first name + last name + DOB (case-insensitive).
- Monetary fields are in cents (for example,
10000= $100.00). - If
payer_idis blank for a policy in the tables, any payer will suffice. - If
zipis blank, use10001. Send zip as a string so leading zeros are kept (for example,"02118"). /discoverand/scanreturn a thinner payload than/estimate, even when the same member has financials on/estimate.- Error cases with blank names (
00001MHMNF,PRONOTRECand similar) match on member ID only, and only work on/v1/estimate.
Estimate Endpoint
POST https://coverage-api-sandbox.meetnirvana.com/v1/estimate
Required: member_id, name and DOB. The example also sends payer_id, provider_npi and provider_session_cost (in cents).
Example demo policy
| What it tests | Member ID | Name | DOB | Payer |
|---|---|---|---|---|
| Starter: coinsurance after deductible, with OOP max | ALFREDTEST | Alfred Arnoldson | 2000-01-01 | 60054 |
curl --request POST \
--url https://coverage-api-sandbox.meetnirvana.com/v1/estimate \
--header 'Content-Type: application/json' \
--header 'accept: application/json' \
--header 'apikey: [YOUR API KEY]' \
--data '
{
"payer_id": "60054",
"member_id": "ALFREDTEST",
"member_first_name": "Alfred",
"member_last_name": "Arnoldson",
"member_dob": "2000-01-01",
"provider_npi": "1234567890",
"provider_session_cost": 10000
}'import requests
url = "https://coverage-api-sandbox.meetnirvana.com/v1/estimate"
headers = {
"Content-Type": "application/json",
"accept": "application/json",
"apikey": "[YOUR API KEY]"
}
payload = {
"payer_id": "60054",
"member_id": "ALFREDTEST",
"member_first_name": "Alfred",
"member_last_name": "Arnoldson",
"member_dob": "2000-01-01",
"provider_npi": "1234567890",
"provider_session_cost": 10000
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())Expect: 200 with an active plan. The policy is seeded with 20% coinsurance after deductible, a deductible of 150000 (100000 remaining) and an OOP max of 350000 (300000 remaining), all in cents.
Error cases: use 00001MHMNF (404), 000011MHRR (502) or PRONOTREC (400). See Partial Coverage and Errors below. These only work on this endpoint.
Discover Endpoint
POST https://coverage-api-sandbox.meetnirvana.com/v1/discover
Required: name, DOB, zip and payer_id. Do not send member_id.
Example demo policy
| What it tests | Name | DOB | Zip | Payer |
|---|---|---|---|---|
| Active PPO (member ID W123456789 on /estimate) | Liam Brooks | 1985-03-22 | 02118 | 60054 |
curl --request POST \
--url https://coverage-api-sandbox.meetnirvana.com/v1/discover \
--header 'Content-Type: application/json' \
--header 'accept: application/json' \
--header 'apikey: [YOUR API KEY]' \
--data '
{
"payer_id": "60054",
"member_first_name": "Liam",
"member_last_name": "Brooks",
"member_dob": "1985-03-22",
"zip": "02118"
}'import requests
url = "https://coverage-api-sandbox.meetnirvana.com/v1/discover"
headers = {
"Content-Type": "application/json",
"accept": "application/json",
"apikey": "[YOUR API KEY]"
}
payload = {
"payer_id": "60054",
"member_first_name": "Liam",
"member_last_name": "Brooks",
"member_dob": "1985-03-22",
"zip": "02118"
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())Expect: 200 with an active plan and a thinner payload than /estimate.
Government programs: the Medicaid, Medicare, Medicare Advantage and dual-eligible discover policies (24 of the 37) use payer_id GOVERNMENT in the CSV.
Error cases: APDISCOVER400 Pete Provider (400), APDISCOVER404 Nora Notfound (404) and APDISCOVER429 Rita Ratelimit (429). Their names, DOBs and zips are in Partial Coverage and Errors below. Send GOVERNMENT as the payer.
Scan Endpoint
POST https://coverage-api-sandbox.meetnirvana.com/v1/scan
Required: name, DOB and zip. Do not send payer_id or member_id.
Example demo policy
| What it tests | Name | DOB | Zip |
|---|---|---|---|
| Active coverage found by name, DOB and zip alone | Charlotte Williams | 1996-09-05 | 94110 |
curl --request POST \
--url https://coverage-api-sandbox.meetnirvana.com/v1/scan \
--header 'Content-Type: application/json' \
--header 'accept: application/json' \
--header 'apikey: [YOUR API KEY]' \
--data '
{
"member_first_name": "Charlotte",
"member_last_name": "Williams",
"member_dob": "1996-09-05",
"zip": "94110"
}'import requests
url = "https://coverage-api-sandbox.meetnirvana.com/v1/scan"
headers = {
"Content-Type": "application/json",
"accept": "application/json",
"apikey": "[YOUR API KEY]"
}
payload = {
"member_first_name": "Charlotte",
"member_last_name": "Williams",
"member_dob": "1996-09-05",
"zip": "94110"
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())Expect: 200 with an active plan and a thinner payload than /estimate.
Not-found tests: Charlotte Reed (same DOB and zip, different last name) and Benjamin Ward born 1981-12-19 (zip 43215) both return 404 MEMBER_NOT_FOUND. Benjamin Ward born 1990-05-11 (same zip) returns 200.
Medicaid Endpoint
POST https://coverage-api-sandbox.meetnirvana.com/v1/medicaid
Required: name, DOB, member_id, and either payer_id or patient_state.
Example demo policy
| What it tests | Member ID | Name | DOB | State |
|---|---|---|---|---|
| State Medicaid, active | 01STATEACTIVE | Suzanne Bullard | 2001-11-13 | NY |
curl --request POST \
--url https://coverage-api-sandbox.meetnirvana.com/v1/medicaid \
--header 'Content-Type: application/json' \
--header 'accept: application/json' \
--header 'apikey: [YOUR API KEY]' \
--data '
{
"member_id": "01STATEACTIVE",
"member_first_name": "Suzanne",
"member_last_name": "Bullard",
"member_dob": "2001-11-13",
"patient_state": "NY"
}'import requests
url = "https://coverage-api-sandbox.meetnirvana.com/v1/medicaid"
headers = {
"Content-Type": "application/json",
"accept": "application/json",
"apikey": "[YOUR API KEY]"
}
payload = {
"member_id": "01STATEACTIVE",
"member_first_name": "Suzanne",
"member_last_name": "Bullard",
"member_dob": "2001-11-13",
"patient_state": "NY"
}
response = requests.post(url, headers=headers, json=payload)
print(response.json())Expect: 200 with an active plan. The policy is seeded as fully covered with a $0 copay.
Other Medicaid demo policies
| What it tests | Member ID | Name | DOB | State |
|---|---|---|---|---|
| State Medicaid, active | 02STATEACTIVE | Agnes Wendt | 2003-08-13 | NY |
| State Medicaid, inactive | 01STATEINACTIVE | Tommy Austin | 1993-02-05 | NY |
| Managed Medicaid + MCO | 01MCOACTIVE | Michael Farmer | 1993-01-29 | FL |
| Managed Medicaid + MCO | 87777516 | Hilary Heber | 2011-06-04 | CO |
| Managed Medicaid + eligibility type DX | 47906595 | Tommy Sturgeon | 1984-04-09 | MN |
Demo Policies by Scenario
These tables group the demo policies by what they test. Select a scenario to expand it. Every field for every policy is in the CSV. š Download All demo policies (.csv).
Active Commercial
| What it tests | Member ID | Name | DOB | Payer |
|---|---|---|---|---|
| Starter: coinsurance after deductible, with OOP max | ALFREDTEST | Alfred Arnoldson | 2000-01-01 | 60054 |
| Active copay after deductible | 000011MHNA | Beatrice Waters | 2006-01-10 | |
| Active copay after deductible | 000012MHNA | William Phillips | 2000-09-05 | |
| Active copay after deductible | 000013MHNA | Michael Young | 2005-03-08 | |
| Deductible and OOP max met | 000014MHNA | Jason Worsley | 1988-03-04 | |
| Deductible met | 000015MHNA | Betty Dill | 1993-10-26 | |
| Commercial PPO pass | MAPASSPPO | John Simon | 1992-08-15 |
Government and Dual-Eligible
| What it tests | Member ID | Name | DOB | Zip | Payer |
|---|---|---|---|---|---|
| Original Medicare | 00001MHOMCR | Leo Harris | 1984-07-25 | 10001 | |
| Original Medicaid | 00001MHOMCD | Stephen Osborne | 1997-07-03 | 10001 | |
| Medicare Advantage | 000011MHMA | Janice Ball | 1998-12-17 | 10001 | |
| Medicare Advantage | 000012MHMA | Robert Antonio | 2003-04-03 | 10001 | |
| Managed Medicaid | 000011MHMM | Doris Bradley | 1997-10-23 | 10001 | |
| Managed Medicaid | 000012MHMM | Paul Ford | 1997-10-19 | 10001 | |
| Dual eligible, PPO | 87293465 | Alicia Mendez | 1957-03-14 | 87726 | |
| Dual eligible, HMO | 49827356 | Marcus OāNeill | 1942-07-22 | 60054 | |
| Original Medicare (named) | UC0000005 | Zara Orr | 1958-07-07 | 80309 | COMCR |
| QMB, fully covered | 9KF7-PQ4-1D89 | Emily Gallagher | 1943-02-05 | 90026 | FLMCR |
| Managed Medicaid + MCO | 87777516 | Hilary Heber | 2011-06-04 | 80201 | |
| Managed Medicaid + eligibility type DX | 47906595 | Tommy Sturgeon | 1984-04-09 | 55401 | |
| Managed Medicaid + MCO | 01MCOACTIVE | Michael Farmer | 1993-01-29 | 33101 | |
| State Medicaid, active | 01STATEACTIVE | Suzanne Bullard | 2001-11-13 | 10001 | |
| State Medicaid, active | 02STATEACTIVE | Agnes Wendt | 2003-08-13 | 10001 | |
| State Medicaid, inactive | 01STATEINACTIVE | Tommy Austin | 1993-02-05 | 10001 |
Note: payer codes like COMCR and FLMCR are sandbox-specific alphabetic test codes (state + payer type), not real Nirvana numeric payer IDs. Donāt use these against production.
Carve-Outs, Additional Policies, and TPAs
| What it tests | Member ID | Name | DOB |
|---|---|---|---|
| Magellan TPA | 000011MHCA | Michael Morrow | 1997-02-22 |
| Magellan TPA | CSGA7654321 | Liam McAllister | 1980-04-03 |
| Optum TPA | 000012MHCA | Wm Jarvis | 1993-12-03 |
| Carelon TPA | 000013MHCA | Joseph Scruggs | 1989-08-10 |
| Secondary Florida Medicaid | 000011MHSP | Willie Ruiz | 2000-12-12 |
| Primary other commercial | 000012MHSP | Julio Vahle | 1999-01-09 |
| Secondary Cigna | 000013MHSP | Myrtle Greaves | 2002-06-19 |
| Spouse + primary other plan | DUJ123456789 | Sarah Thompson | 1985-03-14 |
| Utilization manager | U12345673 | Nancy Drew | 1995-07-21 |
Partial Coverage and Errors
| Expected Status Code | Expected Error Code | Member ID | Name | DOB | Zip |
|---|---|---|---|---|---|
| 200 | Charlotte Williams | 1996-09-05 | 94110 | ||
| 206 | UNKNOWN_COSTSHARE | 00001MHUC | Ronnie Wesley | 2007-02-21 | 10001 |
| 206 | UNKNOWN_REMAININGS | 000011MHUA | Roy Ladage | 1990-01-03 | 10001 |
| 400 | PAYER_NOT_SUPPORTED | 000012MHRR | |||
| 400 | PROVIDER_NOT_RECOGNIZED | PRONOTREC | |||
| 400 | PROVIDER_NOT_RECOGNIZED | APDISCOVER400 | Pete Provider | 1975-05-05 | 60601 |
| 404 | MEMBER_NOT_FOUND | 00001MHMNF | |||
| 404 | MEMBER_NOT_FOUND | APDISCOVER404 | Nora Notfound | 1985-07-07 | 80202 |
| 404 | MEMBER_NOT_FOUND | Charlotte Reed | 1996-09-05 | 94110 | |
| 404 | MEMBER_NOT_FOUND | Benjamin Ward | 1981-12-19 | 43215 | |
| 429 | TOO_MANY_REQUESTS | APDISCOVER429 | Rita Ratelimit | 1988-08-18 | 98101 |
| 502 | PAYER_FAILURE | 000011MHRR |
Note: Charlotte Williams (200) and Charlotte Reed (404) have the same DOB and zip but different last names, so you can test name-mismatch behavior. Benjamin Ward works the same way for DOB: 1981-12-19 returns 404, while 1990-05-11 (same zip) returns 200. Neither Charlotte nor Benjamin has a member ID, so look them up by name, DOB and zip.
Plan Status
| What it tests | Member ID | Name | DOB | Zip | Payer | plan_status |
|---|---|---|---|---|---|---|
| Inactive / expired | 00001MHEXP | Noah Parrish | 1990-04-17 | 10001 | INACTIVE | |
| Active at risk | 00001MHEXS | Brian Murray | 2010-08-15 | 10001 | ACTIVE_AT_RISK | |
| Inactive named | ECN123456789 | Sophia Kim | 2000-01-19 | 10001 | MOBLS | INACTIVE |
| Inactive named | 894726153 | Ethan Wright | 1990-04-27 | 87726 | INACTIVE | |
| Inactive commercial | U987654321 | Elijah Foster | 1975-04-12 | 55408 | 62308 | INACTIVE |
Telehealth, Marketplace, BlueCard, and Demo Mismatch
| What it tests | Member ID | Name | DOB | Zip | Payer | Notes |
|---|---|---|---|---|---|---|
| Telehealth fully covered | U12345678 | Emily Chen | 1978-11-30 | 10001 | NYBLS | In-person copay; telehealth $0 |
| Telehealth copay | H123456789 | Angela Brooks | 1982-08-03 | 10001 | HUMANA | Coinsurance in-person |
| Marketplace | YUN12031213 | David Chen | 1978-05-01 | 97214 | ORBLS | MARKETPLACE |
| Marketplace + telehealth | UC0000001 | Denzel Jordan | 1962-08-11 | 10003 | 60054 | |
| Commercial HDHP | UC0000002 | Sophie Lim | 1997-12-02 | 75210 | 62308 | HSA HDHP |
| BlueCard | BC0000001 | Alicia Ricci | 1985-10-03 | 10001 | ALBLS | |
| BlueCard | BC0000002 | Emma Anderson | 1981-10-15 | 30309 | ARBLS | Copay, no deductible |
| Demographic mismatch | DEMOMISSMATCH | Firstname Lastname | 2000-01-01 | 10001 | Matches even if name/DOB differ | |
| Missing address | NO-ADDRESS | George Mendez | 1981-10-10 | NYBLS | No street/city/state/zip | |
| Active PPO | W123456789 | Liam Brooks | 1985-03-22 | 02118 | 60054 | |
| Active HMO | U123456789 | Emma Carter | 1992-07-14 | 75201 | 62308 | |
| Active HMO | 999000123 | Ava Mitchell | 1999-11-02 | 60614 | 87726 | |
| Active HMO | UHC123456789 | Noah Bennett | 1978-08-30 | 98101 | 87726 |
Note: this table is the source of truth for the āSandbox: Send Mock Requestsā articleās Estimate examples. Liam Brooks, Emma Carter, Ava Mitchell, and Noah Bennett are all valid, distinct demo policies (not a data error), they just need to be used consistently within a single curl/Python pair rather than mixed.
Plan-Year Reset
These members have plan_reset_soon: TRUE.
| What it tests | Member ID | Name | DOB | reset_benefits_status |
|---|---|---|---|---|
| Reset detected, no action | RESETNACOPAY | Dustin Dixion | 2006-10-08 | DETECTED_NO_ACTION_REQUIRED |
| Reset detected, no action (coinsurance) | RESETNACOINS | Francis Steadman | 2009-07-12 | DETECTED_NO_ACTION_REQUIRED |
| Action required: copay change | RESETARCOPAY | Marlena Kopka | 2009-07-26 | DETECTED_ACTION_REQUIRED |
| Action required: coinsurance change | RESETARCOINS | Phyllis Milam | 2003-09-05 | DETECTED_ACTION_REQUIRED |
| Action required: member ID change | RESETID | Angeles Walters | 2007-01-02 | DETECTED_ACTION_REQUIRED |
| Action required: OOP max change | RESETAROOP | Colby Abell | 2010-02-17 | DETECTED_ACTION_REQUIRED |
| Action required: copay + OOP | RESETARCOPAYOOP | Henry Harrelson | 2004-07-21 | DETECTED_ACTION_REQUIRED |
| Action required: copay + deductible | RESETARCOPAYDED | Donna Jones | 1999-08-02 | DETECTED_ACTION_REQUIRED |
| Action required: deductible + OOP | RESETARDEDOOP | Linda Koch | 2011-07-08 | DETECTED_ACTION_REQUIRED |
| Reset not detected | RESETND | Annette Turner | 2006-12-27 | NOT_DETECTED |
š Download: All demo policies (.csv)
Updated 1 day ago

