Nextech
Access
Section titled “Access”- Register through Nextech’s developer portal. There is no sandbox.
- SMART Backend Services with a JWT (RS384).
- Multi-tenant by client id: one shared base URL and token endpoint, with a separate client id for each practice. The token carries a practice-id claim — decode it and confirm it is the practice you expect, because credentials have been issued for the wrong practice.
Extraction approach
Section titled “Extraction approach”Paginated search of each resource type, not bulk.
$exportis accepted but crawls (1% after 34 minutes), its status URL drops into multi-minute 5xx windows, and older status URLs stop working.- Paginated search, by contrast:
_countup to 200, about 1.2 seconds per page, a whole tenant in under half an hour. Use_lastUpdated=ge<date>for incremental pulls and stream each page to NDJSON. - Types pulled: Patient, Practitioner, Encounter, Condition, Observation, Procedure, MedicationRequest, DiagnosticReport.
- A type that returns 400 “patient or _id must be supplied” (for example
Condition) needs a per-patient cascade. Comma-separated patient lists are rejected, so it is one call per patient — limit it to patients with an encounter in the measurement year.
Known behaviour
Section titled “Known behaviour”_countis capped at 200.MedicationRequestis slow (about 20 seconds per page);Conditionabout 4.6 seconds per patient.DiagnosticReportreturns 500 on tenant-wide search.Procedure.codewas always empty in the tenants we saw.- References have no
type; inject it. - No provider participants, NPI or TIN in the data — attribution must come from your own configuration.
- Encounter coding is good: the measures’ qualifying-encounter value sets match.
- Retry transient pages (0, 429, 5xx) with backoff; several consecutive failures can occur.