Norvya Developers
Get a sandbox
Guide

Sandbox & access

Build and test against synthetic members before you touch real data. A sandbox is a private copy of your market's setup: a medical practice, a gym, a hospital, a military unit (or a first-responder organisation), or for EMR vendors a vendor credential plus two practices that have already approved it, so you can try the multi-practice flow. Sandbox kinds today: practice, gym, vendor, hospital, unit, pharmacy, care_facility, travel, pediatric, employer, medspa.

What is in it

Each organisation holds 16 synthetic members. None is a real person: names come from a made-up pool, addresses use the reserved example.invalid domain, and record numbers start HTEST-SBX-. They follow 12 stories, among them a member on a GLP-1 who does no strength training, a GLP-1 member losing muscle, an overreaching lifter, type 2 diabetes while trying to conceive, uncontrolled blood pressure, high LDL with no statin, diabetic kidney disease with a falling eGFR, overdue diabetes and thyroid monitoring, and a member who stopped coming in. Two members do not share home readings with you, so you can see how consent filtering looks.

What returns data

Members, trainer guidance and the at-risk roster; for practices the worklist (one run is already done when you get the sandbox), care gaps, between-visit signals, the pre-visit brief, CDS Hooks cards and the brief document, patient match (we send you a few record number and birth date pairs), population summary, measures and QRDA III, both bulk exports, and a few hospital and ED notices with their Transitional Care Management clock.

A hospital sandbox also holds post-discharge episodes at different days across heart failure, COPD, heart attack, pneumonia, joint replacement and general discharges: red-flag check-ins, a medicine list still to reconcile, a readmission, an ED return and one episode opened by an ADT discharge message, so the worklist, episode detail, write-back calls, outcomes and the ADT endpoint all answer.

Practice and hospital sandboxes also carry the public-health family: an immunization registry connection, a few doses (one that the registry would refuse as uncoded), two case-report candidates (one the member keeps closed, so you see the clinician-only override) and two syndromic visits (one without a chief complaint, which is never sent). Every public-health transmission in a sandbox is simulated: the registry acknowledgement, the history query's synthetic doses, the Reportability Response (which says plainly that it is not a determination) and the syndromic message are produced by Norvya, nothing reaches a state system even if a real address is configured, and each answer carries simulated: true.

Practice sandboxes also carry the billing and scheduling family: appointments booked in Norvya (one completed, two upcoming, one cancelled) and one sent the way a practice system sends it (your own id SBX-PM-0001), care-management minutes for CCM (over its first mark), PCM (short of it) and RPM (with simulated device readings, flagged as such), and one Good Faith Estimate with synthetic identifiers. No appointment reminder ever reaches a synthetic member. Population counts below the small-cell minimum are withheld, and with a panel this small many of them will be: that is the real rule working, not missing data.

Specialty, life-stage, employer and med-spa data

Every practice sandbox also holds: a synthetic older adult (a raised falls tier, CPAP nights and a care dyad); a behavioral-health caseload with PHQ-9 and GAD-7 trends (one member on the caseload does not share, so is counted and never shown), homework, a Collaborative Care episode with documented consent and a signed progress note; an oncology treatment summary imported and committed, plus a second staged draft; a knee replacement PT episode, a dysphagia episode with IDDSI levels and a dietitian client with MNT hours; two tracked lesions (one recheck due, no image bytes), HS and acne assessments and a patch test with its 48-hour read; and one small staged roster whose commit simulates the invitations (no email is sent). Skin-classifier calls in a sandbox always answer 409 skin_classifier_not_enabled.

A pediatric sandbox adds a synthetic family: a guardian who shares a four-month-old with growth points, so the life-stage calls answer. An employer sandbox is an employer plus the practice that examines its workers: synthetic employees enrolled in a GLP-1 programme, a finished and a running challenge, occupational exams (one released, one pending, one coming due) and a work injury; its group figures clear the small-cell minimum. A medspa sandbox has clearances (one decided with a flag, one awaiting review), two treatments with aftercare check-ins, a confirmed adverse event and a retreatment coming due.

Unit sandbox

A military unit (or, on request, a first-responder organisation) holds 16 synthetic service members instead of the clinical stories: a month of simulated resting heart rate, heart-rate variability and sleep, five weeks of rated training sessions, and duty profiles recorded the way a unit's care team records them. Five members show an illness-like deviation from their own baseline, two a smaller one, five spike their training load in the last week, five are on limited duty and one in quarters, and two do not share biometrics with the unit at all. So GET /v1/population/readiness answers real counts with some cells withheld (the small-cell rule again), never an individual, and projection.available is always false. Its credentials hold programs.readiness.read plus the common scopes; the practice families answer not_a_medical_practice.

Credentials

Sandbox client ids start nvy_sbx_. Same base URL, same token endpoint, same scopes as production. A sandbox credential can only reach its sandbox, and a production credential can never reach a sandbox; both are checked on every call.

Exports and imports

Every exported FHIR resource carries the HL7 HTEST security label and a synthetic tag. Anyone you import into a sandbox becomes a synthetic member, whatever your file says. ADT messages that match none of the sandbox's synthetic members are counted as unmatched and discarded, never stored, so never point a real feed at sandbox credentials.

Webhooks and nudges

Webhooks are delivered to your HTTPS endpoint as in production (payloads carry no health information either way). Gym nudges are recorded, with the same 14-day limit, and answered with simulated: true; no notification is sent to anyone.

Limits, resets and expiry

Sandbox calls show in GET /v1/usage with environment: "sandbox" and are never billed. The rate limit is lower than production. Ask and we reset it: new synthetic members; webhooks, exports, staged imports, invitations, join codes and message threads cleared; credentials unchanged. A sandbox expires 60 days after it is created.

The data is plausible, not epidemiological: it is there to exercise the API, not to judge clinical performance.

Get access

To request sandbox credentials, write to [email protected] with your organisation and market (gym, practice, EMR vendor, government programme or plan). For production access, write to the same address.

Clinical content is decision support for a licensed clinician, not a diagnosis. A business associate agreement is required before protected health information is exchanged.

↑ ↓ to moveEnter to open