Developers · Standards-based API

Bulk Data export

LiveGroup-level onlyONC certification in progress

Export a practice's whole patient population as FHIR NDJSON files, asynchronously, with a SMART Backend Services token. Ask only for what changed since your last run with _since.

At a glance

StatusLive in production.
LevelGroup-level only: GET /Group/{id}/$export. Each practice has one dynamic Group containing every patient not deleted at processing time. System-level /$export and patient-level /Patient/$export are not available.
StandardFHIR Bulk Data Access 2.0.
AuthenticationA SMART Backend Services token with a system read scope, plus system/Group.rs to discover the Group.
Outputapplication/fhir+ndjson, one resource per line, one file set per resource type.
FilesSigned links that expire after 24 hours and still require a current token from the same client and practice.
CostNo fee and no revenue share.

Live, with certification in progress

The FHIR and authorization hosts are live in production. ONC certification is in progress and ChartVoyant is not yet CHPL-listed. An internal security assessment has been completed with follow-up remediation ongoing; an independent external security review has not been completed. Access requires an enabled practice, a registered app and the right patient or practice authorization.

The flow

Relative to the practice's FHIR base. Synthetic placeholders throughout.

1. Find the Group

GET /r4/your-practice/Group
Authorization: Bearer BACKEND_ACCESS_TOKEN

2. Kick off

GET /r4/your-practice/Group/GROUP_ID/$export?_type=Patient,Observation&_since=2026-01-01T00%3A00%3A00Z
Authorization: Bearer BACKEND_ACCESS_TOKEN
Accept: application/fhir+json
Prefer: respond-async

HTTP/1.1 202 Accepted
Content-Location: STATUS_URL

3. Poll, then download

GET STATUS_URL          # 202 with X-Progress and Retry-After while running
HTTP/1.1 200 OK
{"transactionTime":"2026-09-13T12:00:00Z","request":"ORIGINAL_REQUEST_URL",
 "requiresAccessToken":true,
 "output":[{"type":"Patient","url":"SIGNED_FILE_URL","count":3}],"error":[]}

GET SIGNED_FILE_URL     # same token; one FHIR resource per line
DELETE STATUS_URL       # cancel, and invalidate the files

Honor Retry-After between polls. Check the error array, and do not treat partial output as a complete export. If an export is already running for the practice, kickoff returns 429 with Retry-After.

Parameters

ParameterSupport
_typeComma-separated resource types. Request only types your scopes allow; system/*.rs may request every supported class.
_sinceA FHIR instant, for example 2026-01-01T00:00:00Z. Returns resources changed strictly after it. A future instant is rejected.
_outputFormatNDJSON only: application/fhir+ndjson (the default), application/ndjson or ndjson.
Anything elseRejected with 400, including _typeFilter and _elements.
HeadersAccept: application/fhir+json and Prefer: respond-async are required.

How to get access

  1. Read the guide

    The full SMART on FHIR-4 developer guide and the public practice directory need no account, payment or agreement.

  2. Request registration

    Email info@chartvoyant.com or use the support form with the details your system needs. Send no patient records, private keys or client secrets.

  3. We register and enable it

    We apply the same identity and configuration checks to every developer, and register and enable a complete eligible request within five business days. If something is missing, we tell you what.

  4. Authorize and connect

    The practice authorizes your system for its data. Then request a token with a signed assertion and call its FHIR base.

No fee

There is no fee to patients, practices or app developers for the standardized FHIR API, registration, testing, production access, calls or Bulk Data, and no revenue share. The API Use Agreement and profit share for the separate ChartVoyant API do not apply here.