Standards-compliant, FHIR R4 native. Documentation, sandbox, and integration guides for the FHIR-native healthcare platform.
Toro's API follows the FHIR R4 specification with US Core profiles. Authentication uses SMART-on-FHIR backend services (OAuth 2.0 client credentials with JWT client assertion), the standard for server-to-server healthcare integrations.
Email info@toro.health with your organization name, integration use case, and the FHIR resources you need. We'll provision sandbox credentials and a base URL within one business day.
Generate a JWT signed with your private key, exchange it for an access token at the token endpoint, and use the token as a bearer credential on all subsequent requests.
# Generate JWT, then: curl -X POST "https://api.toro.health/auth/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials" \ -d "client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer" \ -d "client_assertion=<your-jwt>" \ -d "scope=system/Patient.read system/Encounter.read"
const res = await fetch(`${BASE}/Patient/${patientId}`, { headers: { "Authorization": `Bearer ${accessToken}`, "Accept": "application/fhir+json" } }); const patient = await res.json(); console.log(patient.name[0].given);
The full list of FHIR R4 resources supported in production.
| Resource | Operations | Notes |
|---|---|---|
| Patient | read · search · create · update | US Core Patient profile, demographics, identifiers |
| Practitioner | read · search | Provider directory; NPI, specialty, schedule binding |
| Encounter | read · search · create · update | Visit records, links to Observations and Conditions |
| Observation | read · search · create | Vitals, labs, social history, smoking status (US Core) |
| Condition | read · search · create · update | Problem list, diagnoses, ICD-10 + SNOMED |
| MedicationRequest | read · search · create | Active prescriptions, RxNorm-coded |
| MedicationStatement | read · search | Patient-reported med list |
| AllergyIntolerance | read · search · create | RxNorm + SNOMED-coded allergies |
| Immunization | read · search · create | CVX-coded vaccine history |
| DocumentReference | read · search · create | Notes, uploaded documents, signed PDFs |
| Account | read · search | Patient billing accounts, balances |
| Coverage | read · search | Insurance + membership coverage records |
| Appointment | read · search · create · update | Scheduled visits, confirmations, cancellations |
| ServiceRequest | read · search · create | Orders, referrals |
| DiagnosticReport | read · search · create | Lab results, imaging reports |
FHIR Bulk Data $export is on the post-launch roadmap (target: next quarter). The implementation will follow the FHIR Bulk Data Access IG with NDJSON output. For day-one large-volume exports, contact info@toro.health — we'll run a one-off export through Switch.
The live conformance statement is published at /fhir/metadata and validates against the FHIR R4 spec. It documents:
$export, $everythingVerify directly: curl https://api.toro.health/fhir/metadata [CONFIRM base URL with API team].
const url = `${BASE}/Encounter?patient=${id}&date=ge2024-01-01&date=le2024-12-31`; const res = await fetch(url, { headers }); const bundle = await res.json(); bundle.entry.forEach(e => console.log(e.resource));
const obs = {
resourceType: "Observation",
status: "final",
category: [{ coding: [{ system: "http://terminology.hl7.org/CodeSystem/observation-category", code: "vital-signs" }] }],
code: { coding: [{ system: "http://loinc.org", code: "8867-4", display: "Heart rate" }] },
subject: { reference: `Patient/${patientId}` },
valueQuantity: { value: 72, unit: "beats/minute", system: "http://unitsofmeasure.org", code: "/min" }
};
await fetch(`${BASE}/Observation`, { method: "POST", headers, body: JSON.stringify(obs) });
// 1. Kick off export const kickoff = await fetch(`${BASE}/$export?_type=Patient,Encounter,Observation`, { headers: { ...headers, "Prefer": "respond-async" } }); const statusUrl = kickoff.headers.get("Content-Location"); // 2. Poll for completion while (true) { await sleep(5000); const status = await fetch(statusUrl, { headers }); if (status.status === 200) { const manifest = await status.json(); // 3. Download NDJSON files from manifest.output break; } }
We publish exactly what's live. Anything in the Roadmap section is not yet shipping — do not build against it.
Patient/$everything operation — standard patient-record summary exportDocumentReference resource support for clinical documents/fhir/metadata CapabilityStatement (validates against FHIR R4 spec)Composition/$document operation for signable document Bundles$exportToro is FHIR R4 native, US Core conformant, and built for the standards-based interop wave. We’re tracking TEFCA developments closely, but we do not currently claim TEFCA QHIN participation — that’s a multi-year program we’ll be transparent about as our position changes.