# Authentication Source: https://docs.connect.fastenhealth.com/api-reference/authentication Documentation for the Fasten Connect API ## Authentication All sensitive API endpoints require authentication using the Public ID & Private Key generated in the Fasten Connect dashboard. This is done using [Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication), where the Public ID is the username and the Private Key is the password. Remember, when generating the Basic Auth header manually, the Public Id and Private Key must be concatenated with a colon `:` and then base64 encoded. The resulting string should be prefixed with `Basic ` and included in the `Authorization` header of the request. For example, if your Public ID is `public_test_123456324234234` and your Private Key is `private_test_9u2orjsd02lk3)i03423`, then the field's value is the Base64 encoding of `public_test_123456324234234:private_test_9u2orjsd02lk3)i03423`. Then the Authorization header field will appear as: ```http theme={null} Authorization: Basic cHVibGljX3Rlc3RfMTIzNDU2MzI0MjM0MjM0OnByaXZhdGVfdGVzdF85dTJvcmpzZDAybGszKWkwMzQyMwo= ``` ```bash cURL theme={null} # The following Curl examples are equivalent. # `-u` is the shorthand for `--user`, and can be used to avoid manually encoding the credentials. curl -u 'public_test_123456324234234':'private_test_9u2orj....sd02lk3)i03423' \ -X POST \ --data '{"org_connection_id":"ebea708d-c5fa-4294-9051-da48ef08c78a"}' \ https://api.connect.fastenhealth.com/v1/bridge/fhir/ehi-export curl -H 'Authorization: Basic cHVibGljX3Rlc3RfMTIzNDU2MzI0MjM0MjM0OnByaXZhdGVfdGVzdF85dTJvcmpzZDAybGszKWkwMzQyMwo=' \ -X POST \ --data '{"org_connection_id":"ebea708d-c5fa-4294-9051-da48ef08c78a"}' \ https://api.connect.fastenhealth.com/v1/bridge/fhir/ehi-export ``` ```go Go theme={null} publicID := "public_test_123456324234234" privateKey := "private_test_9u2orjsd02lk3)i03423" // Concatenate the Public ID and Private Key with a colon authString := publicID + ":" + privateKey // Base64 encode the concatenated string encodedAuth := base64.StdEncoding.EncodeToString([]byte(authString)) // Create the Authorization header value authHeader := "Basic " + encodedAuth // Example HTTP request req, err := http.NewRequest("POST", "https://api.connect.fastenhealth.com/v1/bridge/....", nil) if err != nil { fmt.Println("Error creating request:", err) return } // Add the Authorization header req.Header.Add("Authorization", authHeader) client := &http.Client{} resp, err := client.Do(req) ``` ```javascript JavaScript/Node.js theme={null} const https = require('https'); // Public ID and Private Key const publicID = 'public_test_123456324234234'; const privateKey = 'private_test_9u2orjsd02lk3)i03423'; // Concatenate the Public ID and Private Key with a colon const authString = `${publicID}:${privateKey}`; // Base64 encode the concatenated string const encodedAuth = Buffer.from(authString).toString('base64'); // Create the Authorization header value const authHeader = `Basic ${encodedAuth}`; // Example HTTP request options const options = { hostname: 'api.connect.fastenhealth.com', port: 443, path: '/v1/bridge/....', method: 'POST', headers: { 'Authorization': authHeader, 'Content-Type': 'application/json', }, }; // Send the HTTP request const req = https.request(options, (res) => { console.log(`Status Code: ${res.statusCode}`); }); req.end(); ``` ```python Python theme={null} import requests from requests.auth import HTTPBasicAuth # Public ID and Private Key public_id = "public_test_123456324234234" private_key = "private_test_9u2orjsd02lk3)i03423" # API endpoint url = "https://api.connect.fastenhealth.com/v1/bridge/...." # Make the POST request with Basic Authentication response = requests.post(url, auth=HTTPBasicAuth(public_id, private_key)) ``` ```java Java theme={null} String publicId = "public_test_123456324234234"; String privateKey = "private_test_9u2orjsd02lk3)i03423"; String endpoint = "https://api.connect.fastenhealth.com/v1/bridge/..."; // Concatenate Public ID and Private Key with a colon String authString = publicId + ":" + privateKey; // Base64 encode the concatenated string String encodedAuth = Base64.getEncoder().encodeToString(authString.getBytes()); // Create the Authorization header value String authHeader = "Basic " + encodedAuth; // Create the HTTP connection URL url = new URL(endpoint); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Authorization", authHeader); connection.setRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true); os.flush(); ``` ### Curl Example # Bulk Catalog Export Source: https://docs.connect.fastenhealth.com/api-reference/catalog/export GET /bridge/catalog/export Retrieve download links for the entire Fasten Connect catalog in one request. Call this endpoint with your bridge API credentials (HTTP Basic auth using the `public_id` and `private_key`) whenever you need to hydrate an offline cache of our catalog. Instead of iterating through the `/bridge/catalog` lookup endpoint, this API returns pre-signed URLs for JSON files that contain the entire public catalog: * `brands.json` – Logos, names, TEFCA directory metadata, and other display properties for each brand. * `portals.json` – Portal definitions, including login methods and the brands they belong to. * `endpoints.json` – Technical endpoint configuration, such as FHIR base URLs, TEFCA IAS capability flags, and supported auth flows. The download URLs expire after 60 minutes. Begin downloading the files immediately after requesting them. This API is rate limited and the brand, portal and endpoint data structure is subject to change without notice. **Please contact [support@fastenhealth.com](mailto:support@fastenhealth.com) before use.** ```json theme={null} { "brands.json": "https://fasten-connect-cdn-prod-1234/catalog/2024-06-28/brands.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=60&...", "portals.json": "https://fasten-connect-cdn-prod-1234/catalog/2024-06-28/portals.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=60&...", "endpoints.json": "https://fasten-connect-cdn-prod-1234/catalog/2024-06-28/endpoints.json?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Expires=60&..." } ``` # Get Catalog Entry Source: https://docs.connect.fastenhealth.com/api-reference/catalog/get GET /bridge/catalog Get branding & metadata information associated with healthcare institutions supported by Fasten Connect. `brand_id` OR `portal_id` is required. This is used to display branding information in the Stitch.js popup widget. This API not required, unless you are building a custom widget. **Do not call this endpoint live on every request.** Fasten may occasionally merge or deprecate IDs when the source EHR data changes or deletes records. To avoid broken references and improve performance: - Cache the results returned by this endpoint. - To check for updates, use the `org_connection_id` to call the [status endpoint](/api-reference/organization_connection/get) and retrieve the current `brand_id` and `portal_id`. - Then, use those values to query the catalog GET endpoint and update your cached results accordingly. Following this pattern ensures you always have the latest data without risking failures from deprecated IDs. TEFCA If `tefca_directory_id` and `brand_id` are available, you should retrieve both. `tefca_directory_id` will provide an accurate name for the Healthcare Provider, while the `brand_id` can be used for logos and other branding information. However, if you can only retrieve one, prioritize `tefca_directory_id`. TEFCA Directory IDs are subject to change by the TEFCA governing body and may be deprecated without notice. TEFCA Directory IDs are only cached for 2 weeks, after which they are removed from the catalog. # Brand Logo Image Source: https://docs.connect.fastenhealth.com/api-reference/catalog/logo This endpoint allows you to retrieve the logo image of a healthcare institution. ``` https://cdn.fastenhealth.com/logos/sources/{{brand_id}}.png ``` Replace `{{brand_id}}` with the `brand_id` you received via your Redirect URL query parameters or from the `catalog/search` response. # Search Catalog Brands Source: https://docs.connect.fastenhealth.com/api-reference/catalog/search POST /bridge/catalog/search Search for healthcare institutions supported by Fasten Connect. This is used to display branding information in the Stitch.js popup widget. This API not required, unless you are building a custom widget. This API is rate limited and is subject to change. **Please contact support@fastenhealth.com before use.** # Bulk Records Request Source: https://docs.connect.fastenhealth.com/api-reference/ehi_export/create POST /bridge/fhir/ehi-export This endpoint is idempotent. If a request with the same `org_connection_id` has already been registered, it will return the existing request. This endpoint will register an bulk medical record export request with the Fasten Connect API for the provided `org_connection_id` (Patient id) This functionality is similar in design to the HL7 [EHI Export](https://build.fhir.org/ig/argonautproject/ehi-api/ehi-export.html) specification. However it is designed to be a unified API for all EHRs, as many EHRs do not support the HL7 EHI Export specification. This endpoint requires an API public id & private key for authentication. Do not expose these keys in the browser. This task will run asynchronously and may take some time to complete. You can check the status of the task using the [Get Request Status](/api-reference/ehi_export/get) endpoint. On completion a webhook will be sent to your `webhook_url` with metadata about the task, and a `download_link` to download the results. # Download Bulk Records Source: https://docs.connect.fastenhealth.com/api-reference/ehi_export/download GET /bridge/fhir/ehi-export/{taskId}/download/{fileId} When provided with a `taskId` and `fileId`, this endpoint will return a signed URL to download the file in the `Location` header. Your http client should be able to follow the redirect and download the file. This signed URL will expire after a short period of time, so you should download the file immediately. If you are unable to do so, you can request a new signed URL by calling this endpoint again. This endpoint requires an API public id & private key for authentication. Do not expose these keys in the browser. # Get Request Status Source: https://docs.connect.fastenhealth.com/api-reference/ehi_export/get GET /bridge/fhir/ehi-export/{taskId} Check the status of the EHI Export Task. This is a polling endpoint intended for informational purposes only. It does not return the actual medical records or a `download_links` array. Instead, the `download_links` will be sent asynchronously to a customer-defined [webhook](/webhooks/introduction). We use [webhooks](/webhooks/introduction) to deliver the `download_links` because they are more reliable and scalable for background job completion. Polling this endpoint repeatedly introduces unnecessary load and latency for your system and ours. Webhooks enable instant delivery of results the moment they're ready. **If your [webhook](/webhooks/introduction) is not configured, you will not be able to retrieve the exported EHI.** This endpoint requires an API public id & private key for authentication. Do not expose these keys in the browser. # Introduction Source: https://docs.connect.fastenhealth.com/api-reference/introduction Documentation for the Fasten Connect API ## Welcome The Fasten Connect API is organized around [REST](http://en.wikipedia.org/wiki/Representational_State_Transfer). Our API has predictable resource-oriented URLs, using JSON-encoded request & responses, and uses standard HTTP response codes, authentication, and verbs. You can use the Fasten Connect API in test mode, which doesn’t affect your live data and only allows interactions with synthetic patient data from healthcare institution sandboxes. The API key you use to authenticate the request determines whether the request is live mode or test mode. ### Fasten Connect API Modes The Fasten Connect API has two modes: `test` and `live`. Test mode is used for development and testing, while live mode is used for production. Test mode secret keys have the prefix `private_test_` and live mode secret keys have the prefix `private_live_`. | API Key Prefix | Description | | --------------- | -------------------------------------------------------------------------------------------------- | | `public_test_` | Test mode client-side key that uniquely identifies your app | | `private_test_` | Test mode server-side key allows you to make authenticated requests.
**Must be kept secret** |
| API Key Prefix | Description | | --------------- | -------------------------------------------------------------------------------------------------- | | `public_live_` | Live mode client-side key that uniquely identifies your app | | `private_live_` | Live mode server-side key allows you to make authenticated requests.
**Must be kept secret** |
# Get Organization Source: https://docs.connect.fastenhealth.com/api-reference/organization/get GET /bridge/org Get information about your organization. This is used to display branding information in the Stitch.js popup widget. # Get Organization Connection Source: https://docs.connect.fastenhealth.com/api-reference/organization_connection/get GET /bridge/org_connection/{orgConnectionId} Check the status of an existing organization connection. This endpoint requires an API public id & private key for authentication. Do not expose these keys in the browser. # Initiate Connection Source: https://docs.connect.fastenhealth.com/api-reference/registration/connect GET /bridge/connect This endpoint will generate a state value and redirect the user to their healthcare provider Patient Portal to authenticate with the healthcare provider's EHR. On completion, Fasten Connect will redirect the user back to your redirect_uri with an `org_connection_id` and `endpoint_id` query parameter. If an error occurred during the authentication process, Fasten Connect will redirect the user back with an `error` and `error_description` query parameter. If you have configured more than one Redirect URL in the Fasten Connect Portal, you **MUST** include the `redirect_uri` query parameter in the request. This is done automatically by the [Stitch SDK](stitch/v4/introduction) widget. In `test` mode, you can use the following credentials to test the Fasten Stitch component: | Source | Credentials / Sandbox Status | Link | | ---------------------------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | AdvancedMD | Username:
Password: | | | Aetna | Username: `VTETestUser01`
Password: `FHIRdemo2020` | [test accounts](https://developerportal.aetna.com/sandbox_v2_test_member_logins_and_test_data_v2.1.xlsx) | | AllScripts | Username:
Password: | | | Anthem | Username: `HOSPatient`
Password: `HOSPatient2023` | | | AthenaHealth | Username: `phrtest_preview@mailinator.com`
Password: `Password1` | [test accounts](https://docs.athenahealth.com/api/guides/onboarding-overview) | | CareEvolution | Username: `CEPatient`
Password: `CEPatient2018` | [test accounts](https://fhir.careevolution.com/TestPatientAccounts.html) | | Cerner | Username: `nancysmart`
Password: `Cerner01` | [test accounts](https://docs.google.com/document/d/10RnVyF1etl_17pyCyK96tyhUWRbrTyEcqpwzW-Z-Ybs/edit) | | Cigna | Username: `syntheticuser05`
Password: `5ynthU5er5` | [test accounts](https://developer.cigna.com/service-apis/patient-access/sandbox#How-to-Use-the-Sandbox-Sandbox-Test-Users) | | DynamicHealthIT | Username:
Password: | | | eClinicalWorks/Healow | Username: `AdultFemaleFHIR`
Password: `e@CWFHIR1` | [test accounts](https://connect4.healow.com/apps/jsp/dev/r4/fhirClinicalDocumentation.jsp#SandboxTestingGuidelines) | | Epic | Username: `fhircamila`
Password: `epicepic1` | [test accounts](https://fhir.epic.com/Documentation?docId=testpatients) | | Flatiron/OncoEMR | Username:
Password: | | | HealthIT | Username: `demouser`
Password: `Demouser1!` | [test accounts](https://fhirsandbox.healthit.gov/secure/r4/view/userlogin.html) | | Humana | Username: `HUser00001`
Password: `PW00001!` | | | Kaiser | Username: `Pvaluser1`
Password: `V@lidation1` | | | Logica | Username:
Password: | | | MaximEyes | Username:
Password: | | | Medhost | Username:
Password: | | | Medicare | Username: `BBUser00000`
Password: `PW00000!` | [test accounts](https://bluebutton.cms.gov/developers/#developer-guidelines) | | Meditech | Username:
Password: | | | Netsmart | Username:
Password: | | | NextGen | Username: `patientapitest`
Password: `Password1!` | [test accounts](https://www.nextgen.com/-/media/files/api/nge-patient-api-auth-guide.pdf) | | PracticeFusion/PatientFusion | Username:
Password: | | | VA Health | Provider: ID.me
Username: `va.api.user+101-2024@gmail.com`
Password: `Password12345!!!` | [test accounts](https://developer.va.gov/explore/api/patient-health/test-users/3617/7058f75892b845dbbd3f371703cc066f398c336a87bb51d73128f1bac24e3105) |
# Reconnect existing Connection Source: https://docs.connect.fastenhealth.com/api-reference/registration/reconnect GET /bridge/reconnect This endpoint is used to reconnect an existing patient authorization with their healthcare provider's Patient Portal. It generates a state value and redirects the user to the Patient Portal for re-authentication with the provider's EHR system. This endpoint is only required if the existing connection id has expired or been revoked. Upon successful completion, Fasten Connect will redirect the user back to the specified `redirect_uri` with the `org_connection_id` and `endpoint_id` query parameters. If an error occurs during the re-authentication process, the user will be redirected back with `error` and `error_description` query parameters providing details about the failure. If multiple Redirect URLs are configured in the Fasten Connect Portal, you **MUST** include the `redirect_uri` query parameter in the request. This is automatically handled by the [Stitch SDK](stitch/v4/introduction) widget. TEFCA This endpoint CANNOT be used for TEFCA connections. TEFCA connections must be reconnected via the Stitch.js widget. In `test` mode, you can use the following credentials to test the Fasten Stitch component: | Source | Credentials / Sandbox Status | Link | | ---------------------------- | -------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | AdvancedMD | Username:
Password: | | | Aetna | Username: `VTETestUser01`
Password: `FHIRdemo2020` | [test accounts](https://developerportal.aetna.com/sandbox_v2_test_member_logins_and_test_data_v2.1.xlsx) | | AllScripts | Username:
Password: | | | Anthem | Username: `HOSPatient`
Password: `HOSPatient2023` | | | AthenaHealth | Username: `phrtest_preview@mailinator.com`
Password: `Password1` | [test accounts](https://docs.athenahealth.com/api/guides/onboarding-overview) | | CareEvolution | Username: `CEPatient`
Password: `CEPatient2018` | [test accounts](https://fhir.careevolution.com/TestPatientAccounts.html) | | Cerner | Username: `nancysmart`
Password: `Cerner01` | [test accounts](https://docs.google.com/document/d/10RnVyF1etl_17pyCyK96tyhUWRbrTyEcqpwzW-Z-Ybs/edit) | | Cigna | Username: `syntheticuser05`
Password: `5ynthU5er5` | [test accounts](https://developer.cigna.com/service-apis/patient-access/sandbox#How-to-Use-the-Sandbox-Sandbox-Test-Users) | | DynamicHealthIT | Username:
Password: | | | eClinicalWorks/Healow | Username: `AdultFemaleFHIR`
Password: `e@CWFHIR1` | [test accounts](https://connect4.healow.com/apps/jsp/dev/r4/fhirClinicalDocumentation.jsp#SandboxTestingGuidelines) | | Epic | Username: `fhircamila`
Password: `epicepic1` | [test accounts](https://fhir.epic.com/Documentation?docId=testpatients) | | Flatiron/OncoEMR | Username:
Password: | | | HealthIT | Username: `demouser`
Password: `Demouser1!` | [test accounts](https://fhirsandbox.healthit.gov/secure/r4/view/userlogin.html) | | Humana | Username: `HUser00001`
Password: `PW00001!` | | | Kaiser | Username: `Pvaluser1`
Password: `V@lidation1` | | | Logica | Username:
Password: | | | MaximEyes | Username:
Password: | | | Medhost | Username:
Password: | | | Medicare | Username: `BBUser00000`
Password: `PW00000!` | [test accounts](https://bluebutton.cms.gov/developers/#developer-guidelines) | | Meditech | Username:
Password: | | | Netsmart | Username:
Password: | | | NextGen | Username: `patientapitest`
Password: `Password1!` | [test accounts](https://www.nextgen.com/-/media/files/api/nge-patient-api-auth-guide.pdf) | | PracticeFusion/PatientFusion | Username:
Password: | | | VA Health | Provider: ID.me
Username: `va.api.user+101-2024@gmail.com`
Password: `Password12345!!!` | [test accounts](https://developer.va.gov/explore/api/patient-health/test-users/3617/7058f75892b845dbbd3f371703cc066f398c336a87bb51d73128f1bac24e3105) |
# Reset Synthetic Patient Source: https://docs.connect.fastenhealth.com/api-reference/revoke/tefca_revoke POST /bridge/vault_connection/revoke Run this command to reset a TEFCA synthetic test patient's connections. TEFCA This helper endpoint is only available while using `test` API credentials and is designed for clearing your TEFCA IAS sandbox before running another end-to-end scenario. Authenticate with HTTP Basic auth using your organization public id and private key that are configured for **Test API Mode**. Requests made with live credentials will be rejected. The request body **must** include an `email` value for one of the test synthetic patients documented in the [TEFCA IAS Developer Guide](/guides/tefca-ias#example-test-patients). All current connections for that synthetic patient are revoked so you can start a fresh flow. # Support Request Source: https://docs.connect.fastenhealth.com/api-reference/support/request POST /support/request File a support ticket with the Fasten team using our API. This endpoint is in BETA and is not recommended for production use. We reserve the right to remove this endpoint at any time. This API is rate limited and is subject to change. **Please contact support@fastenhealth.com before use.** # Changelog Source: https://docs.connect.fastenhealth.com/changelog Learn about the latest updates to the Fasten Connect service. ### Added * Portal: Domain migrated from `portal.connect.fastenhealth.com` to `portal.fastenhealth.com`. We recommend updating any bookmarks & password managers to use the new domain. * Portal: Portal UI has been completely updated to improve usability and accessibility. The new design includes a modern look and feel, improved navigation, and better support for mobile devices. * Portal: Developer Portal now supports multiple organizations per account. This allows developers to manage multiple projects or clients from a single account. * Portal: Added support for 2FA (Two-Factor Authentication) and other security enhancements. ### Added * Docs: Expanded the test-data guide with Fasten's official FooClinic sandbox, including credentials, resource counts, and persona summaries for 16 synthetic patients. The guide also references external FHIR, clinical research, CCDA, and IPS datasets for broader pipeline testing. ### Added * Stitch: Added an optional `email` attribute to the v4 Stitch SDKs. Customers can use it to prepopulate the patient's email address in TEFCA mode and support request/health system request forms. ### Added * Docs/TEFCA: Clarified that TEFCA IAS mode requires cookies and that `localhost`, private browsing, or incognito testing can trigger browser cookie restrictions. ### Added * Catalog/API: Added support for Medent, Medplum sandbox testing, and NextGen Office. ### Added * TEFCA: Identity verification and TEFCA demographic matching now include historical patient addresses when available, improving matching for patients who have moved or previously received care at another address. ### Added * TEFCA/Catalog: TEFCA record locator results now use Network Directory entries to resolve facilities to the correct catalog brand, portal, and endpoint metadata. This improves consistency for `tefca_directory_id` values and downstream webhook/catalog lookups. ### Added * Identity/API: Added support for customer-managed identity verification flows, including OpenID Connect discovery, JWKS, pushed authorization requests and consent decisions. * Identity/Stitch: Bring Your Own CSP flows now launch the Fasten widget with `request_uri`, use a simplified scope and use a consent form design aligned with the embedded widget. ### Added * Stitch/Docs: Added Beta documentation for the React SDK, including installation, basic usage, TEFCA mode, component props, event handling, refs, and styling guidance. ### Added * API/TEFCA: Documented the new `fixtures.tefca_ccda` option for `POST /bridge/fhir/ehi-export`, which lets API-mode TEFCA exports return a specific synthetic CCDA response during testing. Supported fixture values are `myra-jones.xml` and `lennie-connell.xml`. * Docs/Webhooks & Events/TEFCA: Updated the TEFCA IAS guide and `patient.ehi_export_failed` failure reason docs to explain that `fixtures` can be used as a workaround for the common `tefca_no_documents_found` error in `test` mode. ### Added * Webhooks & Events/TEFCA: Added `tefca_no_documents_found` as a documented `failure_reason` for `patient.ehi_export_failed`. This error is only returned when TEFCA mode is enabled and indicates that the health system did not return any records for the individual. It is frequently seen in `test` mode, but is uncommon in `live` mode. ### Added * Catalog/API: Added the `GET /bridge/catalog/export` endpoint so customers can download pre-signed URLs for JSON files covering every brand, portal, and endpoint when hydrating offline catalog caches. ### Added * API/TEFCA: Documented the helper endpoint `POST /bridge/vault_connection/revoke`, detailing how to clear TEFCA IAS synthetic patient connections with test credentials before running another scenario. ### Added * Stitch: v4 release of the Stitch.js widget is now available for use. This version includes a number of bug fixes and improvements. * Stitch: React Native SDK is now available. This allows you to integrate Fasten Connect into your React Native applications, providing a seamless experience for mobile users. ### Added * Stitch/Webhooks: Documented the `tefca_directory_id` field, which is included for TEFCA IAS connections. This identifier can be used to provide branding information about the health system selected by the patient. ### Added * TEFCA/Docs: TEFCA IAS is now Generally Available (GA). See our [new guide](/guides/tefca-ias) explaining how we keep the IAS flow simple for developers. * Stitch/Webhooks: Documented TEFCA-specific behavior for Stitch events, including when identifiers may be omitted while using TEFCA mode. * Stitch/Webhooks: Added new `consent_expires_at` field which can be used to determine when a patient's consent will expire. Supported in both TEFCA and Catalog Search modes. * Webhooks & Events: `patient.connection_success` and `patient.authorization_revoked` are no longer beta-only * Stitch: Clarified the reconnect flow (`reconnect-org-connection-id` skips search, emits the reconnection identifiers) ### Added * Docs: Added Display & Component Library guide with fhir-react and fhirpath.js options for rendering FHIR data. ### Added * Portal: When registering, domains are now claimed by the first organization created by an organization. Other developers must be invited to the associated team before they can login to the developer Portal. ### Added * Stitch: Patients can now search for their healthcare institution using a partial match, improving the search experience and making it easier to find institutions with incomplete or approximate names. ### Added * Portal: Accounts now require a corporate domain. Email addresses from providers like Gmail, Yahoo, etc., are no longer supported. ### Added * Added documentation for `Catalog Editor` tool that allows Fasten customers to submit corrections to the provider catalog. ### Added * Webhooks & Events: customers can now subscribe to the `patient.request_health_system` and `patient.request_support` webhook events. These events are emitted when a patient requests a new health system to be added to the Fasten Connect catalog, or when they request support during the connection process. * Webhooks & Events: added `scope_patient_missing` failure\_reason to the `patient.ehi_export_failed` event. This indicates that the patient did not consent to share a required scope during the Consent flow. ### Added * Stitch: documentation updated to reference the `widget.config_error` event. This event is emitted when the Stitch.js widget is misconfigured (e.g. invalid public key, missing required parameters, etc). ### Added * API: documentation updated to reference the new `download_links` parameter. Returned by EHI-Export `patient.ehi_export_success` event. ### Deprecated * API: the `download_link` provided by `patient.ehi_export_success` webhook event is now deprecated (will be removed in Jun, 2026), instead implementors should use the `download_links` array parameter when downloading patient records using the EHI-Export Download endpoint. ### Added * Portal: Webhook simulator enhancements and schema alignment. The simulator now closely mirrors the actual webhook payload structure, making it easier to test and debug webhook integrations. * Portal: Better email address validation error messages. ### Added * Guides: Added Webhook simulator and debugging guide to help users test and troubleshoot webhook integrations. ### Added * Stitch: Added instructions explaining how to customize the "Share Records" text on the Fasten Stitch button. ### Added * API: Added dedicated `bridge/reconnect` endpoint to simplify the process of reconnecting (reauthorizing) an existing organization connection. ### Added * Stitch: Added `search-query` property, which allows you to pre-populate the search box with a specific query. This can help users quickly find their health system without having to type it in manually. * Stitch: Added `show-splash` property, which allows you to show or hide the splash screen that appears before the search popup. This can help build trust with users by displaying your own branding and introducing the Fasten Connect service. ### Added * API: Added a large number of sanitized error types. This will help implementors to better understand why a request or data collection failed, and take appropriate action. Errors that cannot be adequately sanitized will return a generic 500 error code with no meaningful message. ### Added * API: Org Connection Status endpoint will now return `scope` field, which indicates the resource types that were consented by the patient. This feature is currently in beta. ### Added * Stitch: Added visible error details (type and description) when connection fails. Patients can now easily understand why the connection failed and submit a support request if needed. ### Added * Portal: Added the ability to invite other administrators when creating a new organization. * Webhooks: Added support for `patient.authorization_revoked` webhook event. ### Added * Portal: Added information about current failure count to the webhook endpoint details page. This will help users understand the current status of their webhook endpoints and take necessary actions if needed. ### Added * Catalog: Added the Department of Veterans Affairs (VA) to the catalog, allowing users to connect to their VA health records. * Webhooks & Events: Improvements to ensure that webhook events are delivered even in cases where workers fail due to timeouts or memory issues. ### Added * Stitch: Added `results.total` field to optional `search.query` event so customers can determine the total number of results returned by the search query. ### Added * Webhooks & Events: You can now customize which webhook event types are subscribed to when creating or editing a webhook. Optional events can be selected or deselected freely, while required events remain enforced and cannot be removed. * Webhooks & Events: The webhook editor UI has been improved. The **Update** button will only enable when changes are detected to the endpoint URL, webhook status, or selected event types. ### Added * Catalog: Search enhancements, which should result in more accurate search results. ### Added * Stitch: Added support for `event-types` query parameter in the Stitch.js widget. This allows you to opt-in to receive specific events in the `eventBus` event data, such as `search.query` ### Added * Portal: When creating new credentials or webhooks, a notification email will be sent to all email addresses associated with the organization. * Catalog: Anthem sandbox is now available for testing purposes. * Webhooks & Events: Fixed an issue where Anthem EHR data collection would fail with an SSL/TLS error. ### Added * Webhooks: Added a `stats` key to the `patient.ehi_export_success` webhook event payload. ### Added * Stitch v1/v3: Fixed issue with Kaiser Permanente where the popup window will close immediately after opening, preventing the user from completing the authentication process. * API: Fixed an issue in `redirect` mode, when using a [mobile deep link](https://en.wikipedia.org/wiki/Mobile_deep_linking), Kaiser & Humana would fail to return back to the application after authentication. * API: Performance enhancement for health systems using Cerner (which should result in a 4x improvement in data collection & webhook delivery time). ### Added * Stitch v3: Clarify that `widget.complete` event should be used in most cases, rather than `patient.connection_success` ### Added * Webhooks: Added support for `patient.connection_success` webhook event. ### Added * Quickstart: details for parsing the `eventBus` event data (using `JSON.parse()`) in the Stitch v3 example. ### Added * Stitch v3: Fixed a bug where some connection failures incorrectly returned an `unknown_error_during_connect` error message. * Quickstart: Stitch v3 is now the recommended version for integrating Fasten Connect into your application. ### Added * Catalog: Added new aliases and metadata for healthcare institutions & health systems using AllScripts & Epic ### Added * Stitch v3: All CSS styles are now namespaced with a `fhtw-` prefix. This means that any CSS styles provided by Fasten will not affect other elements on your page. * Stitch v3: Bug: `connection_status` will always be present in the `widget.complete` event data. * Stitch v3: Bug: `reconnect_org_connection_id` was not working correctly. This has been fixed. ### Added * Webhooks: Added support for a `failure_reason` in the event payload. ### Added * API: Added support for multiple `redirect_uris` in the Developer Portal. If you decide to provide multiple `redirect-uris`, you **MUST** populate the `redirect-uri` query string parameter when calling the [/connect](/api-reference/registration/connect) API endpoint.. ### Added * Catalog, API: updated catalog search engine to boost exact matches (on name and & aliases). This will increase search accuracy. ### Added * API: fixed catalog search pagination. `searchAfter` no longer needs to be converted to string array. `sort` values can be passed to the API as-is (in mixed array of numbers and strings). * API: adding status badges to show the status of various EHR sandbox accounts we provide for testing purposes, in `test` mode. * Docs: Updated documentation to include a status badge for the sandbox accounts. ### Added * Stitch: documentation related to "popup-timeout" parameter. * Stitch: Fixed issue where duplicate events generated when multiple Stitch instances are used on the same page. * API: Fixed issue where warnings emails were not correctly sent when a webhook is consistently failing, and will be disabled. ### Added * API: documentation updated to reference the new `request_id` parameter sent to the Redirect URL. Provides a correlation ID that should be sent with ticket requests to the Fasten Connect support team. * API: Added `support/request` endpoint to create a support ticket via the API. * "Webhooks & Events": Added new `failure_reason` parameter sent with failed webhook events. Provides a sanitized reason for why the ehi-export operation failed, can be used for filtering/notifying patient to reauthenticate. ### Added * Stitch: v3 release of the Stitch.js widget is now available for use. This version includes a number of bug fixes and improvements. ### Added * Portal: Added some flexibility in the login system, allowing for clock skew between the client and server. ### Added * API: Introduced ID Verification Provider - [CLEAR](https://www.clearme.com/) ### Added * Catalog: NPI Numbers are now included in the `GET /v1/bridge/catalog` response. ### Added * Portal: Added a note field for API credentials, helping users to identify the purpose of each credential. ### Added * API: Automatically disable webhooks that are misbehaved (e.g. 404 errors). This is to prevent spam and abuse of the webhook system. ### Added * API: documentation updated to reference the new `task_id` parameter. Used for both EHI-Export Status and Download endpoints. ### Deprecated * API: the `org_connection_id` provided by webhook events is now deprecated (will be removed in Jan, 2024), instead implementors should use the `task_id` parameter when calling the EHI-Export Status and Download endpoints. ### Added * Stitch: documentation related to redirect query string parameters on error. This includes the new `request_id` parameter. ### Added * Stitch: Added the ability to provide an opaque `external_state` which is passed through to the Redirect URL on successful authentication. ### Added * Webhooks & Events: Updated documentation * Webhooks & Events: Added new Webhooks system, with support for retries, delivery logs & additional events. * Webhooks & Events: Compliant with [standard-webhooks](https://github.com/standard-webhooks/standard-webhooks/blob/main/spec/standard-webhooks.md) spec ### Added * Portal: Added the ability to delete API Credentials ### Added * Stitch: Fixed `reconnect_org_connection_id` - when clicked, should automatically redirect patient to the Health System's login page. ### Added * Stitch: Fixed swapped descriptions for `platform_type` and `connection_status` * Quickstart: Clarified that Webhooks are `POST` requests ### Added * Stitch: Using "Health System" term consistently in the UI * Stitch: Added a warning message before redirecting to the Health System's login page ### Added * Stitch: Platform Type (EHR system identifier) is now passed as a query parameter to the Redirect URL on successful authentication. ### Added * Stitch: Added the ability to request missing Health Systems. Fixed Pagination of Brands * Stitch: Added the ability to provide an opaque `external_id` which is passed through to the Redirect URL on successful authentication. * Stitch: Added the ability to show and hide the Search popup programmatically using the `show()` and `hide()` methods. ### Added * Catalog Search: Added the ability to search through all available healthcare institutions supported by Fasten Connect `POST /v1/bridge/catalog/search` * Catalog Lookup: Added the ability to lookup a specific Fasten Connect brand or portal by it's id `GET /v1/bridge/catalog` ### Added * Added the ability to authenticate patients via a popup using the Stitch.js SDK. `connect-mode="popup"` # FAQs Source: https://docs.connect.fastenhealth.com/faqs Frequently Asked Questions ## Onboarding And Environment Setup ### What is the difference between test mode and live mode? Test mode only connects to sandbox environments and synthetic or vendor-provided test data. Live mode uses live credentials and production configuration. The Developer Portal toggle switches which mode's credentials, webhooks, and logs you are viewing; it does not disable your account or permanently change your setup. ### Do test and live mode use separate API keys and webhooks? Yes. Generate separate credentials and configure separate webhooks for test and live mode. Test credentials and test webhooks will not work in production (live mode). ### Can we reuse the same webhook URL in test and live mode? No. Webhook URLs must be unique for your organization. Test and live webhooks have separate signing secrets, so use distinct URLs per environment. ## Support ### What identifiers should we include when requesting support? Include any relevant identifiers so Fasten engineers can quickly locate the affected organization, connection, task, or request: * `organization_id`: Your customer identifier. This helps us debug billing, payment, and webhook-related issues. * `org_connection_id`: The patient consent or authorization identifier used to access a patient's records. This helps us debug patient consent and data collection errors. * `task_id`: The worker task identifier generated when calling `/ehi-export`. This is only useful for data collection errors, especially when investigating a `patient.ehi_export_success` or `patient.ehi_export_failed` webhook event. * `request_id`: The HTTP client correlation identifier, also known as a trace ID. This helps us debug specific API endpoint errors, including `4xx` or `5xx` responses, and can be useful for patient consent errors. ## Patient Connections ### Does a patient need to log in to every health system individually? For portal-based SMART-on-FHIR connections, yes. The patient authorizes each health system or portal separately using that system's login flow. For TEFCA mode, patients verify identity through a supported Credential Service Provider, such as CLEAR or ID.me, but TEFCA coverage depends on participating networks and source availability. Some workflows may still require portal login. ### How should we associate a Fasten connection with our user? Pass a stable, server-generated user id, session id or equivalent reference as `external_id` when starting the flow. ### How do we know a connection succeeded? Listen for the connection success client event and store the `org_connection_id`. This ID is the durable reference you will use for later export and status workflows. We strongly recommend that you also register a webhook and listen for the `patient.connection_success` event as a backup or for auditing purposes. ### Why do some `patient.connection_success` records have `consent_expires_at` while others do not? The `consent_expires_at` value is only available when the connected EHR can tell Fasten exactly when the patient's consent expires. Historically, EHR vendors were not required to provide an introspection endpoint, so there was no reliable way to determine the exact consent expiration time. This became mandatory under HTI-2, which went into effect in January 2026. However, not every EHR has been certified against the updated requirements, and not every health system has upgraded to the latest version of its EHR software. When an EHR cannot provide the expiration timestamp, Fasten omits `consent_expires_at`. In those cases, listen for the [`patient.authorization_revoked`](/webhooks/events#patient-authorization-revoked) webhook event. ## EHI Export ### Why does Fasten use JSONL files instead of FHIR Bundles? Fasten supports exporting data in FHIR Bundle format, but we recommend using JSONL (also known as NDJSON) for several reasons: 1. **Reduced Redundancy**: FHIR Bundles often include redundant data structures. A Fasten-generated Bundle wrapper doesn’t provide any additional information compared to JSONL. 2. **Industry Standard for Large Exports**: JSONL is widely used in the HL7 community for large FHIR exports, including bulk/population EHI export endpoints. 3. **Streamlined Processing**: JSONL files are ideal for use with streaming JSON processors, which we recommend due to the variability in export sizes. Using a FHIR Bundle wrapper would make streaming processing either impossible or significantly more complex, depending on the programming language. While we can provide FHIR Bundles if needed, JSONL is the default format because it's more efficient and better suited for most use cases. ### Where do we get failure details? Use the `patient.ehi_export_failed` webhook. It contains the `failure_reason` and other context. ### How should I handle a `scope_patient_missing` error? This error occurs when a patient deselects the **Demographics** permission during the consent process. Without this permission, Fasten cannot consistently access the FHIR Patient resource, which contains the patient ID needed to retrieve and filter other health records—even if the patient has approved access to those records. Ask the patient to: 1. Restart the consent flow (by sending them to the [/api-reference/registration/reconnect](/api-reference/registration/reconnect) endpoint or your own reauthorization flow). 2. Make sure the **Demographics** permission is enabled during the consent process. Patients may still choose which other record types to share, but Demographics must remain enabled for Fasten to retrieve their records successfully. Because consent behavior varies among EHR systems, customers must currently handle this error and guide the patient through reauthorization. Fasten is exploring ways to handle this scenario more automatically in the future. ### Do we need to poll the export status endpoint? Prefer webhook-driven processing. Polling can be useful as a fallback, but webhooks are the primary path for completion and failure events. ## Webhooks ### Why did we receive duplicate webhooks? Webhook systems are at-least-once delivery systems. Retries, network failures, and downstream acknowledgement timing can produce duplicate events with identical payload bodies or task IDs. Make webhook handlers idempotent. ### How many times are webhook events retried? Fasten webhook delivery retries events with exponential backoff -- up to four retries over roughly the next 24 hours. ## Catalog Search And Provider Matching ### What should we do when a provider is missing from search? Send support: * Provider or facility name. * Provider Website URL. * Patient Portal URL (if available). * Location, city, and state. * Any DBA or alternate names. ### Can Fasten give an ETA for upstream EHR fixes? Often no. EHR/vendor issues can be opaque and depend on that vendor's triage process. Fasten can file tickets, provide evidence, and follow up, but source-side timelines are not always predictable. ## Sandbox And Test Data ### Is sandbox data representative of production? Not always. Many EHR and payer sandboxes contain synthetic, incomplete, stale, huge, or malformed data. Some are heavily rate limited. Use sandbox data for integration mechanics, but validate product assumptions with live or more realistic datasets when possible. See our [Test Data Guide](/guides/test-data) for more details. ### Can the same sandbox patient exist across multiple providers or payers? Usually no. Sandboxes are generally isolated by EHR or payer and are not coordinated with each other. ## TEFCA ### Does TEFCA replace portal login? TEFCA can reduce reliance on individual portal logins, but it does not eliminate every portal-based workflow. Network coverage, QHIN behavior, identity proofing, and source participation all affect whether records are available through TEFCA. ### Why am I being asked to sign in to an Epic health system after completing TEFCA identity proofing? Some Epic organizations currently require a patient to sign in to that organization's Epic portal as part of their TEFCA workflow. This is a limitation of Epic's current TEFCA implementation, not a failure of CLEAR or ID.me identity proofing. Epic is developing federated identity support intended to let a patient sign in once and reuse that sign-in across Epic organizations (see [EpicID/MyChart Central](https://www.epic.com/software/mychart-central/)), but it is not yet available. Until then, patients may need the login credentials for each Epic organization that requests them. ### Why isn't an expected health system appearing or returning records in TEFCA? * First, confirm that the specific health system participates in TEFCA by searching the [TEFCA Map](https://rce.sequoiaproject.org/tefca-map-search-offline/). * Second, confirm that the patient's demographics match exactly with the data that has been verified by CLEAR or ID.me. See "Why do CLEAR and ID.me return different TEFCA results for the same person?" FAQ for more details. If the organization participates & demographics are an exact match but a provider is still missing or returns no records, contact support with the health system name and the affected `request_id` or connection ID so we can investigate the request. ### Why do CLEAR and ID.me return different TEFCA results for the same person? TEFCA uses the verified patient demographics—such as name, date of birth, and address—to match the patient against records held by participating health systems. Differences in the demographics provided or verified by CLEAR and ID.me can lead to different matches and results. Compare the name, date of birth, address, and other identity details in each flow with the information on file at the health system. A mismatch can prevent records from being returned. Learn more about demographics matching: [TEFCA IAS - Deep Dive into Patient Matching & RLS Responses](https://blog.fastenhealth.com/tefca-patient-matching-rls) ### Which identity providers are supported? Fasten has supported CLEAR and ID.me for identity proofing. [BYO Identity](/identity-proofing/bring-your-own-identity) workflows may be available for eligible customers, but they require setup and confirmation. ### Why does TEFCA mode fail on localhost or in private browsing? TEFCA mode requires cookies. When you host your app on `localhost`, browser security sandboxing can restrict cookies and prevent the TEFCA flow from completing. Similar cookie restrictions can occur in private browsing or incognito mode. ### Do TEFCA IAS authorizations expire, and how can I tell when a connection ends? TEFCA IAS authorizations do not have a standard expiration period. Consequently, `consent_expires_at` is omitted for TEFCA connections; this is expected. The connection remains authorized until the patient revokes consent or Fasten determines that the authorization is no longer valid. Enable the [`patient.authorization_revoked`](/webhooks/events#patient-authorization-revoked) webhook to receive notification when this occurs. This webhook is not enabled by default. TEFCA requires IAS providers to support consent revocation but does not prescribe a fixed authorization lifetime. [TEFCA IAS Provider Requirements](https://rce.sequoiaproject.org/wp-content/uploads/2026/01/SOP-IAS-Provider-Requirements_v2.1_508.pdf) This lack of guaranteed expiration is a known limitation of TEFCA, and is something they are actively working to address in future versions of the specification. ## Legal and Regulatory Compliance ### Is Fasten at risk of being shut down like other platforms that allow access to medical records for non-clinical use? No, Fasten operates under a completely different legal framework compared to platforms like Particle Health, Health Gorilla and Metriport which act as on-ramps to the national health information exchanges (HIEs). Here’s why Fasten is fundamentally different: 1. **Patient Access Rights**: Fasten leverages patient access to their own medical information, a right established under HIPAA and reinforced by the Cures Act Final Rule. This ensures patients can access and share their records electronically with any app or platform they choose. 2. **Patient Consent**: The process is built around patient consent. Patients log in via their provider’s patient portal and specify exactly which records they want to share. 3. **No HIE Dependency**: Unlike HIE on-ramp platforms, Fasten does not connect to HIEs or rely on their networks. HIEs operate as walled gardens requiring HIPAA compliance and specific clinical relationships, which has led to issues like the Particle Health - Epic lawsuit. 4. **Information Blocking Protections**: Blocking access to patient access APIs would constitute information blocking, which is strongly opposed by the ONC (now ASTP). These APIs are new (introduced in December 2022) and are designed to ensure patients have uninterrupted access to their data. Fasten’s approach is fully aligned with patient rights and regulatory requirements, making it a secure and compliant platform for accessing medical records. # Caching Strategy Source: https://docs.connect.fastenhealth.com/guides/caching-strategy Understand how Fasten Connect caches retrieved records and how the cache lifecycle works. ## Overview Fasten Connect automatically caches the records it retrieves on your behalf. During the cache lifetime the platform serves subsequent requests for the same `connection_id` directly from the cache, preventing redundant network calls to the source system and improving response times for you and your users. ## Cache lifetime * The default cache duration is 24 hours from the moment the record is first retrieved. * While the cache entry is active, repeat requests for that record are fulfilled from the cached payload. * Once the 24 hour window elapses, the system deletes the cached copy automatically. A follow-up request after that point triggers a fresh retrieval and repopulates the cache for another 24 hour cycle. ## Operational notes * You do not need to manage cache eviction; the platform handles expiration and cleanup. * If you need to guarantee the most current data, wait for the existing cache to expire or request support for a manual refresh. * Monitor your integration for stale data if you are surfacing rapidly changing records to end users, and adjust user-facing messaging accordingly. # Contribute Catalog Updates Source: https://docs.connect.fastenhealth.com/guides/catalog-editor How Fasten customers can use the Fasten Toolbox to request provider catalog corrections. Fasten provides the [Toolbox - Catalog Update](https://toolbox.fastenhealth.com/) as a lightweight portal where Fasten **customers** can explore the provider catalog and submit corrections. It is not a patient-facing application and should be used only by authorized customers. Toolbox landing page ## What You Can Do in the Toolbox The Toolbox gives customers a self-service way to: * Search the Fasten provider catalog by organization or health system name. * Inspect the metadata attached to each provider record (e.g., aliases, website, logo, identifiers). * Submit correction requests for spelling issues, missing names, incorrect URLs, outdated logos, missing NPI numbers, and other metadata gaps. All submissions go through a manual review by the Fasten data operations team before any change becomes visible in the live catalog. This manual step ensures data accuracy and prevents unauthorized edits. ## Access and Intended Audience * The Toolbox is limited to Fasten customers; do not share it with patients or use it in patient-facing workflows. ## Searching for Providers 1. Open [toolbox.fastenhealth.com](https://toolbox.fastenhealth.com/) 2. Use the global search bar to enter the provider, organization or health system name 3. Filter or refine terms if multiple results appear; searches match across official names, aliases, and known misspellings. Provider search results ## Reading the Provider Entry Each search result opens a detailed entry showing: * Primary name and aliases. * Official website and public contact URL. * Associated brands, portals, or care locations. * Current company logo and other branding assets. * Identifiers such as NPI or CMS Certification Numbers (if available). Provider profile view ### Submitting Catalog Corrections 1. Choose the field(s) you want to update, such as: * Names or aliases (e.g., fix capitalization or add a DBA name) * Website URL or support portal link * Company logo replacement (upload a clean PNG/SVG) * NPI numbers or other identifiers * Free-form notes for complex issues (e.g., mergers, portal deprecations) 2. Provide the corrected value plus any public references that help Fasten validate the change (official websites, press releases, provider directories, etc.). 3. Submit the request. You will **not** receive an email confirmation. Correction request form ### Helpful Tips * When updating logos, include a URL where the asset is publicly displayed so our team can confirm usage rights. ## Review and Approval Process * Every correction is manually reviewed by a Fasten administrator before being applied to the production catalog. * You may be contacted for clarification if supporting evidence is missing or ambiguous. * Once approved, changes propagate to the Fasten Connect and Stitch experiences as part of our next catalog update (which occurs monthly). ## Getting Help If you encounter issues searching the catalog, or receiving status updates on submissions, email [support@fastenhealth.com](mailto:support@fastenhealth.com) with the provider name and the date of your request. # Display & Component Library Source: https://docs.connect.fastenhealth.com/guides/display-component-library Render and customize FHIR resources in your frontend with fhir-react or extract individual fields with fhirpath.js. ## Overview If you need to preview Fasten Connect data in your product quickly, leverage existing component libraries instead of building FHIR resource renderers from scratch. The **fhir-react** project gives you production-ready React components that accept raw JSON resources, while **fhirpath.js** is a lightweight helper for pulling specific fields into custom UI. Most teams mix both: use fhir-react for high-fidelity cards and fall back to fhirpath.js when you only need a data point or two. ## fhir-react in practice [fhir-react](https://www.npmjs.com/package/fhir-react) is a React component library that renders FHIR resources across DSTU2, STU3, and R4 (including CARIN Blue Button and DaVinci PDex) entirely on the client. It ships with Storybook-driven documentation so you can preview every resource before embedding it in your app. ### Install & import ```bash theme={null} npm install fhir-react ``` ```tsx theme={null} import { FhirResource, fhirVersions } from 'fhir-react'; import 'fhir-react/build/style.css'; import 'fhir-react/build/bootstrap-reboot.min.css'; function ResourceCard({ resource }) { return ( ); } ``` ### Icon strategy * Let fhir-react provide defaults by omitting the `fhirIcons` prop. * Pass a custom icon map (URL, ``, imported SVG module, or `false` to hide icons) for branded experiences. ```tsx theme={null} const fhirIcons = { Patient: require('assets/patient.svg'), Encounter: Encounter, }; ; ``` ### Browse Storybook deep links: [https://fastenhealth.github.io/fhir-react/](https://fastenhealth.github.io/fhir-react/) Local run (required for Node ≥17): ```bash theme={null} NODE_OPTIONS=--openssl-legacy-provider npm run storybook ``` Use Storybook to validate layouts, inspect props, and copy JSON fixtures before wiring them into your Fasten Connect integration. ### Suggested development flow 1. `npm install` 2. Run Storybook locally to explore components. 3. Import `FhirResource` (or other exports) and feed them resources returned by Fasten Connect. 4. Fine tune icons, profiles, and CSS overrides, then ship. ## When to reach for fhirpath.js Sometimes you only need to show a field or two (e.g., `Patient.name[0].given[0]`) rather than the entire resource card. Use [fhirpath.js](https://github.com/HL7/fhirpath.js) to evaluate FHIRPath expressions in the browser or server, then render the result with your design system. ### Install ```bash theme={null} npm install fhirpath ``` ### Example: extract a display name ```ts theme={null} import fhirpath from 'fhirpath'; export function getDisplayName(resource) { const [name] = fhirpath.evaluate(resource, 'Patient.name.given[0] & " " & Patient.name.family'); return name ?? 'Unknown patient'; } ``` Use the extracted values in your components or pass them into analytics, search indices, or notification templates. ## Choosing the right tool * Start with fhir-react when you want to stand up polished, data-rich cards with minimal effort. * Layer fhirpath.js wherever you need to cherry-pick fields for bespoke UI, filters, or downstream systems. * Combine both: render the full resource via fhir-react, but drive surrounding UI (breadcrumbs, headlines, CTAs) using values pulled with fhirpath.js. By leaning on these libraries you minimize bespoke rendering code, accelerate delivery, and preserve fidelity across the numerous FHIR profiles Fasten Connect makes available. # Patient Consent & Data Collection Source: https://docs.connect.fastenhealth.com/guides/patient-consent-data-collection Understand how Fasten Connect guides patients through consent and how your systems collect the authorized data. ## Overview Fasten Connect orchestrates a two-stage flow that begins when a patient authorizes access with Fasten Stitch and concludes when your systems retrieve their clinical data. Aligning your product and engineering teams around these stages keeps the experience compliant, transparent, and technically reliable. 1. **Patient Consent** — Patient-facing flows built with Fasten Stitch capture identity, grant authorization, and return the identifiers your backend needs to act on the consent. 2. **Data Collection** — Server-side jobs use the identifiers to request exports, monitor webhooks, and deliver the records to downstream systems while respecting retention policies. patient consent & data collection diagram ## Stage 1: Patient Consent