Production access is free and self-serve with an account. · Try the demo

FinchNode

Patient-authorized EHR integration

Demo API reference

The keyless demo API: synthetic records with no account.

Discover the public demo API

GET /

Check demo API availability

GET /health

List fictional sample providers

GET /providers

List named synthetic scenarios

GET /scenarios

The scenario manifest: what each scenario exercises, its subject and Bundle, its behavior or session outcome, and links. No clinical data. The controls and exercises fields describe the authenticated FinchNode sandbox; the accountless demo cannot perform them.

Get one named synthetic scenario

GET /scenarios/{scenarioId}

One manifest entry with its links. The controls and exercises fields describe the authenticated FinchNode sandbox; the accountless demo cannot perform them.

  • scenarioId string (required)

Simulate a Connect session

POST /connect/sessions

List synthetic patients

GET /patients

One entry per record scenario, in manifest order. Behavior-scenario subjects are listed by /scenarios.

Get the synthetic patient

GET /patients/{patientId}

  • patientId string (required)

Get legacy categorized FHIR resources

GET /patients/{patientId}/records

Compatibility endpoint: object demo_record with grouped FHIR resources in record. No removal is scheduled. Use /users/{subject}/records for normalized platform-shaped data. For a behavior subject, a scenario error (429, 410, or 403) is returned once categories are validated; this compatibility route ignores other query parameters, such as cursor, for every subject.

  • patientId string (required)
  • categories string: Comma-separated subset of available categories.

Get a platform-shaped synthetic health record

GET /users/{subject}/records

Versioned /demo/v1 endpoint with meta.schemaVersion 2. Uses the existing normalized record field projection over the named scenario Bundles; the default subject is the baseline-adult scenario. Behavior scenarios use the production error codes and envelope shapes: rate-limited returns 429 rate_limited in alternating 2-second slots, consent-revoked returns 410 consent_inactive, and consent-partial returns 403 consent_scope_exceeded for categories outside its receipt. source-unavailable returns the partial-sync envelope (syncStatus partial with a source_unavailable warning). For a behavior subject, a scenario error (429, 410, or 403) is returned before query parameters other than categories are checked, so an unsupported parameter such as cursor is reported (400 invalid_query) only when the scenario lets the request through. Platform authorization and ingestion are unchanged. Consent and sync are simulated. All ten platform categories are accepted and populated in the default baseline, including a readable synthetic note, coverage, and a claim. Sparse scenarios retain empty categories. Unrequested sections are omitted. No pagination or change-feed parameters are supported.

  • subject string (required)
  • categories string: Comma-separated platform categories. Omit to return all categories (the granted categories for consent-partial).

Get the sample FHIR capability statement

GET /fhir/metadata

The FHIR routes model the synthetic EHR itself, so consent and rate-limit scenario behaviors apply only to the FinchNode record routes (/users/{subject}/records and /patients/{patientId}/records).

Search one resource type across the synthetic scenarios

GET /fhir/{resourceType}

Searches every scenario Bundle. The FHIR routes model the synthetic EHR itself, so consent and rate-limit scenario behaviors apply only to the FinchNode record routes (/users/{subject}/records and /patients/{patientId}/records).

  • resourceType string (required)
  • patient string: A scenario subject: returns that subject's resources of this type from every scenario Bundle that references it. Omit it to return every resource of this type in the baseline-adult Bundle, unfiltered, which also includes resources that reference no patient (such as Organization and Practitioner). Omitting it is therefore not the same as passing patient-demo-001.

Read one sample FHIR resource

GET /fhir/{resourceType}/{resourceId}

Reads a resource from any scenario Bundle; resourceType Bundle with a scenario bundleId returns that whole Bundle. The FHIR routes model the synthetic EHR itself, so consent and rate-limit scenario behaviors apply only to the FinchNode record routes (/users/{subject}/records and /patients/{patientId}/records).

  • resourceType string (required)
  • resourceId string (required)