Production access is free and self-serve with an account. · Synthetic demo · no account needed

FinchNode

Patient-authorized EHR integration

Sandbox API

Simulate sessions and drive synthetic patients with sandbox keys.

Simulate a sandbox Connect session with a scenario

POST /connect/sessions/{sessionId}/simulate

Requires a sandbox key (ck_test_...); a live key (ck_live_...) receives 403 sandbox_only, and a suspended application receives 403 app_suspended. Completes a pending sandbox Connect session of this application with a synthetic patient from a FinchNode scenario, without a hospital sign-in: the patient consents, connects the scenario's source, the import runs, and the session completes with a share receipt and consent.granted, as in production. The response is the session with simulation.state. Poll GET /connect/sessions/{sessionId} until simulation.state is completed or failed; poll simulation.state rather than status, because for the two-source scenarios (multi-source-overlap, source-unavailable) and consent-revoked, status reads completed before the simulation has attached the second source or revoked consent. Repeating the request with the same scenario resumes the simulation rather than starting another. Session scenarios (connect-cancelled, connect-failed) run only in the public demo and return 400 invalid_scenario. The patient grants the session's categories that the scenario's consent covers (consent-partial covers only medications and allergies); when that leaves none, the response is 400 invalid_categories. A session that is no longer pending or has expired, already has a patient, or was simulated with another scenario returns 409 session_not_simulatable. An application holds at most 25 active synthetic patients by default (the deployment sets the limit); each counts until the 7-day purge, and a request over the limit returns 409 sandbox_limit_reached with nothing created. A body field other than scenario returns 400 invalid_request.

  • sessionId string (required)

Apply a sandbox lifecycle event to a synthetic user

POST /sandbox/subjects/{subject}/events

Requires a sandbox key (ck_test_...); a live key (ck_live_...) receives 403 sandbox_only, and a suspended application receives 403 app_suspended. Works only on a synthetic user this application's simulation created; any other subject returns 404 not_found. records.advance moves the source to its next phase and runs its import now (joining an import already running; send it again if that import had already read the source), producing upserts, tombstones where the scenario deletes a record, and records.updated for continuous consent. consent.revoke revokes each active share receipt as the patient (consent.revoked). consent.expire sets each active share receipt's expiry to now; the lifecycle worker marks it expired on its next cycle (consent.expired). source.fail makes the source's next import fail once and runs it now (sync.failed for continuous consent). A type the user's scenario does not list returns 409 control_unsupported. For a two-source user, source narrows the event to one source; a source the user does not have returns 400 invalid_source. An unknown type returns 400 invalid_event_type, a body field other than type and source returns 400 invalid_request, and records.advance or source.fail for a user whose source is not connected yet returns 409 subject_not_connected.

  • subject string (required): Stable within one application and unlinkable across applications.